前言 1. 写作背景 软件工程是研究如何用工程化的概念、原理、技术和方法来指导计算机软件开发和维护的一门交叉性学科,其理论性和实践性都很强。它的应用范围和规模日益扩大,使之成为软件开发人员必须掌握的技术之一。作为软件技术人员,接受软件工程的概念并不难,但是要真正理解、掌握和运用这门先进的技术并完整地进行系统开发,是有一定难度的。鉴于此,我们编写了这本关于软件工程系统分析、设计和实施的教材,以使更多同行受益。 本书从2002年第1版到2017年第4版都备受老师和读者欢迎。为更好地反映最近几年软件工程领域的发展现状,编者根据“‘十二五’普通高等教育本科国家级规划教材”的指导精神,总结近年来教学和科研的经验,在第4版的基础上做了调整,特别补充了应用实例,形成了本书。为了方便学校教学,编者为本书制作了教学PPT,设计了教学大纲,并编写了配套的《软件工程习题解答》和《软件工程实践与课程设计》。 2. 本书结构 本书由四部分组成。 第一部分为基础理论,包括第1~3章。 第二部分为结构化方法,包括第4~6章。 第三部分为面向对象方法与实现,包括第7~11章。 第四部分为测试与工程管理,包括第12、13章。 3. 编写方法 本书是编者根据二十多年来对软件工程学、面向对象方法等的教学与研究,并结合软件开发新技术编写而成。根据编者的教学经验,读者学习一门新技术时,教材是非常重要的。因此,编者在修订时,对于部分章节和内容做了更新和修改。为了便于读者的理解和应用,我们将一个完整实例的各部分分别对应第2~8章各章内容的最后一节。 4. 如何使用本书 根据实际情况,在讲授本书时建议安排36~54学时。教师可以按照自己的风格和喜好删除章节,也可以根据教学目标灵活调整章节顺序。 第1章绪论(2学时) 第2章基本理论(2学时) 第3章可行性研究(2~4学时) 第4章软件需求分析(4~6学时) 第5章总体设计(4~6学时) 第6章软件详细设计(4学时) 第7章面向对象分析(4~6学时) 第8章面向对象设计(4~6学时) 第9章用户界面设计(2~4学时) 第10章数据库及其接口设计(2~4学时) 第11章软件实现(2~4学时) 第12章软件测试(2~4学时) 第13章软件项目管理与计划(2学时) 本书的编写得到了广东理工学院李代平教授主持的广东省级重点学科建设项目 “计算机科学与技术”一级学科课题的支持。胡致杰、林显宁、李清霞、彭守镇、李小莲、郭锐参加了资料的收集与整理工作。 由于软件工程的知识面广,在介绍中不能面面俱到,加上时间仓促,编者水平有限,书中的不足之处在所难免,恳请读者批评指正。 本书配套资源可以从清华大学出版社官方微信公众号“书圈”(见封底)下载。关于本书及资源使用中的问题,请联系404905510@qq.com。 编者 2022年1月 于振华楼 第4版前言 1. 写作背景 在计算机软件开发的工程科学技术中,软件工程的概念、原理、技术与方法已成为计算机科学与技术范畴的一项重要内容,在计算机科学技术领域占据无可争议的主流地位。作为软件技术人员,接受软件工程的概念并不难,但是要真正理解、掌握和运用这门先进的技术并完整地进行系统开发,是有一定难度的。鉴于此,编者编写了这本关于软件工程系统分析、设计和实施的教材,以使更多同行受益。 几年前,编者编写的《软件工程》(第3版)备受老师和其他读者欢迎。这本书对于应用型本科学校的读者而言,有些内容显得深了些。为更好地反映最近几年软件工程领域的发展现状,编者根据“‘十二五’普通高等教育本科国家级规划教材”的指导精神,总结近年来教学和科研的经验,在第3版基础上进行了调整和增删,形成了第4版教材。为了方便教学,编者还编写了配套的《软件工程习题解答》(第4版)(ISBN 9787302473336)和《软件工程实践与课程设计》(ISBN 9787302478676)。 2. 本书结构 本书由四部分组成。 第一部分为基础理论,包括第1~3章。 第二部分为结构化方法,包括第4~6章。 第三部分为面向对象方法与实现,包括第7~11章。 第四部分为质量与工程管理,包括第12~15章。 3. 本书特点 本书对有用的概念都进行了严格的论述,每个概念都有相应的例子解释,同时每章都配有习题。此外,编者还编写了与本书配套的《软件工程习题解答》(第4版)和《软件工程实践与课程设计》,帮助读者巩固所学知识。 4. 适用范围 软件工程是软件系统开发课程的教科书,适合作为软件工程方面课程的教材,也可作为相关工程技术人员的参考用书。 在选修本课程之前,读者应该具有计算机的基础知识,掌握数据结构和数据库技术。另外,如果具有算法语言的编程经验,会有助于深入理解系统开发过程。 5. 编写方法 本书是编者根据近20年来对软件工程学、面向对象方法等的教学与研究,以及编者主持或参与几十项软件开发项目的实践经验,并结合软件开发新技术编写而成的。根据编者的教学经验,读者学习一门新技术时,教材是非常重要的。因此,编者在修订时,对于部分章节和内容进行了更新和修改,以便读者更好地学习与掌握相关知识。 6. 如何使用本书 根据实际情况,在教学时建议安排54~60学时。教师可以按照自己的风格和喜好删减章节,也可以根据教学目标灵活调整章节顺序。 第1章绪论(2学时) 第2章基本理论(2学时) 第3章可行性研究(2学时) 第4章需求分析(4学时) 第5章总体设计(4学时) 第6章软件详细设计(4学时) 第7章面向对象分析(4学时) 第8章面向对象设计(2学时) 第9章用户界面设计(2~4学时) 第10章数据库及其接口设计(2学时) 第11章软件实现(2学时) 第12章软件质量(2学时) 第13章软件测试(2学时) 第14章软件维护(2学时) 第15章软件项目管理与计划(2学时) 本书的编写得到广东理工学院李代平主持的广东省级重点学科建设课题——一级学科“计算机科学与技术”项目的支持。信息工程系胡致杰、赖小平、刘建友和张俊林参加了资料的收集与整理工作。 由于软件工程的知识面广,书中不可能面面俱到,加上时间仓促,编者水平有限,书中的不足之处在所难免,恳请读者批评指正。 编者 2017年5月于振华楼 第3版前言 1. 写作背景 软件工程是指导计算机软件开发的工程科学技术。软件工程的概念、原理、技术与方法已成为计算机科学与技术范畴的一项重要内容。用软件工程的思想进行软件设计与开发的先进性众所周知,它在计算机科学技术领域占据无可争议的主流地位。作为软件技术人员,接受软件工程的概念并不难,但是要真正理解、掌握和运用这门先进的技术并完整地进行系统开发,是有一定难度的。鉴于此,编者编写了这本关于软件工程系统分析、设计和实施的教材,以使更多同行受益。 几年前,编者编写的《软件工程》(第2版)备受老师和读者欢迎。为更好地反映最近几年软件工程领域的发展现状,编者根据“‘十二五’普通高等教育本科国家级规划教材”的指导精神,总结近年来教学和科研的经验,在第2版基础上做了调整和增删,形成了这本教材。主要从下述4个方面进行了精心修改: 删掉了一些较陈旧或较次要的内容; 增加了一些较新颖或较重要的内容; 用UML的概念与符号重新改定了有关面向对象方法学的内容; 结构上也进行了必要的调整。 2. 本书结构 本书由四部分组成。 第一部分为基础理论,包括第1~3章。 第二部分为结构化方法,包括第4~6章。 第三部分为面向对象方法与实现,包括第7~16章。 第四部分为质量与工程管理,包括第17~20章。 3. 本书特点 本书对各章的概念都进行了严格的论述,每个概念都有相应的例子解释,同时各章都配有习题。编者还编写了与本书配套的《软件工程习题解答》,帮助读者巩固所学知识。 4. 适用范围 软件工程是软件系统开发课程的教科书,适合开设有软件工程课程的大学高年级和低年级研究生作为教材,也可作为工程技术人员的参考用书。 在选修本课程之前,读者应该具有计算机的基础知识,掌握数据结构和数据库技术。另外,如果具有算法语言的编程经验,会有助于深入理解系统开发过程。 5. 编写方法 本书是编者根据近十年来对软件工程学、面向对象方法等的教学与研究,以及编者负责或参与几十项软件开发项目的实践经验,并结合软件开发新技术编写而成。根据编者的教学经验,读者学习一门新技术时,教材是非常重要的。因此,编者在修订时,对于部分章节和内容做了更新和修改。 6. 如何使用本书 根据实际情况,在教学时建议安排54~60学时。教师可以按照自己的风格和喜好删除章节,也可以根据教学目标灵活调整章节顺序。另外,前面带“*”的部分为选学内容。 第1章绪论(2学时) 第2章基本理论(2学时) 第3章可行性研究(2学时) 第4章需求分析与*体系结构(4学时) 第5章总体设计(4学时) 第6章软件详细设计(4学时) 第7章面向对象方法概论(4学时) 第8章模型(2学时) 第9章对象分析(4学时) 第10章关系分析(4学时) 第11章控制驱动部分的设计(4学时) 第12章问题域部分设计(4学时) 第13章用户界面设计(2~4学时) 第14章数据库及其接口设计(2学时) 第15章*形式化方法(0~4学时) 第16章软件实现(2学时) 第17章软件质量(2学时) 第18章软件测试(2学时) 第19章软件维护(2学时) 第20章软件项目管理与计划(2学时) 编者 2011年1月于广州小谷围岛 第2版前言 1. 写作背景 本书是根据“‘十一五’普通高等教育本科国家级规划教材”的指导精神而编写的。出版后我们在教学的使用过程中,觉得有许多地方不是很理想,因此,我们根据使用该教材的教师和读者的意见,对原书在结构和内容上做了很大的调整和修改。 随着科学技术的进步,软件的理论与开发方法不断涌现。软件工程是指导计算机软件开发的工程科学技术。软件工程的概念、原理、技术与方法已成为计算机科学与技术的一项重要内容。 用软件工程进行软件设计与开发的先进性是众所周知的,它在计算机科学技术领域占据了无可争议的主流地位。作为软件技术人员,接受软件工程的概念并不难,但是要真正理解、掌握和运用这门先进的技术并完整地进行系统开发,是有一定难度的。鉴于此,我们编写了本书,目的是向读者提供一本关于软件工程系统分析、设计和实施的教科书,以使更多同行受益。 2. 本书结构 本书由四部分组成。 第一部分为基础理论,包括第1~3章。 第二部分为结构化方法,包括第4~6章。 第三部分为面向对象方法与实现,包括第7~15章。 第四部分为质量与工程管理,包括第16~19章。 3. 本书特点 本书对每章的概念都进行了严格的论述,每个概念都有相应的例子解释,同时每章都配有习题,使读者巩固所学知识。 4. 适用范围 软件工程是软件系统开发课程的教科书。讲授时间一般为40~60学时。本书适合开设有软件工程课程的大学高年级本科生和低年级研究生作为教材,也可作为工程技术人员的参考用书。 在选修本课程之前,读者应该具有计算机的基础知识,掌握数据结构和数据库技术。同时具有可视化类语言的编程经验,会有助于深入理解系统开发过程。 5. 编写方法 本书是编者根据近10年来对软件工程学、面向对象方法等的教学与研究,以及编者领导或参与的20项软件项目开发的实际应用经验,并结合软件开发新技术编写而成。根据过去的教学经验,读者学习一门新技术,教材是非常重要的。因此,在修订时,对于部分章节和内容做了调整和修改。 6. 如何使用本书 根据学生的实际情况,教师在教授本书时,建议一般在54~60学时。教师可以按照自己的风格和喜好删除章节,也可以根据教学目标灵活调整章节顺序。另外,前面带“*”为选学内容。 第1章绪论(1学时) 第2章基本理论(2学时) 第3章可行性研究(2学时) 第4章软件需求分析(4学时) 第5章总体设计(4学时) 第6章软件详细设计(4学时) 第7章面向对象方法概论(4学时) 第8章模型(2学时) 第9章对象分析(4~6学时) 第10章关系分析(4~6学时) 第11章面向对象设计原则(2学时) 第12章对象设计(5~6学时) 第13章接口设计(4~6学时) *第14章形式化方法(4学时) 第15章软件实现(2学时) 第16章软件质量(2学时) 第17章软件测试(2学时) 第18章软件维护(2学时) 第19章软件项目管理与计划(2学时) 由于软件工程知识面广,在介绍中不能面面俱到,加上时间仓促,编者水平有限,书中的不足之处在所难免,恳请读者批评指正。 编者 2007年5月于小谷围岛 第1版前言 1. 关于本书 软件工程是指导计算机软件开发的工程科学。人们希望通过用工程技术和管理方法使软件开发工程化,由此产生了软件工程学。软件工程学是采用工程的概念、原理、技术与方法,把当前先进的技术与已经实践证明了的正确管理方法相结合来开发软件。从20世纪60年代提出软件工程的概念以来,软件工程技术逐渐成熟,现在已成为计算机科学技术中的一门重要学科。但是,还有些公司和个人仍然在随意开发软件,将编写高质量的程序与开发系统混为一谈,也有些软件专业的学生或软件开发人员还没有掌握软件开发出现的新技术,鉴于此,我们编写了本书。 本书是编者根据近10年来对软件工程学、面向对象方法等教学与研究的经验,以及领导或参与的20项软件项目开发的实际应用经验,并结合软件开发新技术编写而成。根据过去的教学经验,读者学习一门新技术,教材是非常重要的。因此,我们在编写本书之前,在各方面进行了充分的准备。 2. 本书结构安排 本书由16章构成,内容如下。 第1章: 绪论。介绍的主要内容有软件的特点、软件的发展、软件危机、软件工程、软件工程与方法学、软件工程的基本原理等。 第2章: 软件工程的基本理论。介绍的主要内容有软件工程过程、软件生存周期、软件生存周期模型、软件开发方法、软件开发工具。 第3章: 可行性研究。介绍的主要内容有可行性研究的任务与步骤、系统分析、分析原理、结构化分析、系统流程图、数据流图、数据字典、成本效益分析、可行性研究的文档、项目开发计划。 第4章: 软件需求分析与概念模型。介绍的主要内容有需求分析、IDEF方法、概念模型与规范化。 第5章: 总体设计。介绍的主要内容有软件设计的重要性、设计过程、软件总体设计、设计基本原理、体系结构设计、结构化设计、IDEFO图的设计方法、软件结构优化。 第6章: 软件细节设计。介绍的主要内容有细节设计任务与方法、设计表示法、结构化程序设计、结构化定理、图形工具、面向数据结构的设计。 第7章: 面向对象方法学。介绍的主要内容有传统方法学的缺点、面向对象的基本概念、对象模型、动态模型、功能模型。 第8章: 面向对象分析。介绍的主要内容有面向对象分析的基本过程、对象的发现和标识、发现对象方法、定义属性、定义服务、定义结构、实例连接、消息连接、建立功能模型。 第9章: 面向对象设计。介绍的主要内容有设计的准则、启发式规则、系统分解、设计问题域子系统、设计任务子系统、设计数据管理子系统、面向对象程序设计、软件重用、统一建模语言(UML)。 第10章: 形式化方法。介绍的主要内容有形式化方法的基础知识、有限状态机(FSM)、Petri网的基本原理、净室方法学、客户/服务器模式。 第11章: 用户界面设计。介绍的主要内容有界面软件开发综述、人机交互子系统设计、图形用户界面设计、多媒体用户界面设计、用户界面模型、用户界面的描述方法与技术等。 第12章: 软件质量。介绍的主要内容有软件质量的概述、软件质量的度量和评价、软件质量保证、技术评审与审查、软件的可靠性。 第13章: 软件实现。介绍的主要内容有程序设计语言的特性及选择、程序设计风格、程序设计效率、冗余编程、软件容错技术。 第14章: 软件测试。介绍的主要内容有软件测试概述、测试方法、测试用例的设计、测试过程、调试。 第15章: 软件维护。介绍的主要内容有软件维护概述、软件可维护性、软件维护的特点、软件维护的实施、维护“老化代码”、逆向工程和再工程。 第16章: 软件项目管理与计划。介绍的主要内容有软件项目管理概述、项目管理过程、软件开发成本估算、风险分析、进度安排、软件项目的组织。 此外,本书的最后给出了一个附录,列出了软件产品的主要文件,以供读者参考。 3. 本书特点 本书侧重于理论联系实际,从实用性、易懂性出发,重点突出,内容丰富而实用。在详细介绍理论的同时,给出了部分示例,以利于读者掌握其实际应用的方法。此外,为了便于读者巩固所学的知识,在各章的后面都附有相应的小结与练习题。 4. 适用对象 本书可作为大专院校相关专业高年级学生的教材和参考书,也可供计算机专业的高级人员参考。 本书由李代平编写,另外张信一参加了第9、11、12章的编写,彭重嘉参加了第13~16章的编写。 由于编者水平有限,书中的不足之处在所难免,恳请读者批评指正。 编者 2002年7月