前言 高校计算机专业、软件工程专业以及信息管理类专业都会开设“软件工程”课程。目前,软件工程的教材较多,且大都关注理论教学,涉及具体项目的比较少。也有少量教材将实际项目作为软件开发原型贯穿于理论教学之中,但是,对于初识软件工程学的读者来说,理论知识的欠系统性和欠完整性会直接影响读者对软件开发过程的理解。 本书权衡了软件工程学的理论和实践,以理论为指导、铺垫,随着具体案例的实施,将理论付诸实现;同时,实施中问题的解决又有助于更深入地理解理论。总之,教材将具体的软件项目开发案例贯穿于理论教学中,介绍了运用面向对象方法开发软件的全过程,包括可行性研究、面向对象分析、面向对象设计、面向对象编程、面向对象测试,以及软件项目的部署、维护和管理。 编写本书的目的是让读者在具体的实践中体会软件工程,提高开发软件的综合能力,包括分析建模能力、迭代开发能力、编程能力、设计测试用例和组织测试能力、沟通和协作能力,以及编写软件文档能力等。 1. 本书的特点 参与本书编写的教师是从事“软件工程”课程和“软件应用”课程教学的一线教师,有丰富的教学经验;此外,也包含众多软件从业人员多年工作经验的总结。值得一提的是,本书的案例是学生毕业设计的作品。因此,本书最终可作为一本实践指导攻略书。 本书使用面向对象方法,围绕具体软件项目案例展开课程教学。本书共有4篇: 软件工程基础知识、项目启动阶段、项目实施阶段,以及项目维护和管理。每篇又由若干章组成,每章包括导读、章节内容、随堂笔记。其中,随堂笔记包括本章摘要(由读者总结)、习题和拓展阅读(读读书),其中习题包括练练手(章节基础练习)和动动脑(综合练习)。各章节的习题源于软件水平考试真题、研究生入学考试真题、教材案例开发需求。 本书在讲解软件开发各个阶段的同时,给出了各个阶段性文档模板格式,有助于读者将实施过程记录归档,保证开发的持续性和一致性;同时,学习本书能提高读者的文档编制能力。 2. 本书的主要内容 本书涉及的主要内容包括以下几方面。 (1) 阐述了软件工程的基本概念、基本原理和原则、软件工程方法学、软件生命周期、软件工程、软件生命周期模型以及软件过程管理,使读者对软件工程有一个整体的、概念性的了解,为之后的软件工程实践打下理论基础。 (2) 可行性研究在软件项目启动前,主要对软件项目进行一次简要的需求分析,得出“项目是否值得实施”的结论。此阶段,通过数据流图、数据字典等图形工具对软件项目进行结构化分析。此外,该阶段还需要对项目成本/效益进行分析。 (3) 软件需求分析的概述、项目计划的编写以及团队的建设,说明软件项目进入启动阶段,为项目的实施做好铺垫。 (4) 由于本书是使用面向对象方法展开软件开发,因此,在项目实施阶段前期叙述了UML的作用以及组成,重点介绍了UML中的图以及这些图在建模工具PowerDesigner中的实践。 (5) 面向对象软件工程(OOSE)包括面向对象分析(OOA)、面向对象设计(OOD)、面向对象编程(OOP)以及面向对象测试(OOT)各个阶段。本书的重点是通过项目案例阐述上述各个阶段的关键理论,并付诸实践。 ① 通过用UML建立面向对象软件开发中的三种模型,即对象模型、功能模型及动态模型,详细介绍和说明面向对象软件工程中各阶段的迭代开发理念,以及面向对象设计原则对软件开发的指导作用。 ② 详细介绍了软件测试的基础概念、测试方法和测试步骤。从面向对象技术角度出发,介绍了面向对象测试的特点、测试方法和测试过程。 ③ 通过项目案例,介绍系统设计和对象设计的范畴,详细介绍了数据库设计、对象设计和用户界面设计的过程,并指导读者在具体的IDE(集成开发环境)下实施项目。 (6) 在介绍项目实施后,介绍了项目的具体部署和软件维护阶段的主要任务,以及如何提高软件的可维护性。 (7) 从项目管理的角度出发,阐述了项目开发过程中的进度管理、风险管理以及质量管理,并通过Project讲解如何通过工具进行项目管理。 (8) 给出各个阶段性文档的书写格式,规范了软件文档。 3. 本书的读者 本书的定位是“软件工程导论”,旨在通过项目案例使读者更容易理解软件工程思想,包括软件工程的观念、方法、策略和规范。本书通过进阶式的练习和课外拓展阅读,使读者在巩固软件工程基础知识的基础上能深入学习和实践。 因此,本书可作为计算机和软件工程专业的教材,也可作为软件工程专业的考研应试生、软件水平考试应试生、参与科技竞赛人员以及从事软件开发人员的参考书。 4. 项目案例使用说明 本书中项目案例的设计和实施只是为了更好地说明软件工程思想和软件开发的过程。案例基于目前比较流行的Spring Boot框架,目的是简化新Spring应用的初始搭建以及开发过程。 项目案例在具体的实施过程中可以根据读者的实际水平略做调整: 可以使用比较流行的框架,也可以使用一般的Web开发机制,甚至可以是一般的Java项目(或者是别的面向对象语言开发的一般项目)。重点关注的是,项目案例的设计和实施能呈现在软件工程思想指导下的软件开发过程。 5. 致谢 感谢参与本书编写和校验的所有教师和学生。计算机1501班的徐家鑫同学参与了本书项目案例的设计和实现工作,软件1601实验班的学生完成了项目案例的初步测算工作,在此向他们表示感谢。 感谢清华大学出版社提供的这次合作机会,使得本书能够早日与读者见面。 本书难免会存在一些问题,希望各位读者赐教,并提出宝贵建议。 曹平2020年12月