前言 本书自2012年6月第1版出版发行起,至今已出版发行了3版,且已被全国多所高校选作教材用书,同时也被多所高校选为研究生入学考试参考用书,均取得了良好效果。随着软件工程学科的发展,软件技术在不断更新,软件过程也在不停演化。作者运用近年来从事“软件工程基础”课程和“软件工程综合训练”实训课的教学内容,结合软件开发的实践经验,在延续 第?3版书整体结构和篇幅基本不变的前提下,对内容做了以下修正和补充。 (1)在国家课程思政背景下,结合教书育人的目标,本书体现三个方面的功能:思想性、知识性、能力性。通过对实际项目的分析,将知识点有效组织和连接,并把思政贯穿软件生命周期的全过程,真正起到学习兼育人的作用。 (2)修改了第3版中的错误,更加规范和完善了相关的图、表,对文字叙述进行了进一步的加工和润色。 (3)根据软件工程学科发展和新技术的提出,以及项目实际应用,删除了部分使用较少的内容。新增及补充部分内容,如软件的本质、SCRUM、需求分析方法、系统持续集成、识别用例间行为等。 (4)在修改部分章习题的同时,紧跟时代发展和应用需求,新增部分综合练习,目的是让读者更好地在实践中应用软件工程的基本原理、方法和 工具。 计算机专业的学生及相关技术人员大多重技术而轻文档编写。然而,在近年来广受关注的敏捷过程的实施和实践应用中,有效的文档编写和文档管理仍显示出软件生命周期的价值和在确保软件质量上的强大生命力。因此,本书第4版希望通过介绍软件工程各阶段所要编写的文档框架,来强调文档对软件工程过程实施、软件质量管理的重要性。 前言的最后给出本书的结构图,希望能帮助读者更好地学习软件工程。 本书结构图给读者提供了两类不同的学习路径。 学习路径一:以两条不同的设计思想为主线,按照前后顺序进行学习。全书先基于结构化程序设计思想,介绍软件工程的基本理论、方法、过程与工具,让读者全面了解和掌握软件工程生命周期各阶段的任务、过程、技术、文档等知识体系。之后基于面向对象程序设计思想,依托统一建模语言UML,深入理解和掌握面向对象的基本概念、封装性、继承性和多态性,完成面向对象软件工程的分析、设计、实现的软件生命周期全过程。 学习路径二:以两条不同的设计思想为主线,按照结构图中虚线所连接的各章对照展开学习。这样的学习思路,是将软件工程生命周期各阶段,按照结构化程序设计思想与面向对象程序设计思想进行对比学习,便于读者对于项目的同一阶段应采用何种方法实施能产生同步比较。 两种学习路径都涵盖了软件工程各阶段知识点,强调基本原理、方法与技术。两种路径均以实例为主线,把分散的知识点串联起来,在注重理论与实践相结合的同时,强化学习实效。同时,读者通过对两类不同设计思想的学习,对比各自软件过程中的原理与方法,自我分析和总结它们各自的优缺点,能更深入理解软件工程原理与过程,从而理解不同软件设计思想及开发方法对软件分析、实现和维护的影响,以及对软件质量和项目管理的推动作用。 编者向使用本书进行教学的教师和同学,以及对本书提出建议和意见的教师、学生及读者表示诚挚的谢意。由于编者水平有限,疏漏、欠妥、谬误之处在所难免,恳请读者指正。 本书配套的教学资源包括教学大纲、教学PPT、习题答案和在线题库,服务支持联系QQ:381844463。 ??????????????????????编 者 于北京理工大学 2023年1月 本书第2版自2015年6月出版以来,被众多高校选作教材,还作为研究生入学考试的参考书,取得了良好的效果。根据作者近年来从事“软件工程基础”“软件工程综合训练”的教学,并结合软件开发的实践经验,在保持原书结构和篇幅基本不变的前提下,对第2版的内容做了以下修正和 补充: (1)修改了第2版中出现的错误,更加规范和完善相关的图、表,对文字叙述做了进一步的加工和润色。 (2)根据软件工程的发展,以及项目实际的应用,删除了部分使用较少的内容,包括4GT过程模型、基于构建的开发模型、统一建模过程、Worrior图、管道过滤器模型、面向数据的设计方法、Jackson图等内容。新增部分内容,包括渐进交付的迭代模型、软件过程模型的比较、强调数据字典的作用、面向对象的分析过程、基于过程的面向对象集成测试、软件维护评审等内容,以反映软件工程的最新发展。 (3)新增了部分章节后的习题,目的是让读者更好地在实践中掌握基础理论。 鉴于技术人员专注技术而轻文档编写的实际情况,即使敏捷过程、极限编程等近年来广泛受到关注,也有一定程度的应用与实践,但有效的文档和管理在软件生命周期中仍有较高价值与强大的生命力。因此,本书第3版仍希望通过介绍软件工程各阶段的文档框架编写,来强化文档对软件工程实施的重要性。 下面给出本书的结构图,希望能给读者更好地学习提供帮助。 在全书的结构图中,有两类不同的学习路径: 一是按照本书的章节顺序进行学习。先以结构化程序设计为主,介绍软件工程的基本理论、方法、过程与工具;然后以面向对象为主,借助UML统一建模语言,完成对面向对象基本概念、封装性、继承性和多态性的理解,学习面向对象分析与设计的过程。 二是按照结构图中虚线对应的章节进行学习。这样的学习思路,是将软件工程生命周期的各阶段,按照结构化方法和面向对象方法相对比同时进 行。这样的学习路径,便于用户在同一阶段、对同一项目采用何种方法进行分析与设计产生同步比较。 无论使用哪种学习路径进行学习,读者通过对两类设计思想的不同及软件过程的比较,不仅能分析和总结它们各自的优缺点,还能更深入理解相同的软件工程过程结合不同的软件设计思想,对软件分析、实现和维护的影响,对软件质量和管理发展的推动。 由于作者水平有限,疏漏、欠妥、谬误之处在所难免,恳请读者指正。 ??????????????????????作 者 于北京理工大学 2019年1月 本书第1版自2012年7月出版以来,作为各类学生授课的教材、不同读者的参考书,以及一些高校用书,取得了良好效果。然而,随着软件工程的发展,为更好地服务于读者,编者对原书内容做了认真修改,编写第 2版。 根据作者近年来从事“软件工程”课程教学和软件开发的实践经验,在保持原书结构和篇幅基本不变的前提下,第2版主要做了以下修正和补充: (1)修改了第1版中出现的错误,更加规范和完善相关的图、表,对文字叙述做了进一步的加工和润色。 (2)增加软件工程中较重要的内容。增加的内容包括:基于构件的开发模型,Rational统一建模过程,可行性研究及系统流程图,需求验证,管道与过滤器模型,软件设计验证,集成测试案例,确认测试案例。 (3)作者认为软件工程基础应该注重基础理论与实践相结合的理念,因而增加了每章后的习题,特别是增加了实际分析、设计习题,让读者更好地在实践中掌握基础理论。 鉴于技术人员专注技术而轻文档编写的实际情况,本书第2版仍希望 通过介绍软件工程各阶段的编写文档框架,来强调文档对软件工程实施的 重要性。本书各章节的安排,是按照以结构化设计思想为基础,全面介绍软件工程过程各阶段的过程、方法和工具,让读者对软件工程的实施有一个完整、清晰的认识。之后,再以面向对象设计思想为指导,详细介绍基于面向对象的软件工程开发过程。 下面给出本书的结构图,希望能给读者更好地学习提供帮助。 建议学习过程: (1)第1章通过对软件、软件生命周期和软件过程模型的介绍,让读者对软件工程的基本原理、方法、过程有一个基本认识。该章是全书的导论。 (2)第2~6章以结构化方法为依托,按照软件工程生命周期过程模型的需求分析、概要设计、详细设计、编码和测试等阶段,全面介绍各阶段涉及的过程、方法和工具,让读者对结构化软件工程的实施有一个完整、清晰的认识。 (3)第7~9章以面向对象方法为依托,详细介绍基于UML的软件工程,包括面向对象分析、面向对象设计、设计模式、数据设计和测试,使得读者对面向对象软件工程的实施有一个完整、清晰的认识。通过对这两种 方法学的比较,洞悉它们各自的优劣,从而更好地掌握和灵活应用。 (4)第10章介绍作为软件工程最后一个阶段的软件维护的内容和过程,以及如何提高软件的可维护性,实现软件再工程。 (5)第11章介绍有关软件项目管理的基本要求和内容。该章应该贯穿于整个学习过程中,或置于最初进行学习也可行。只有通过合理的软件项目管理这一平台,才能按时、保质、保量地完成满足用户需求的、高质量的、高可靠性的软件产品。 (6)最后通过软件工程综合训练,配合一定的项目开发过程,真正把所学、所掌握的知识融入实际项目中去。 按照这样的学习过程,读者通过对两类设计思想的不同以及软件过程的比较,不仅能分析和总结它们各自的优缺点,还能更深入理解相同的软件工程过程结合不同的软件设计思想,对软件分析、实现和维护的影响,对软件质量和管理发展的推动。 由于作者水平有限,疏漏、不妥、错误之处在所难免,恳请读者指正。 ??????????????????????作 者 于北京理工大学 2015年1月 软件是信息化的核心之一,软件产业展现国家科技发展的核心竞争力,体现国家的综合实力。随着计算机应用的不断普及,互联网应用的不断深入和网络技术的不断发展,使软件系统的规模和复杂度不断增加,如何确保开发出符合用户预期的、质量有保证的软件系统仍然面临巨大挑战,软件危机的障碍仍阻碍软件的发展。 作为计算机科学技术的一个重要分支——软件工程学,成为研究软件需求、开发、维护、管理的普遍原理和技术相结合的、活跃的研究领域。随着软件工程的迅猛发展,新技术、新方法、新工具不断涌现,为读者学习和研究这门学科创造了良好的基础和难得的机遇。 作为软件工程学的入门介绍,本书立足于基本的原理、概念、方法和工具,从实用的角度讲解软件系统需求、设计、实现、测试、维护和管理的内容,同时兼顾对软件工程过程介绍的全面性和系统性。 本书根据作者多年从事“软件工程”课程教学和软件开发的实践经验,在介绍相关理论和过程的基础上,着重讲解软件工程在实践中的方法、技术和工具。本书的特点体现在: (1)减少软件工程理论的阐述,避免对不同过程和方法的学术讨论。 (2)介绍软件工程理论的基本概念和过程,它们对软件过程实践起着 基石和指导作用。 (3)每章最后对各章的主要内容进行总结,便于读者理解和掌握主要 内容。 (4)鉴于技术人员专注技术而轻文档编写的实际情况,书中介绍了软 件工程各阶段需要编写的文档框架,并通过实例不断强调文档对实施软件工程的重要性。 (5)本书中的主要案例都来自于作者的研究和实际工程项目,让读者 深切感受到书中介绍的理论是如何指导实践的。 本书各章节的安排,是以结构化设计思想为基础,全面介绍软件工程过程各阶段的过程、方法和工具,让读者对软件工程的实施有一个完整、清晰的认识;之后,再以面向对象设计思想为指导,详细介绍基于面向对象的软件工程开发过程。这样编排的目的,是使读者通过对两类设计思想的不同以及软件过程的比较,不仅能分析它们各自的优缺点,还能更深入理解相同的软件工程过程结合不同的软件设计思想,对软件分析、实现和维护的影响, 对软件质量和管理发展的推动。 下面简要介绍本书各章节的概貌,让读者对本书内容有一个提纲挈领的了解。 第1章回顾了软件危机的产生,介绍软件工程的产生和发展,包括软件工程的基本概念、目标和实施原则。通过对软件、软件生命周期和软件过程模型的介绍,让读者对软件工程的基本原理、方法、过程有一个基本认识。 第2章介绍软件需求工程的基本概念、任务和原则,并详细说明结构化分析和建模过程,包括面向数据的数据建模、面向数据流的功能建模和面向状态的行为建模。 第3章介绍软件设计的基本概念、任务和原则,以及目前主流的软件体系结构设计模型,它们分别是以数据为中心的数据仓库模型、客户端/服务器模式的分布式结构模型和层次模型。 第4章从应用角度出发,详细描述了结构化设计的两类设计方法:面向数据流的设计方法和面向数据结构的设计方法,及其它们的设计过程。 第5章从软件工程范畴讨论程序实现和编码,包括程序设计语言的分类、特性、准则及程序编写规范等。 第6章介绍进行软件测试的对象和测试技术。软件测试对象不仅包括源码,还包括设计方案、需求说明等软件工程文档。测试技术主要介绍白盒测试和黑盒测试。 第7章介绍面向对象软件工程的建模基础。UML通过图形化的表示机制,为面向对象分析和设计提供统一的、标准化的视图、图、模型元素和通用机制,以刻画面向对象方法。 第8章介绍面向对象分析的建模过程。面向对象分析模型主要由3种独立模型构成:功能模型、静态模型和动态模型。该章详细说明作为建模基础的静态模型的5个层次。 第9章介绍把面向对象分析阶段得到的需求模型转换为符合用户功能、性能,便于与某种面向对象程序设计语言编程的系统实现方案。 第10章介绍作为软件工程最后一个阶段的软件维护的内容和过程,以及如何提高软件的可维护性和实现软件再工程。 第11章介绍有关软件项目管理的基本要求和内容。通过对软件项目的估算、项目进度管理、风险管理、质量管理、配置管理等内容的介绍,明确只有对软件工程实行全过程的计划、组织和控制等一系列活动,才能得到符合用户需求的、高质量且高可靠性的软件产品。 由于作者水平有限,疏漏、欠妥、谬误之处在所难免,恳请读者指正。 ??????????????????????作 者 于北京理工大学 2012年1月