一、第一章 概论
1.1软件=程序+软件工程
计算机专业术语
软件企业=软件+商业模式
软件开发的三个阶段:1.玩具阶段 2.业余爱好阶段 3.探索阶段
软件架构(Software Architecture)
软件设计与实现(Software Design ,Implementation and debug)
源代码管理(Source Code Control)
配置管理(Software Configuration Management)
质量保障(Quality Assurance)
软件测试(Test)
需求分析(Requirement Analysis)
程序理解(Program Comprehension)
软件维护(Software Maintenance)
服务运营(Service Operation)
软件的生命周期(Software Life Cycle,SLC)
软件项目的管理(Project Management)
用户体验(User Experience)
国际化和本地化(Globalization & Localization)
用户界面设计(User Interface Design)
1.2软件工程是什么
软件工程是把系统的、有序的、可量化的方法应用到软件开发、运营和维护上的过程。
1.2.1软件的特殊性
复杂性(Complexity)
不可见性(Invisibility)
易变性(Changeability)
服从性(Conformity)
非连续性(Discontinuity)
1.2.2软件工程与计算机科学的关系
微软学术搜索(Microsoft Academic Search)
计算机科学(Computer Science)
计算理论(Theoretical Computing)
信息和编码理论(Informaion and Coding Theory)
算法和数据结构(Algorithm and Data Structure)
形式化方法(Formal Methods)
程序设计语言(Programming Language)
计算机系统结构(Computer Architecture)
并行计算和分布式系统(Concurrent、Parallel and Distributed System)
实时系统和嵌入式系统(Real Time and Embedded System)
操作系统(Operating System)
计算机网络(Networking)
科学计算(Scientific Computing)
安全和密码学(Security and Cryptography)
人工智能(Artificial Intelligence)
模式识别(Pattern Recognition)
机器学习(Machine Learning)
数据挖掘(Data Mining)
信息提取(Information Retrieval)
计算机图形学(Computer Graphics)
计算机视觉(Computer Vision)
多媒体(Multimedia)
数据库和大规模数据处理(Database and Large Scale Data Processing)
万维网(World Wide Web)
自然语言处理和语音(Natural Language Processing and Speech)
人机交互(Human Computer Interaction)
软件工程(Software Engineering)
计算机科学特点:发现和研究长期的、客观的真理;理想化的;确定性的、通用性;各个学科深入研究;理论的统一;强调原创性;形式化、追求简明的公式;正确性;
软件工程特点:短期的实际结果;对个种因素的折中;对不确定性和风险的管理、足够好、具体的应用;关注和应用各个相关学科的知识、解决问题;百花齐放的实践方法;最成熟、最好的实践方法;在实践中建立起来的灵感和直觉;可靠性;
1.2.3软件工程的知识的领域
软件工程的知识领域和理论基础
生命周期 | 软件需求、软件设计、软件构建、软件测试、软件维护 |
专门领域 | 软件配置管理、软件工程管理、软件工程过程、软件工程模型和方法、软件质量 |
理论基础 | 计算基础、数学基础、工程基础 |
1.2.4软件工程的目标-创造“足够好”的软件
用户满意度:用户在使用时发现了软件的很多问题、影响了用户使用软件的效率。
可靠性:某个软件经常会崩溃,某个操作系统会时不时死机、某个网站往往在最需要的时候登不上去。
软件流程的质量:软件团队和开发流程的问题太多,导致团队成员无法互相协作,按时交付软件。
可维护性:某个软件太难维护了,按下葫芦起了瓢,修复了一个问题,另一个问题又出来了。
二、p18-2
1.第一章我看了这段:有些时候,我们要为某个需求写一些特殊功能,不久后又要把这些功能在合并回主要版本。有些程序要配置不同的界面,运行在中文、英文或其他语言的操作系统上;有些程序还有32位版本、64位版本等。那么我有这个问题:软件团队的成员每天都在修改各种代码,怎么保证质量不断提高?我查了资料:改善代码质量,首先要提高程序员的质量意识,让每个程序员知道什么是高质量的代码,如何编写高质量的代码。达到这一点,可以通过不断的培训,提高程序员的编程技能,这个过程是一个多赢的过程,程序员编程技能提高了,个人得到成长;程序质量提高了,产品在开发过程中出现的问题会减少,项目进度更容易控制;程序质量提高了,产品可以更加稳定,客户会更满意。如果编程能力提高的不快,那么实际中应该怎么解决?
2.第三章我看了这段:软件开发有很多个人的、感情驱动的因素,但是一个成熟的团队成员必须从事实和数据出发,按照流程、理性的工作。很多人认为自己需要灵感和激情,才能为宏大的目标奋斗,才能够成为专业人士。我的问题是大多数工程师都在团队的环境中工作,怎样才是一个合格的队员呢? 着重灵感还是工作呢?我查了下:软件项目的确需要创造性,需要一些意外,一些惊喜。软件领域可以分为两个方面:一方面是技艺创新的大爆发;另一方面是坚持不懈的工程工作,包括软件的改善、维护、和测试等。那么我们自己需要怎样权衡?
3.第六章我看了这段:软件团队中还有一个重要的角色-测试。测试人员在一个冲刺中怎么工作?有敏捷专家建议测试人员可以担负起产品负责人的部分责任,同时掌握验收测试流程,对产品的最终质量负责,但是测试人员的开发技术在团队中并不占优,那么我的问题是测试人员还有必要专门负责吗?可以用开发人员编写代码之后再来代替吗?
4.第十一章我看了这段:代码完成就是指工程师认为所有的代码都写了,所有应该实现的功能都实现了,但这一状态的软件还不能发布,因为代码中可能会有很多bug,用户看到后会提意见。那么这样的工作对于初入工作的小白怎样应对?如果对于一个模块,熟练的程序员可能只用一两天,而对于小白就得花上两三天,在仅有限的时间下,高手工作越来越集中,小白工作任务越来越少,这时应该怎么办?
5.第十四章我看了这段:软件的开发过程有三个主要的特性:“好”、“快”、“便宜”。通俗的理解是“软件在功能、成本、时间三方面满足利益相关者的需求”。前面提到功能方面的质量与具体的程序相关,那么软件工程方面的质量就与“快”、“便宜”相关。那么如果存在一个看来很不容易实现的模块,实现不了预期的需求,但时间快到了,怎么办?
三、p18-3
1.微信
(1)为了联系朋友 盈利 通过收取转账手续、与各种公众号合作
(2)下载 高三 交流、查信息很方便
(3)提醒更新 进入应用页面提醒
(4)包含的公众号很多包括银行、学习信息,查询信息方便
2.饿了么
(1)为了自己需要 盈利 通过开通会员
(2)下载 大一 订餐方便、便宜
(3)软件更新 应用商场更新
(4)合作的商家很多 选择性很大
3.抖音
(1)朋友推荐 盈利 收广告费、直播平台手续费
(2)拷贝 大二 内容有趣
(3)软件更新 应用商场提醒
(4)推广性好、内容丰富