《构建之法》第一章学习
1、软件工程的定义
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。人们在开发、运营、维护软件的过程中有很多技术、做法、习惯和思想体系。软件工程把这些相关的技术和过程统一到一个体系中,叫“软件开发流程”。软件开发流程的目的是为了提高软件开发、运营、维护的效率,并提高软件的质量、用户满意度、可靠性和软件的可维护性。
1.1软件的特殊性
软件是可以运行在计算机及电子设备中的指令和数据的有序集合,软件的主要形式有:
- 系统软件:操作系统、设备驱动程序、工具软件等
- 应用软件:用户使用它们来完成工作,从管理核电厂到写文章,或者是通信、游戏、浏览网页、播放视频等
- 恶意软件:软件病毒等软件
软件开发过程中的五点难题:复杂性;不可见性;易变性;服从性;非连续性(即输入上很小的变化,会引起输出上极大的变化)
1.2计算机科学和软件工程的比较
计算机科学 | 软件工程 |
---|---|
发现和研究长期的、客观的真理 | 短期的实际效果(具体的软件会过时) |
理想化 | 对各种因素的折衷 |
确定性、完美、通用性 | 对不确定性和风险的管理,足够好,具体的应用 |
各个学科独立深入研究,做出成果 | 关注和应用各个相关学科的知识,解决问题 |
理论的统一 | 百花齐放的实践方法 |
形式化,追求简明的公式 | 在实践中建立起来的灵感和直觉 |
正确性 | 可靠性 |
2、程序 ->软件 ->软件企业
程序=数据结构+算法
- 程序,在这里指的是源程序,就是一行行的代码。仔细看过去,它们的确是建立在数据结构上的一些算法
- 程序还要对数据进行操作,这些数据有些是静态的(例如软件的图标、提示信息),有些是动态的(例如程序生成的随机数字、程序通过网络下载的数据、用户的文字或语音输入等)
软件工程的核心部分是和软件开发活动(构建管理、源代码管理、软件设计、软件测试、项目管理)相关的内容。广义上的软件工程也包括用户体验、用户界面设计(User Interface Design)等。所以,一个推论是:
软件=程序+软件工程
一个扩展的推论是:
软件企业 = 软件 + 商业模式
程序(算法、数据结构)是基本功,但是在算法和数据结构之上,软件工程决定了软件的质量;商业模式决定了一个软件企业的成败。软件从业人员和软件企业的道德操守会极大地影响软件用户的利益。
3、软件工程三步曲
1. 研发出符合用户需求的软件说明
- 要通过实际的工作收集、推导、提炼需求,并在软件发布后通过实际数据验证需求的确被满足了
- 需求来自于实际,而不是自己想象出来的“需求”或者人云亦云的需求(例如:图书馆管理系统)
2. 通过一定的软件流程,在预计的时间内发布“足够好”的软件说明
- 这个软件是经历了一定的软件流程,通过全体团队成员的努力,在一个时间段内逐步完成的
3. 通过数据和其他方式展现所开发的软件是可以维护和继续发展的说明
- 例如,对用户需求有详细的分析,包括对将来这类软件发展的趋势的分析
- 主要功能都有设计文档,源代码完整,有修改记录,并有最后版本
- 关键模块有可以执行的单元测试、压力测试脚本,对于已知的bug和将来的工作都有详细的记录