2.1 软件工程1.0
“软件工程1.0”,即第一代软件工程,自然是受建筑工程、水利工程等影响的传统软件工程,它的诞生可以追溯到1968年。当20世纪五六十年代软件出现危机时,小弗雷德里克·布鲁克斯(Frederick P.Brooks,Jr.)在《人月神话》一书中描述了如下场景:软件开发被喻为众多史前巨兽在焦油坑中痛苦挣扎却无力摆脱,它们挣扎得越猛烈,焦油纠缠得越紧,如图2-1所示。“软件危机”迫使人们去寻找产生危机的内在原因,进而找出消除危机的解决方案。面对“软件危机”,人们调查研究了软件开发的实际情况,逐步认识到工程化的方法对软件系统的开发和维护的必要性。为了克服这一危机,大家走到一起,共同探讨,以获得问题的解决途径。于是,在1968年NATO(North Atlantic Treaty Organization,北大西洋公约组织)的计算机科学家在联邦德国召开国际会议讨论软件危机问题,正式提出了“软件工程”(Software Engineering)这一术语,从此一门新的工程学科诞生了,并得以不断发展,逐渐成熟起来。传统软件工程主要是向土木工程和工业工程学习,吸收其百年实践积累下来的方法和经验,以及沉淀下来的思想。软件工程1.0体现了以下特征。
图2-1 《人月神话》原著封面
(1)产品化:只是交付符合质量标准的组件、构件和系统,没有认识到软件的柔性和数字化特性,把软件当作传统工业的产品,由此产生“软件工厂”这样的思想。
(2)结构化:受传统建筑工程的影响,重视框架和结构的设计,表现为以架构设计为中心进行结构化分析、结构化设计、结构化编程等。
(3)过程决定结果:流程质量决定产品质量,一环扣一环,相信良好的过程产生良好的产品,关注过程胜过关注人,非常关注过程评估和过程改进,CMMI (Capability Maturity Model Integration,能力成熟度模型集成)就是其典型代表。
(4)重视质量管理:引入传统的质量管理体系,包括以顾客为中心的全面质量管理和缺陷预防。
(5)阶段性明确:需求评审通过才能开始设计;设计评审通过才能开始实施(编程),编程结束再进行测试等,瀑布模型是其典型代表模型。
(6)责任明确:角色定义清晰,分工细致。
(7)文档规范化:强调规范的文档,定义了大量的文档模板。
(8)计划性强:具有完整的计划并严格控制变更。
(9)注重项目管理:围绕项目开展管理工作,包括风险预防、里程碑控制、关键路径法等。