1. 写作背景
在计算机软件开发的工程科学技术中,软件工程的概念、原理、技术与方法已成为计算机科学与技术范畴的一项重要内容,在计算机科学技术领域占据无可争议的主流地位。作为软件技术人员,接受软件工程的概念并不难,但是要真正理解、掌握和运用这门先进的技术并完整地进行系统开发,是有一定难度的。鉴于此,编者编写了这本关于软件工程系统分析、设计和实施的教材,以使更多同行受益。
几年前,编者编写的《软件工程(第3版)》备受老师和其他读者欢迎。这本书对于应用型本科学校的读者而言,有些内容显得深了些。为更好地反映最近几年软件工程领域的发展现状,编者根据普通高等教育“十二五”国家级规划教材的指导精神,总结近年来教学和科研的经验,在第3版基础上进行了调整和增删,形成了这本第4版教材。为了方便学校教学,编者还编写了配套的《软件工程习题解答(第4版)》(ISBN 9787302473336)和《软件工程实践与课程设计》(ISBN 9787302478676)。
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. 编写方法
本书是编者根据近10年来对软件工程学、面向对象方法等的教学与研究,以及编者负责或参与几十项软件开发项目的实践经验,并结合软件开发新技术编写而成。根据编者的教学经验,读者学习一门新技术的时候,教材是非常重要的。因此,编者在修订的时候,对于部分章节和内容做了更新和修改。
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章: 总体设计。介绍的主要内容有软件设计的重要性、设计过程、软件总体设计、设计基本原理、体系结构设计、结构化设计、IDEF0图的设计方法、软件结构优化。
第6章: 软件细节设计。介绍的主要内容有细节设计任务与方法、设计表示法、结构化程序设计、结构化定理、图形工具,面向数据结构的设计。
第7章: 面向对象方法学。介绍的主要内容有传统方法学的缺点、面向对象的基本概念、对象模型、动态模型、功能模型。
第8章: 面向对象分析。介绍的主要内容有面向对象分析的基本过程、对象的发现和标识、发现对象方法、定义属性、定义服务、定义结构、实例连接、消息连接、建立功能模型。
第9章: 面向对象设计。介绍的主要内容有设计的准则、启发式规则、系统分解、设计问题域子系统、设计任务子系统、设计数据管理子系统、面向对象程序设计、软件重用、统一建模语言UML。
第10章: 形式化方法。介绍的主要内容有形式化方法的基础知识、有限状态机(FSM)、Petri网的基本原理、净室方法学、客户/服务器模式。
第11章: 用户界面设计。介绍的主要内容有界面软件开发综述、人机交互子系统设计、图形用户界面设计、多媒体用户界面设计、用户界面模型、用户界面的描述方法与技术等。
第12章: 软件质量。介绍的主要内容有软件质量的概述、软件质量的度量和评价、软件质量保证、技术评审与审查,软件的可靠性。
第13章: 软件实现。介绍的主要内容有程序设计语言的特性及选择、程序设计风格、程序设计效率、冗余编程、软件容错技术。
第14章: 软件测试。介绍的主要内容有软件测试概述、测试方法、测试用例的设计、测试过程、调试。
第15章: 软件维护。介绍的主要内容有软件维护概述、软件可维护性、软件维护的特点、软件维护的实施、维护“老化代码”、逆向工程和再工程。
第16章: 软件项目管理与计划。介绍的主要内容有软件项目管理概述、项目管理过程、软件开发成本估算、风险分析、进度安排、软件项目的组织。
此外,本书的最后给出了一个附录,列出了软件产品的主要文件,以供读者参考。
3. 本书特点
本书侧重于理论联系实际,从实用性、易懂性出发,重点突出,内容丰富而实用。在详细介绍理论的同时,给出了部分示例,以利于读者掌握其实际应用的方法。此外,为了便于读者巩固所学的知识,在各章的后面都附有相应的小结与练习题。
4. 适用对象
本书可作为大专院校相关专业高年级学生的教材和参考书,也可供计算机专业的高级人员参考。
本书由李代平编写,另外张信一参加了第9、11、12章的编写,彭重嘉参加了第13~16章的编写。
由于作者水平有限,书中的不足之处在所难免,恳请读者批评指正。
编者
2002年7月
总体设计的基本目标就是概要地回答系统应该如何实现。设计在任何工程产品或系统中,是开发阶段的第一步。设计(Design)可以定义为应用各种技术和原理,对一个设备、一个过程或一个系统,做出足够详细的决策,使之有可能在物理上得以实现的过程。
系统的总体设计是在前面系统分析的基础上,为后期将要构造的系统实体建立一个模型(Model)或表达式(Representation)。与其他学科的工程设计方法一样,随着新理论新方法的不断出现而继续发展。与其他技术领域比较,软件设计在它的发展中仍处于早期阶段。研究与分析软件设计问题才不过30年左右的时间。由此可见软件设计方法还缺少更为经典的工程设计学科所具有的深度、适应性(Flexibility)和定量性质。但是,已经有一些软件设计技术、设计质量准则及设计符号表示法。
5.1软件设计的重要性
软件设计处于软件工程过程的技术核心地位。软件开发中不管应用什么样的开发模式(Development Paradigm),都要进行软件设计。当软件需求分析和定义完成后,就进入设计阶段。它是在对系统的信息、功能、行为和各种要求理解的基础上构想未来的系统。这种构想是否正确与完美,需要后面的编码阶段来构造,测试阶段来验证。软件设计、软件构造与验证,这三项活动是必不可少的。每一项都是按一定形式变换信息,最终使之成为被确认的计算机软件。在软件工程过程中,这些技术阶段的信息流如图51所示。
由图51可以看出,在软件需求提供的信息(Information)、功能(Functional)和行为(Behavioral)模型上,设计阶段可以使用任何一种设计方法。设计阶段包括: 把分析阶段所建立的信息域模型变换为数据结构,这种数据结构是软件实现所需要的,也包括定义程序结构构件(Structural Components)之间相互关系的体系结构(Architectural)设计。另外还包括变换结构构件为软件的过程描述的过程(Procedural)设计。源代码生成并通过测试之后,进行软件的组装(Integrate)和确认(Validate)。
在设计中所作的决策将最终影响软件实现的成功与否,也影响软件维护的难易程度。所以,在软件设计过程中的这些决策是开发阶段非常关键的一步。
软件设计的重要性还反映在质量(Quality)上。在开发过程中,设计是对软件最本质的部分进行构造,构造的水平决定软件质量。同时,设计也提供了可以进行质量评价的软件表达式。只有通过设计,才能把用户的需求精确地转换为完美的软件系统。软件设计是整个软件工程和软件维护的基础,如图52所示。
图51软件设计与软件工程
图52设计的重要性
对于一个软件系统,如果不进行设计而构造一个系统,可以肯定这个系统是不稳定的。这个系统即使发生很小的变动,都可能出现故障,而且很难测试,直到软件工程过程的最后,系统的质量仍无法评价。
5.2设计过程
软件设计是一个把需求转换为软件表达式的过程。这个表达式过程一般情况下是分为两步走。首先,这种表达式只是描绘一个软件的概貌。然后,细化为一个非常接近于源代码的设计表达式。从软件工程的角度讲是分为总体设计和详细设计。总体设计主要是把需求转换为数据结构和软件体系结构,而详细设计主要集中在体系结构表达式的细化,从而产生详细的数据结构和软件的算法表达式。
软件设计的发展在早期的设计工作中,着重在开发模块化程序模块所需要的准则,以及按照自顶向下(TopDown)的方式逐步细化软件体系结构上。接着设计定义的过程方面逐渐发展成为一种叫做结构化编程(Structured Programming)的原则。之后,提出了把数据流和数据结构翻译成设计定义的方法。近年来,多采用OO的设计方法。总结过去软件设计的发展,可以归纳为是一个持续发展的过程。
在比较小的软件设计中,可以把总体设计和详细设计作为一个过程阶段去完成。但是有一定规模的系统中,总体设计和详细设计是两个明确的阶段,所以它们中的许多设计活动是不同的。除了数据、体系结构和过程设计之外,在现代的许多应用中还包括界面设计活动。界面设计主要是建立人机之间界面的布局和交互的机制。
图53设计技术和管理方面
之间的关系
总体设计和详细设计除了必须有先进的设计技术外,还要有同步的管理技术支持。用如图53所示的形式表明设计技术和管理方面之间的关系。
从图53中可以看出,由技术支持的总体设计和详细设计都伴随着管理技术。
前面已经提到,软件设计的重要性之一就是软件的质量。在整个设计过程中,设计每一步的质量都要进行正式的技术评审(Formal Technical Reviews)。要按照设计准则对设计表达式的质量进行评价。这里给出软件设计原则如下。
(1) 设计应当模块化(Modular),也就是说,软件应被逻辑地划分为能完成特定功能和子功能的构件。
(2) 设计应形成具有独立功能特征的模块(如子程序或过程)。
(3) 设计应使模块之间和与外部环境之间接口的复杂性尽量地降低。
(4) 设计应该有一个分层的组织结构,这样人们可对软件各个构件进行理性的控制。
(5) 设计应有性质不同的可区分的数据和过程表达式。
(6) 设计应利用软件需求分析中得到的信息和可重复的方法。
……