前言 软件工程教育的目的在于培养学生的软件开发能力,软件工程本身的核心在于如何构造满足客户期望的合格软件。软件生命周期用于把客户需求转换为客户期望的软件,旨在化解软件的复杂性和多样性,把软件划分为前后紧密衔接的阶段,每一阶段运用模型表达分析或设计结果以消除软件相关各方理解的不一致,用自动化工具进行建模、构造、测试、发布或部署以提高效率。本书围绕软件生命周期这一系统性的概念,展开第6~10章,分别讲述软件的生命周期、可行性分析与开发计划、软件需求分析、软件设计以及软件测试与维护。 软件工程涉及的链条长、概念多、技术广。如果面面俱到,无论对于高校师生亦或对于企业工程技术人员,短时间内都很难掌握软件工程的精髓和要义。结合笔者在两家企业供职5年的开发经历、主持8项企业委托软件开发的实际经验、指导21届普通高校本科生软件开发类毕业设计情况的全面总结,以及笔者一直对企业级软件开发教材的探索与实践[811]的系统性升华,本书围绕软件生命周期的瀑布模型(辅以增量模型中的构件化),紧扣结构化开发和面向对象开发两种开发方法,运用结构化需求分析得到的数据字典和U/C矩阵转换为面向对象的类,借此连接需求分析和面向对象的软件设计,各章节内容沿着“知识→实例→工具→运用”的路线展开,将抽象的理论知识和具体实例相结合,将具体实例和运用工具相结合,进而化抽象为具体,帮助读者理解概念的本质,提高读者知识运用和使用现代工具的能力。 大多数高校的软件工程课程都在第5~7学期开始,目前流行的大多数软件工程类教材基本上以知识为中心而组织内容。多年来,笔者一直在思考如何能编写一本能在第1~7学期开设的教材,让学生在大一时就打下坚实的结构化思维和面向对象的思维的基础,进而以能力为中心贯穿大学4年专业课理论学习和实践训练,系统性地指导本科专业实习和毕业设计。经过笔者3轮在第1学期给软件工程专业学生讲解软件工程导论课程的探索与实践,总结出本书的第1~5章。这5章分别讲述软件工程概述、冯·诺依曼计算机基本原理、程序构造方法、算法和软件系统构造方法。 第5章软件系统构造方法起承上启下之用,帮助没有项目开发经验的读者,迅速搭建典型而又简单的两层架构和三层架构的样例项目,动手把软件构造出来,领悟面向对象的思维,快捷经历典型项目的实践。第5章采取5条技术路线并行相互支撑的策略,以呼应第1章的软件工程技术发展,第1条路线是“函数→类→构件(动态链接库→ATL COM组件)→Web服务”,第2条面向对象的UML建模路线是“类图→顺序图→构件图→部署图”,第3条软件体系结构路线是“两层架构→三层架构”,第4条应用类型路线是“桌面应用→Web应用”,第5条主流集成开发框架路线是“.NET Framework→J2EE SSM”。 目前,OBE教育理念不断深入人心,全国绝大部分高校计算机类本科专业以工程教育专业认证为契机,狠抓专业建设,提高人才培养质量,向社会输出岗位胜任能力强的工程技术人才。本书秉持OBE教育理念,每章首先明确给出导学导教。导教给出知识目标、能力目标和思政目标。每章结尾的技术类题目、非技术类题目以及拓展研究题目紧扣专业认证的12条毕业要求。拓展研究题目适合非211院校的普通高校计算机类专业研究生。每章核心内容以产出为导向,扣住商业银行系统等典型项目案例予以系统性分析和综合设计。 本书以二维码的形式提供配套的微视频和样例项目源程序,PPT课件、教学大纲和教学日历可从清华大学出版社官网检索下载。 本书由李洪波担任主编,韩明峰和苏兆锋担任副主编。本书在编写过程中,吸取了国内外教材的精髓,在此对这些作者的贡献表示由衷的感谢。此外,本书在编写过程中还得到了鲁东大学计算机科学与技术系张利锋和钟丽的支持和帮助,在此表示真诚的感谢。最后,本书在出版过程中,得到了清华大学出版社的大力支持,在此一并表示诚挚的感谢。 由于笔者水平有限,书中难免有不足和疏漏之处,恳请各位专家、同仁和读者不吝赐教和批评指正,并与笔者讨论。 李洪波2023年6月于烟台