前言
以下内容引起来的是摘抄并精简/微调了书中核心内容。
第一章-软件工程学概述
为了更有效地开发和维护软件,20世纪60年代,开始真正研究消除软件危机的途径,逐渐形成一门新兴的工程学科,计算机软件工程。
1.1、软件危机
计算机系统发展早期(20世纪,60年代中期以前),软件规模较小,编写者和使用者往往是同一人/同一组人,除了程序清单,无任何文档资料。
20世纪60到70年代中期,出现软件作坊,但仍沿用个体化软件开发方法,维护工作以令人吃惊的比例消耗资源,软件危机因此出现。
1.1.1、软件危机介绍
软件危机指:软件开发和维护中一系列严重问题。概括来说含两方面:如何满足日益增长的需求;如何维护不断扩张的已有软件。
典型表现如下(当然远不止这些):
1、开发成本和进度常常估计不准确。
2、用户对已完成的软件系统不满意,常常由于仅对用户需求模糊了解,就匆忙着手编码,上演闭门造车。
3、软件产品质量靠不住。
4、软件常常不可维护。
5、没有合适的文档资料。
6、软件开发成本在计算机系统总成本中所占的比例逐年上升。
7、开发生产效率远跟不上计算机应用迅速普及的趋势。
1.1.2、产生软件危机的原因
主要原因:软件本身特点有关;开发和维护方法不正确。
由于缺乏“可见性”,开发进展较难衡量,软件质量较难评价,因此管理和控制软件开发相当困难。
软件的维护意味着改正/修改原有设计,这客观上使得较难维护。
软件规模庞大,随着规模的增加其复杂度呈指数上升,同样多人开发又引发了如何高质量协作这一复杂且困难的问题。
目前相当多的软件开发人员,存在不少糊涂观念,采用了错误的方法和技术。忽视需求分析的重要性,认为开发就是写程序并使其能运行,轻视软件维护。
对需求没有完整认识就急忙编码,急于求成,仓促上阵,方向不对必然徒劳无功。 事实上,越早写程序,完成它需要的时间就越长。
1.1.3、消除软件危机的途径
正确的认识是关键。软件是由一个完整的配置组成的,软件项目/产品是程序、数据、相关文档资料的完整集。
软件开发不是个体劳动,而是需要组织良好,管理严密,多人合作,共同完成的工程项目。需充分吸收和借鉴前人积累的有效原理、经验、技巧、概念、方法等。特别是吸取教训。
应使用实践中总结的技术和方法,并探索更多更有效的技术和方法,消除错误观念。
总之解决软件危机既要有技术措施,也要有组织管理措施。软件工程正是从管理和技术两方面研究如何更好地开发和维护计算机软件的一门学科。、
1.2、软件工程
1.2.1、软件工程的介绍
软件工程是指导计算机软件开发和维护的一门工程学科,采用工程概念、原理、技术和方法来开发和维护软件,把技术和方法进行结合,低成本开发出高质量的软件并有效地维护它。
1968年NATO给出了软件工程的一个早期定义:为了高效率、低成本地开发出符合需求的软件系统,而建立和使用的工程原理。
软件工程具备的本质特性:软件的架构、复杂性、需求变化、开发效率、多人协作、满足需求、领域背景。
1.2.2、软件工程的基本原理
软件工程专家B. W. Boehm综合了众多学者并结合自己在TRW公司多年开发经验,在1983年一篇论文中提到了7条基本原理:
1、用分阶段的生命周期计划严格管理
项目的失败一般是由于计划不周导致的,应把软件生命周期划分为若干阶段,并制定出来切实可行的计划。
2、坚持进行阶段评审
质量保证工作不能等到编码阶段工作结束后再进行,设计错误通常占软件错误的63%,编码错误仅占37%。