前言 软件是为人类提供计算服务的逻辑制品,早期为科学界提供数值计算服务,现在为社会各个领域提供逻辑计算服务。人类需要软件不是为了满足衣食住行,而是为了帮助人类思考、计算和记忆。 作为逻辑制品的软件和作为有形制品的钢材一样,生产过程经历了手工生产、作坊式生产和工程化生产三大阶段。 1968年诞生了软件工程,标志着软件生产走向了工程化之路。工程化生产的三要素是方法、工具和管理。 瀑布型方法是最早提出来的软件生产方法,将软件生产过程分为若干阶段,像瀑布一样自顶向下依次进行: 需求分析、概要设计、界面设计、详细设计、测试、维护和演化。 快速原型方法克服了瀑布型方法的僵化,强调快速构造出软件模型,以此模型来诱导出需求,分为进化式和抛弃式两种原型方法。 增量方法强调增量式的开发软件系统,基础性的、业务源头的模块先开发使用,然后逐渐开发后续模块。 螺旋方法不是将软件过程用一系列活动和活动间的回溯来表示,而是将过程用螺旋线表示,在螺旋线中每个回路表示软件过程的一个阶段,因此最里面的回路可能与系统可行性有关,下一个回路与系统需求定义有关,再下一个回路与系统设计有关。 敏捷方法主张开发团队主攻软件本身而非设计和编制文档,适合需求在开发过程中快速变化的应用。 面向复用方法是在大量商业软件已经成熟的情况下,复用以往软件系统的构架、构件、模块等。 形式化方法适合协议一类软件的开发,需求可以被严密地表达,后续的每一步可以进行形式化表达和转换,最后得到软件系统。 净室方法是模拟硬件生产的方法,半导体是在真空中生产的,每一步都没有引入灰尘,软件也在无错误引入的“真空”环境下一步步开发出来。 作为逻辑制品的软件和作为有形制品的房屋一样,有一个构造粒度的问题。构造粒度越大,则复用粒度越大,从而软件生产越快。 面向对象方法在类这个粒度层次上来构造软件,通过类的封装,在同种编程语言中实现了代码级别的复用。在面向对象方法之前,代码是通过函数或过程来实现复用的。 面向构件方法在构件这个粒度层次上来构造软件,构件技术在二进制级别共享,使复用跨越了编程语言的限制。 面向Agent方法在Agent这个粒度层次上构造软件,Agent可以视为一种智能的类。 面向SOA方法在服务这个粒度层次上来构造软件,SOA利用Web Service等技术,使复用跨越了操作系统平台的限制。 面向云计算方法仍然在服务这个粒度层次上构造软件,是一种集中服务模式,是一种新的商业模式。 作为逻辑产品的软件生产和作为有形制品的钢材生产一样,需要强大的工具来代替手工生产方式,支持软件工程的工具称为CASE(computer aided software engineering)。瀑布型模型划分了软件工程的开发阶段,每个阶段都有相应的CASE工具。支持单个过程任务的CASE被称为工具(tool),如生成代码、生成测试用例等; 支持过程描述、设计等阶段活动的CASE称为工作平台(workbench),通常是一组工具的集成; 用于支持全部软件工程或至少是软件工程主要部分的CASE称为环境(environment),通常是集成了几个工作平台。 作为逻辑产品的软件与有形制品的钢材不一样的是,前者具有“不可见性”,因此软件生产的管理具有自己的一些特点。 项目投标内容是依次介绍立项、招标、投标、中标和签订合同。 人员管理内容是首先了解人的需求层次和人的大脑的特征; 其次是选择合适的人; 最后是留住人才。 成本管理内容是: 软件成本的构成因素; 软件报价和软件成本的关系; 软件报价的方式; 软件生成率的度量方法。 质量管理内容是: 软件质量的定义; 质量模型和度量因素; 建立质量控制的规范。 风险管理内容是: 进行风险因素分析、识别、规划和监控。 软件工程是一门实践性非常强的学科,本书为此设置了不同的实验。 针对基于过程的软件开发方法设置了信息系统开发,实验需要经历需求分析、概要设计、界面设计、详细设计、编码和测试等过程,全程贯穿文档的撰写和团队的协作。 针对基于构造粒度的软件开发方法设置了4个实验: 类制作是为面向对象方法设置的; 构件制作是为基于构件的软件开发方法设置的; SOA实现是为面向SOA软件开发方法设置的; 云平台体验是为面向云计算设置的。 针对软件工具设置了一个实验: 一个代码生成器的CASE工具制作。 软件工程实践过程中,一个重要的内容是文档的撰写。文档是软件工程活动的重要交流和存储载体,为此,本书的最后附上了12种重要的文档模板,帮助读者熟悉如何撰写文档。 本书围绕软件的基本概念、开发方法、开发工具、管理、实践和文档6方面来选择和组织材料,目的是力求涵盖软件工程活动的方方面面,力求用一个纽带将这些活动串联起来,为学生在校学习软件工程,以及今后就业实践软件工程提供一些较为全面的帮助。 为了将软件工程每个阶段最优秀的知识传授给读者,本书撰写过程中直接或间接地引用了许多专家和学者的文献,在此向他们深表谢意。 在本书的撰写过程中,方木云和刘辉组织编写及审核全书,并编写了第1~2章、第4~10章、第15~18章、第21~25章和附录; 杭婷婷编写了第11~14章; 周兵编写了第3、第19和第20章,章闯、王超、谢恩文、刘洪彬、吴玉森、李杰等协助了书稿材料的收集和整理工作,在此表示感谢。 虽然作者在本书的编写过程中反复斟酌,力求完美,但由于水平有限,书中仍可能有许多不完善的地方,恳请读者批评指正。 作者 2023年2月