1.1 软件 = 程序+软件工程
程序 = 数据结构 + 算法!
软件=程序+软件工程!
软件企业 = 软件+商业模式!
软件开发的四个不同阶段:
1.玩具阶段
2.业余爱好阶段
3. 探索阶段
4.成熟的产业阶段
一个复杂的软件不但要有合理的软件架构, 软件设计与实现, 还要有各种文件和数据来描述各个程序文件之间的依赖关系,编译参数,链接参数等等. 这些都是软件构建的过程.
有些程序要配置不同的界面, 运行在中文,英文或其他语言的操作系统上;有些程序还有32位版本,64位版本等. 这是 源代码管理的问题也叫 配置管理.
还需要一系列的工具,流程,和文档来保证程序的正确性,这些工具,流程应该达到很高的质量,才能保证开发出来的软件的质量. 这就是 软件质量, 具体的验证过程叫做 软件测试.
软件团队要从需求分析开始,把合适的需求梳理出来,然后逐步开展后续工作,如设计软件架构,实现算法,测试,到最后发布软件.
尽快读懂已有程序,叫 程序理解.
给软件打补丁,修复问题,这叫软件维护或者服务运营.
这一过程就是 软件的生命周期.
在这一周期中,有人得负责 软件项目的管理.
一个好的软件,即使功能和同类软件区别不大,但会让人感觉非常好用,这就是 用户体验.
软件要处理不同地区的用户对界面和功能的不同需求,这叫做软件的 国际化和本地化.
1.2 软件工程是什么
软件工程师把系统的有序的,可量化的方法应用到软件的开发、运营和维护上的过程。
软件工程包括的领域:
- 软件需求分析
- 软件设计
- 软件构建
- 软件测试
- 软件维护
1.2.1 软件的特殊性
- 复杂性Complexity
大型软件代码量巨大,而且不同模块之间的关系越来越复杂。
-
不可见性Invisibility
工程师只能看到的是代码和出错了的代码,但并不知道用户遇到问题时到底是怎么样的。
-
易变性Changeablity
人们不断地希望软件能做新的东西和适应新的软件,但于此同时很难修改。
-
服从性Conformity
软件无法独立存在,必须依赖硬件,而且还要服从用户、行业系统的要求。
-
非连续性Discontinuity
有些软件输入与输出不匹配。
1.2.2 软件工程与计算机科学的关系
计算机科学偏理论研究,是追求那种理想化、完美的真理,各个学科会独立深入研究并出成果;
而软件工程偏向实践,追求短期的效果,往往是不完美的,因为要对不可抗的现实因素折衷,会融合各个领域的知识去实现实际的问题。
软件工程与计算机科学也有很多交互。
1.2.3 软件工程的知识领域
-
生命周期
1. 软件需求 2. 软件设计 3. 软件构建 4. 软件测试 5. 软件维护
-
专门领域
1. 软件配置管理 2. 软件工程管理 3. 软件工程过程 4. 软件工程模型和方法 5. 软件质量
-
理论基础
1. 计算基础 2. 数学基础 3. 工程基础
1.2.4 软件工程的目标 - 创造"足够好"的软件
-
用户满意度
在用户使用时,尽量满足用户的需求,使用户满意。
-
可靠性
软件经常崩溃,电脑经常死机,我们要尽量避免这种问题的出现。
-
软件流程的质量
软件开发团队的默契度,让开发人员速度更高效,
-
可维护性
出了问题可以快速解决。