《构建之法:现代软件工程》读后及软件工程理解
花了两天时间,我看完了《构建之法:现代软件工程》这本书。结合这本书的内容,我来谈谈我对软件工程的看法以及疑惑之处。
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。它和计算机科学最大的不同点就在于它是一门“工程”。
什么是工程?工程是创造性地运用科学原理,设计和实现建筑、机器、装置的生产过程;或者是在实践中使用一个或多个上述实体或实现这些实体的过程。
计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关。计算机科学中与实践相关的部分,都和数据以及其他学科发生关系。
而软件工程则和人的行为、现实社会的需求息息相关。
简单来说,软件工程是不能离开“人”这一目标的。这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。
软件工程这个学科到底包含了什么样的知识,这些知识又是在什么基础上建立的呢?2014年,IEEE发布了SWEBOK V3.0(Software Engineering Body of Knowledge),完整地回答了这一问题,下面是其中提到的15个知识领域(Knowledge Area,KA)
1. Software Requirements(软件需求)
2. Software Design(软件设计)
3. Software Construction(软件构造)
4. Software Testing(软件测试)
5. Software Maintenance(软件维护)
6. Software Configuration Management(软件配置管理)
7. Software Engineering Management(软件工程管理)
8. Software Engineering Process(软件工程过程)
9. Software Engineering Models and Methods(软件工程模型与方法)
10. Software Quality(软件质量)
11. Software Engineering Professional Practice(软件工程专业实践)
12. Software Engineering Economics(软件工程经济学)
13. Computing Foundations(计算基础)
14. Mathematical Foundations(数学基础)
15. Engineering Foundations(工程基础)
软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。追求这些目标有助于提高软件产品的质量和开发效率,减少维护的困难。
这本书共有17个章节,除了第1章节的绪论外,其余都章节都分别讲述了在实际软件工程中所需要掌握或了解的内容。在软件开发过程中,我认为最难的是需求分析阶段。如何能够精准的把握用户的需求是每一个项目所面临的巨大挑战。
找到需求的步骤:
1.获取和引导需求
2.分析和定义需求
3.验证需求
4.在软件产品的生命周期中管理需求
软件开发的过程,就是“用户最需要的东西”在下面这一链条中传送、转换、实现、扭曲或丢失的过程。用户最需要的 > 用户表达出来的 > 软件团队能理解的+团队的商业目标 > 软件团队成员具体表达出来的(PM写Spec) > 在各种约束条件下,具体执行表达出来的(Dev写代码) > 验证通过的(Test) > 通过各种渠道告诉目标用户(发布/推广) > 用户终于能用上了,但是他们不满意。
软件业界有一个非常著名的秋千图,表达了类似的情形:
这清楚反映了软件需求的难点。怎么样才能做好需求分析并精确找到用户的需求?
在书中,内容大多还是偏向于理论的,要在实际的环境下才能体会到不同于理论上的困难。在本学期的学习中,我会带着疑问,贯彻“做中学”的方法,在课堂中获取知识、在项目中理解并应用知识。