读《构建之法,现代软件工程》,写一篇读书笔记记下自己对软件工程的初印象吧。
软件工程是什么?
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
为什么学习软件工程?
软件工程不是软件本身,不是程序,那么学习软件工程有什么作用呢?正如现在大学中,开设《软件工程》这一门课,但是真正用心学习的学生并不多,而且学习的教材大多生搬硬套概念,缺乏生趣,甚至有一些老师对软件工程本身也缺乏深刻的理解,导致这一门课成为了大学的鸡肋课。
《构建之法,现代软件工程》这本书的作者邹欣老师是一个有丰富开发经验和教学经验的IT工作者,对这一方面有深刻的理解,致力于改善大家对软件工程的理解,减少在软件开发中的弯路。这一本书中使用生动形象的实例、更加平易近人的语言讲解软件工程,对于初学者来说更适合作为一本入门软件工程的启蒙读物。
要解答为什么学习软件工程,还是需要从软件出发,看软件工程会给软件的开发带来哪些影响?
软件 = 程序 + 软件工程
软件工程涉及到很多方面。软件工程是围绕在软件的整个生命周期的。软件工程是软件开发和应用中不断总结出来的经验理论方法。将软件工程中的方法应用到软件开发过程中,可以更好、更有效率地开发软件。
软件的生命周期
- 软件构建(Software Construction)
- 源代码管理(Source Code Control)
- 质量管理(Quality Assurance)
- 软件测试(Testing)
- 需求分析(Requirement Analysis)
- 程序理解(Program Comprehension)
- 软件维护(Software Maintenance),或者服务运营(Service Operation)
- 软件的项目管理(Project Management)
- 软件的用户体验(User Experience)
软件的特殊性
- 复杂性
- 不可见性
- 易变性
- 服从性
- 非连续性
这些的软件的特性是由软件的特质决定的,也导致在软件系统的功能越来越复杂的今天,开发软件的速度并没有得到飞快地提高的原因,同时也导致开发‘一个好软件’变得很难,同时也让软件工程有它独特的挑战和魅力。
软件工程与计算机科学的关系
- 软件工程与‘工程’有关,容易理解软件工程更多偏向于工程实际应用中,可以说与机械工程、航天工程本质一样,只是应用于不同的领域而已。而计算机科学与‘科学’有关,容易理解到研究计算机方面的科学技术理论,偏向于理论研究。正如现在的工科和理科的区别吧!
计算机科学中的理论研究部分,大多可以从形式上证明,与数学、离散数学、数理逻辑密切相关;计算机科学中与实践相关的部分,都和数据以及其他学科发生关系;软件工程则和人的行为、现实社会的需求息息相关。软件工程的研究目标(软件的开发、运营和维护)都有“人”出现,这些“人”可以是项目需求的提供者,可以是软件的开发人员,还可以是软件的用户。
- 软件工程与计算机科学的不同侧重点
计算机理论的进展会帮助软件工程(例如对程序正确性的分析);软件工程的进展(更好的工具,更多的应用领域)会帮助计算机科学家做更多的实验和探索。
软件工程的目标 - 创造“足够好”的软件
什么是好的软件, 没有Bug
的软件?
诚然,Bug
的多少可以直接衡量一个软件的开发效率、用户满意度、可靠性和可维护性。但是软件工程的目标并不是消除所有的Bug
,因为这个太难。
软件工程的一个重要任务就是决定一个软件在什么时候能“足够好”,可以发布。
达到下面三个要求,就可以说是一个'足够好'的软件
- 研发出符合用户需求的软件说明
- 通过一定的软件流程,在预计的时间内发布“足够好”的软件说明
- 并通过数据和其他方式展现所开发的软件是可以维护和继续发展的说明