
本教材系统地讲述了软件工程的基本概念、原理、方法,并介绍了一个实际项目——高校图书管理系统的分析与设计过程,突出“教、学、练、用”一体化,较全面地反映了软件工程技术的全貌。全书共分10章,第1章是软件工程基础,第2章至第6章分别为可行性研究、需求分析、概要设计、详细设计、软件实现与维护,第7章介绍软件项目管理的基础知识,第8章、第9章分别讲述面向对象方法学基础和状态图。第10章结合实际项目讲述了面向对象方法分析与软件设计的全过程,不仅对读者深入理解软件工程学具有较大的帮助,也是实践教学的良好素材。本教材可作为高等应用型学校计算机、软件工程、信息类及管理类等专业相关课程的教材,也可供有一定实际经验的软件开发人员阅读参考。
随着IT技术的快速发展和广泛应用,以及各行业信息化、数字化、智能化建设的快速发展,软件在人们的工作和生活中越来越重要,各行业迫切需要培养一大批软件开发、项目管理和软件维护人才。因此,软件工程课程的研发变得越来越重要。 软件工程是计算机等专业的一门专业核心课程,是每个从事系统分析、系统设计、软件开发测试、项目管理和软件维护的人员的必学科目。为了不断提高软件研发的质量,研发符合我国软件人才成长规律的教材迫在眉睫。 党的二十大报告提出要实施科教兴国战略,强化现代化建设人才支撑,强调要深化教育领域综合改革,加强教材建设和管理。为了响应党中央的号召,编者在充分进行调研和论证的基础上,精心编写了这本《软件工程》。本教材从实践的角度出发,吸取了国内外软件工程实践领域的新技术、新方法、新成果,也是教育部“产学合作协同育人”建设项目(项目编号:202102306007)成果之一。全书共分10章,内容包括软件工程基础、可行性研究、需求分析、概要设计、详细设计、软件实现与维护、软件项目管理、面向对象方法学基础、状态图、高校图书管理系统的分析与设计。书中加入了许多应用案例及编者经过多年实践总结出来的研究成果,以便于实际应用。 本教材是专门面向高校软件相关专业人才培养需求编写的,具有如下特点: (1)内容丰富,图文并茂,注重实用性。本教材坚持“实用、规范、可操作性”原则,突出“教、学、练、用”一体化,配有典型案例与综合项目分析与设计。 (2)教学资源配套完善,便于教学。为了方便师生教学,本教材配有电子教案、电子课件等资源,并附有软件开发常用文档指南。 本教材由长期从事软件工程实践及教学的教师编写。寇爱军、申情负责全书架构的设计和统稿。其中第1章至第4章由郭鹏飞编写,第5章、第6章由孙文学编写,第7 章至第10章由寇爱军编写。黄旭、王智群、曾孟佳等教师参加了审校和修改工作,学生朱文静、徐欢等参与了教学辅助资料的制作。 在本教材编写过程中,编者参考了国内外软件工程、UML建模的相关教材,详见书后的主要参考文献。在此,向所有文献作者表示谢意。同时,感谢对本教材编写给予大力支持的各界专家。 由于编者水平有限,书中难免存在疏漏之处,敬请读者提出宝贵意见和建议。 编 者 2023年5月
第1章 软件工程基础 1 1.1 软件危机 1 1.1.1 有关软件危机的介绍 1 1.1.2 原因与解决方法 2 1.2 软件工程 3 1.2.1 定义和目标 3 1.2.2 相关原理 4 1.2.3 软件工程的进步史 4 1.3 软件过程与软件生存周期 5 1.3.1 软件过程 5 1.3.2 软件生存周期 5 1.4 软件生存周期模型 8 1.4.1 瀑布模型 8 1.4.2 快速原型模型 9 1.4.3 增量模型 10 1.4.4 螺旋模型 10 1.4.5 喷泉模型 11 1.4.6 面向对象开发模型 12 1.4.7 如何选定开发模型 12 习题1 13 第2章 可行性研究 14 2.1 目标与任务 14 2.2 研究过程 15 2.3 软件立项、合同和任务书 16 2.3.1 立项 16 2.3.2 签订合同 16 2.3.3 任务下达 17 2.4 系统流程图 17 2.4.1 主要用途 17 2.4.2 相关符号 17 2.5 软件的经济效益分析 18 2.5.1 关于货币的时间价值 19 2.5.2 投资回收期 19 2.5.3 纯利润 20 习题2 20 第3章 需求分析 21 3.1 需求分析的任务与步骤 21 3.1.1 需求分析的任务 21 3.1.2 需求分析的步骤 23 3.2 用户需求的获取方法 24 3.2.1 常用方法 24 3.2.2 快速建立软件原型模型来获取需求 25 3.3 需求分析的常用方法 26 3.4 结构化分析 26 3.4.1 结构化分析方法 27 3.4.2 面向结构化分析的建模工具 27 3.4.3 数据流图 28 3.4.4 数据流图实例 30 3.4.5 数据字典 32 3.4.6 处理过程描绘 34 3.4.7 状态转换图 37 3.5 其他工具 38 3.5.1 层次方框图 38 3.5.2 维纳图 38 3.5.3 IPO图 39 习题3 40 第4章 概要设计 41 4.1 概要设计阶段的目标与任务 41 4.2 概要设计阶段的启发规则 42 4.2.1 软件结构设计的准则 42 4.2.2 软件模块设计的准则 42 4.3 软件设计的基础 43 4.3.1 模块化 43 4.3.2 抽象 44 4.3.3 逐步求精 44 4.3.4 局部化和信息隐藏 45 4.3.5 模块独立性 45 4.4 软件设计工具 47 4.4.1 软件层次图 47 4.4.2 HIPO图 47 4.4.3 软件结构图 48 4.5 结构化的设计方法 48 4.5.1 数据流图分类 49 4.5.2 软件结构化设计方法的步骤 50 4.5.3 变换型分析设计 50 4.5.4 面向事务型数据流图的设计 52 4.5.5 综合分析设计 53 习题4 58 第5章 详细设计 59 5.1 详细设计阶段的目标与任务 59 5.2 结构化程序设计介绍 59 5.3 详细设计工具 60 5.3.1 程序流程图 60 5.3.2 N-S图 61 5.3.3 问题分析图 62 5.3.4 过程设计语言 64 5.4 用户界面设计 64 5.4.1 用户的界面需求 65 5.4.2 用户界面设计问题 65 5.4.3 用户界面设计原则 66 5.4.4 设计界面的过程 66 习题5 67 第6章 软件实现与维护 68 6.1 编码 68 6.1.1 编程语言的选择 68 6.1.2 编码的规范 69 6.2 测试基础 70 6.2.1 软件测试的目标 70 6.2.2 软件测试的原则 70 6.2.3 软件测试的方法 71 6.2.4 软件测试的步骤 71 6.2.5 软件测试的信息流 72 6.3 单元测试 73 6.3.1 单元测试的内容 73 6.3.2 代码审查 74 6.4 软件集成测试 75 6.5 验收测试 76 6.5.1 确认测试的要求 76 6.5.2 软件配置的复查 77 6.5.3 Alpha测试与Beta测试 77 6.6 软件的测试方法 77 6.6.1 黑盒测试 77 6.6.2 白盒测试 79 6.7 软件维护 82 6.7.1 软件维护概述 82 6.7.2 软件维护过程 83 6.8 软件维护中存在的问题 84 6.8.1 软件维护存在的困难 84 6.8.2 软件维护的弊端 84 习题6 85 第7章 软件项目管理 86 7.1 软件项目管理概述 86 7.1.1 软件项目管理概念 86 7.1.2 软件项目管理职能 86 7.2 项目组织管理 87 7.2.1 软件开发项目启动及任务 87 7.2.2 软件开发组织管理 88 7.3 人员组织 89 7.3.1 民主制程序员组 89 7.3.2 现代程序员组 89 7.4 质量管理 90 7.4.1 软件质量 90 7.4.2 质量管理的原则 91 7.4.3 软件质量的管理方法 91 7.4.4 软件项目的配置管理 92 7.5 软件的评审与验收 93 7.5.1 评审 93 7.5.2 验收 94 习题7 95 第8章 面向对象方法学基础 96 8.1 概述 96 8.2 面向对象的软件工程 97 8.2.1 相关概念 97 8.2.2 面向对象的层次化设计技术 99 8.2.3 类与对象的关系的分析 99 8.3 关于UML 102 8.3.1 UML概述 102 8.3.2 UML图 102 8.4 用例图概述 104 8.4.1 用例图的构成 104 8.4.2 泛化 108 8.5 类图与包图概述 116 8.5.1 类图 117 8.5.2 包图 121 8.6 顺序图概述 125 8.6.1 生命线与对象 126 8.6.2 消息 126 8.6.3 顺序图的创建 127 8.7 通信图概述 130 8.7.1 通信图的组成 130 8.7.2 创建对象 133 8.7.3 迭代 133 8.7.4 顺序图和通信图 134 习题8 137 第9章 状态图 138 9.1 状态图基础知识 138 9.2 相关符号 139 9.2.1 状态标记符 139 9.2.2 转移 139 9.2.3 决策点 141 9.2.4 同步 142 9.3 状态图中的动作与事件 142 9.4 组成状态 143 9.4.1 顺序子状态 143 9.4.2 并发子状态 144 9.4.3 子状态机的引用状态 144 9.4.4 同步状态 146 9.5 状态图模型的创建步骤 146 9.5.1 状态图分析 146 9.5.2 状态图的实现 147 习题9 147 第10章 高校图书管理系统的分析与设计 148 10.1 系统需求 148 10.2 系统需求分析 149 10.2.1 如何识别参与者与用例 149 10.2.2 用例描述 151 10.3 静态的结构模型 154 10.3.1 定义系统中的对象和类 154 10.3.2 对用户界面类进行定义 159 10.3.3 各类之间的关系 162 10.4 动态行为模型 165 10.4.1 创建顺序图 165 10.4.2 创建状态图 175 10.5 系统部署 176 习题10 177 参考文献 178