# Software Engineering for SYNU **Repository Path**: webers-note-book/software-engineering-for-synu ## Basic Information - **Project Name**: Software Engineering for SYNU - **Description**: 软件工程知识点笔记-沈阳师范大学 授课教师:范书国 - **Primary Language**: 其他 - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2022-03-21 - **Last Updated**: 2022-11-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 概述 欢迎来到大饭桶的软件工程的课程笔记!这个笔记的记录来源是软件工程课(授课教师:沈阳师范大学-范书国)。非常感谢在这个笔记形成过程中来自老师的教导和同学的协作。 ## 目录 * 第一章 软件工程学概述 * [软件危机](#软件危机) * [软件工程主要包括哪两方面内容](#软件工程主要包括哪两方面内容) * [软件工程的管理方面内容指什么](#软件工程的管理方面内容指什么) * [软件工程的本质特性or软件工程的本质特征](#软件工程的本质特性or软件工程的本质特征) * [软件工程的七条基本原理](#软件工程的七条基本原理) * [软件工程的三要素](#软件工程的三要素) * [软工课程的理解or软工课程的教学内容or概述软件工程的主要内容](#软工课程的理解or软工课程的教学内容or概述软件工程的主要内容) * [生命周期模型](#生命周期模型) * [传统瀑布模型的三个时期](#传统瀑布模型的三个时期) * [八个过程活动](#八个过程活动) * [传统瀑布模型过程活动的特点](#传统瀑布模型过程活动的特点) * 第二章 可行性研究 * [可行性研究的角度or可行性研究的目的or可行性研究的评价有哪些方面](#可行性研究的角度or可行性研究的目的or可行性研究的评价有哪些方面) * [可行性研究内容](#可行性研究内容) * [可行性研究的步骤](#可行性研究的步骤) * [三种成本估算技术or成本估算的三种方法](#三种成本估算技术or成本估算的三种方法) * [系统流程图的概念or什么是系统流程图](#系统流程图的概念or什么是系统流程图) * [数据流图的四要素](#数据流图的四要素) * [数据字典的四要素](#数据字典的四要素) * 第三章 需求分析 * [需求分析的基本任务](#需求分析的基本任务) * [需求分析过程应该建立的3种模型](#需求分析过程应该建立的3种模型) * [需求分析的任务or软件需求具体包括哪些需求类型](#需求分析的任务or软件需求具体包括哪些需求类型) * [需求分析的原则](#需求分析的原则) * [获取需求的方法](#获取需求的方法) * [实体-联系图的三要素](#实体-联系图的三要素) * [需求分析常见的综合性需求](#需求分析常见的综合性需求) * [需求分析常见的接口需求](#需求分析常见的接口需求) * [需求分析常见的设计约束或实现约束](#需求分析常见的设计约束或实现约束) * [从哪些方面验证软件需求的正确性](#从哪些方面验证软件需求的正确性) * [实体-联系图(ER图)](#实体-联系图(ER图)) * [状态转换图](#状态转换图) * [IPO图](#IPO图) * [Petri网](#Petri网) * 第四章 形式化说明技术 * [三种形式化说明技术](#三种形式化说明技术) * [形式化方法的准则](#形式化方法的准则) * 第五章 总体设计 * [软件设计的两个阶段](#软件设计的两个阶段) * [总体设计过程的两个阶段](#总体设计过程的两个阶段) * [在软件设计过程中应该遵循的基本原理和相关概念](#在软件设计过程中应该遵循的基本原理和相关概念) * [总体设计阶段的任务](#总体设计阶段的任务) * [总体设计的基本目的](#总体设计的基本目的) * [总体设计的意义](#总体设计的意义) * [总体设计过程or总体设计过程的九个步骤](#总体设计过程or总体设计过程的九个步骤) * [什么是模块or模块化中模块的概念](#什么是模块or模块化中模块的概念) * [模块独立程度的两个定性标准](#模块独立程度的两个定性标准) * [耦合的概念](#耦合的概念) * [内聚的概念](#内聚的概念) * [耦合度分类](#耦合度分类) * [内聚度分类](#内聚度分类) * 第六章 详细设计 * [详细设计阶段的关键任务](#详细设计阶段的关键任务) * [结构化过程设计表达工具](#结构化过程设计表达工具) * [人机界面设计的设计问题](#人机界面设计的设计问题) * [人机界面设计指南or人机界面的三类设计指南](#人机界面设计指南or人机界面的三类设计指南) * [程序数据结构的三类结构](#程序数据结构的三类结构) * [程序复杂程度的两种定量方法](#程序复杂程度的两种定量方法) * 第七章 实现 * [编码风格or编码的逻辑标准or编码标准](#编码风格or编码的逻辑标准or编码标准) * [如何进行软件测试or软件测试的内容](#如何进行软件测试or软件测试的内容) * [软件测试的准则](#软件测试的准则) * [软件测试的步骤](#软件测试的步骤) * [黑盒测试](#黑盒测试) * [白盒测试的八种逻辑覆盖标准](#白盒测试的八种逻辑覆盖标准) * [常见的白盒测试技术or控制结构测试](#常见的白盒测试技术or控制结构测试) * [集成测试的两种策略](#集成测试的两种策略) * [软件可靠性的定义](#软件可靠性的定义) * [软件可用性的定义](#软件可用性的定义) * 第八章 维护 * [软件维护的定义](#软件维护的定义) * [软件维护可能的四项活动or软件维护的四项活动](#软件维护可能的四项活动or软件维护的四项活动) * [软件维护的特点](#软件维护的特点) * [软件维护过程](#软件维护过程) * [决定软件可维护性的因素](#决定软件可维护性的因素) * [软件再工程过程](#软件再工程过程) ## 知识点 ### 第一章 软件工程学概述 #### 软件危机 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 * 注:软件危机概括地说主要包含下述两方面的问题:如何开发软件以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。 #### 软件工程主要包括哪两方面内容 * 技术 * 管理 #### 软件工程的管理方面内容指什么 管理就是通过计划、组织和控制等进行一系列活动 #### 软件工程的本质特性or软件工程的本质特征 * 软件工程关注于大型程序的构造 * 软件工程的中心课题是控制复杂性 * 软件经常变化 * 开发软件的效率非常重要 * 和谐地合作是开发软件的关键 * 软件必须有效地支持它的用户 * 在软件工程领域中通常由具有一种文化背景的人替具有另一种文化背景的人创造产品 #### 软件工程的七条基本原理 * 用分阶段的生命周期计划严格管理 * 坚持进行阶段评审 * 实行严格的产品控制 * 采用现代程序设计技术 * 结果应能清楚地审查 * 开发小组人员应该少而精 * 承认不断改进软件工程实践的必要性 #### 软件工程的三要素 过程、方法、工具 #### 软工课程的理解or软工课程的教学内容or概述软件工程的主要内容 基于软件危机产生的原因,按照软件工程方法学指导,选择适当的生命周期模型,遵守软件工程七条原理,通过三个时期,八个过程活动完成软件系统的开发。 #### 生命周期模型 * 瀑布模型 * 快速原型模型 * 增量模型 * 螺旋模型 * 喷泉模型 * Rational统一过程 * 敏捷过程与极限编程 * 微软过程 #### 传统瀑布模型的三个时期 软件定义期、软件开发期、软件维护期 #### 八个过程活动 * 问题定义 * 可行性研究 * 需求分析 * 总体设计 * 详细设计 * 编码和单元测试 * 综合测试 * 软件维护 #### 传统瀑布模型过程活动的特点 * 阶段间具有顺序性和依赖性 * 推迟实现的观点 * 质量保证的观点 ### 第二章 可行性研究 #### 可行性研究的角度or可行性研究的目的or可行性研究的评价有哪些方面 操作可行性、技术可行性、经济可行性、社会可行性 * 注:如果问题要求回答三个方面的话,回答技术可行性、经济可行性、社会可行性 #### 可行性研究内容 * 目的 * 工作步骤(过程) * 任务(成果) * 方法和工具 #### 可行性研究的步骤 * 复查系统规模和目标 * 研究目前正在使用的系统 * 导出新系统的高层逻辑模型 * 进一步定义问题 * 导出和评价供选择的解法 * 推荐行动方案 * 草拟开发计划 * 书写文档提交审查 #### 三种成本估算技术or成本估算的三种方法 * 代码行技术 * 任务分解技术 * 自动估计成本技术 #### 系统流程图的概念or什么是系统流程图 系统流程图是概括地描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据人工过程等)。 #### 数据流图的四要素 * 数据的源点和终点 * 数据的处理 * 数据的存储 * 数据流 #### 数据字典的四要素 * 数据流 * 数据流分量 * 数据存储 * 处理 ### 第三章 需求分析 #### 需求分析的基本任务 需求分析是软件定义时期的最后一个阶段,它的基本任务是准确地回答“系统必须做什么”这个问题。功能需求是系统的基本需求,但是并不是唯一需求,在需求分析时还需要分析其他的需求。 #### 需求分析过程应该建立的3种模型 * 数据模型 * 功能模型 * 行为模型 #### 获取需求的方法 * **访谈** 访谈有两种基本形式,分别是正式的和非正式的访谈,正式访谈提出的是事先准备好的具体问题,非正式则是随意提问开放性问题。在访问用户的过程中使用情景分析技术往往非常有效。 所谓情景分析就是对用户将来使用目标系统解决某个具体 问题的方法和结果进行分析。 * **面向数据流自顶向下求精** 利用数据流图来操作,从数据流图的输出端着手分析,通过不断细化输出数据,从而得到需求。再从输入端开始,向用户解释输入数据是怎样变成的输出数据的,一次进行复查。 * **简易的应用规格说明技术** 开发者和客户共同参与需求的分析,从而传统需求分析方法中用户处于被动地位的情况。 * **快速建立软件原型** #### 需求分析的任务or软件需求具体包括哪些需求类型 需求分析的任务包括综合性要求、数据要求、导出逻辑模型和修正系统开发计划等 #### 需求分析的原则 * 能够表达和理解问题的信息域 * 建立描述系统信息、功能和行为的模型 * 能够对所建模型按一定形式进行分解 * 分清系统的逻辑视图和物理视图 #### 实体-联系图的三要素 * 数据对象 * 属性 * 联系 #### 需求分析常见的综合性需求 * 功能需求 * 性能需求 * 可靠性和可用性需求 * 出错处理需求 * 接口需求 * 约束 * 逆向需求 * 将来可能提出的要求 #### 需求分析常见的接口需求 * 用户接口需求 * 硬件接口需求 * 软件接口需求 * 通信接口需求 #### 需求分析常见的设计约束或实现约束 * 精度 * 工具和语言约束 * 设计约束 * 应该使用的标准 * 应该使用的硬件平台 #### 从哪些方面验证软件需求的正确性 * 一致性 * 完整性 * 现实性 * 有效性 #### 实体-联系图(ER图) 为了把用户的数据要求清楚并准确地描述出来,系统分析员通常建立一个概念性的数据模型即实体关联图(ER图) #### 状态转换图 状态转换图简称为状态图,通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。 #### IPO图 IPO图是输入、处理、输出图的简称,它是由美国IBM公司发展完善起来的一种图形工具,能够方便地描绘输入数据、对数据处理和输出数据之间的关系。 #### Petri网 Petri网包含4种元素: * 一组位置P * 一组转换T * 输入函数I * 输出函数O ### 第四章 形式化说明技术 #### 三种形式化说明技术 * 非形式化方法:自然语言描述 * 半形式化方法:数据流图或实体-联系图 * 形式化方法:基于数学技术描述 #### 形式化方法的准则 * 选择合适的形式化方法 * 应该形式化,但不要过分形式化 * 应该估算成本 * 应该有形式化方法顾问随时提供咨询 * 不应该放弃传统的开发方法 * 应该建立详尽的文档 * 不应该放弃质量标准 * 不应该盲目依赖形式化方法 * 应该测试、测试、再测试 * 应该重用 ### 第五章 总体设计 #### 软件设计的两个阶段 软件设计一般包括总体设计和详细设计阶段等两个阶段 #### 总体设计过程的两个阶段 * 体系结构设计 * 模块设计 #### 在软件设计过程中应该遵循的基本原理和相关概念 * 模块化 * 抽象 * 逐步求精 * 信息隐蔽和局部化 * 模块独立 #### 总体设计阶段的任务 总体设计阶段的一个重要任务是通过这个阶段的工作将划分出组成系统的物理元素:程序、文件、数据库、人工过程和文档等等,但每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计。总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。 #### 总体设计的基本目的 总体设计的基本目的就是回答“概括地说,系统应该如何实现?”这个问题 #### 总体设计的意义 在详细设计之前进行总体设计可以站在全局高度上,花较少的成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统。 #### 总体设计过程or总体设计过程的九个步骤 * 设想供选择的方案 * 选取合理的方案 * 推荐最佳方案 * 功能分解 * 设计软件结构 * 设计数据库 * 制定测试计划 * 书写文档 * 审查和复审 #### 什么是模块or模块化中模块的概念 模块是边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。 #### 模块独立程度的两个定性标准 内聚和耦合 #### 耦合的概念 耦合是对一个软件结构内不同模块之间互连程度的度量。耦合强度取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。 #### 内聚的概念 内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。 #### 耦合度分类 以下是耦合度的分类,耦合程度由高到低,耦合程度越低,独立性越高 * 内容耦合 * 公告耦合 * 外部耦合 * 控制耦合 * 特征耦合 * 数据耦合 #### 内聚度分类 以下是内聚度的分类,内聚度由高到低,内聚程度越高,独立性越高 * 功能内聚 * 顺序内聚 * 通信内聚 * 过程内聚 * 时间内聚 * 逻辑内聚 * 偶然内聚 ### 第六章 详细设计 #### 详细设计阶段的关键任务 详细设计阶段的关键任务是确定怎样具体地实现用户需要的软件系统,也就是要设计出程序的“蓝图”。 #### 结构化过程设计表达工具 * 程序流程图 * 盒图 * PAD图 * 判定表 * 判定树 * 过程设计语言 #### 人机界面设计的设计问题 * 系统响应时间 * 用户帮助设施 * 出错信息处理 * 命令交互 #### 人机界面设计指南or人机界面的三类设计指南 * 一般交互指南 * 信息显示指南 * 数据输入指南 #### 程序数据结构的三类结构 * 顺序结构 * 选择结构 * 重复结构 注:有些程序设计书中将其分为顺序结构、分支结构和循环结构,在本课程中请以教科书为准,其他课程中以其他课程为准。 #### 程序复杂程度的两种定量方法 * McCabe方法 * Halstead方法 ### 第七章 实现 #### 编码风格or编码的逻辑标准or编码标准 * 程序内部的文档 * 数据说明 * 语句构造 * 输入输出 * 效率 #### 如何进行软件测试or软件测试的内容 基于测试准则,按照测试方法,依据测试步骤,完成软件测试。 #### 软件测试的准则 * 所有测试都应该能追溯到用户需求 * 应该远在测试开始之前就制定出测试计划 * 把Pareto原理应用到软件测试中 * 应该从小规模测试开始,并逐步进行大规模测试 * 穷举测试是不可能的 * 为了达到最佳的测试效果,应该由独立的第三方从事测试工作 #### 软件测试的步骤 * 模块测试 * 子系统测试 * 系统测试 * 验收测试 * 平行运行 #### 单元测试的测试重点 * 模块接口 * 局部数据结构 * 重要的执行通路 * 出错处理通路 * 边界条件 #### 黑盒测试 对于软件测试而言,黑盒测试法把程序看作一个黑盒子,完全不考虑程序内部结构和处理过程。也就是说,黑盒测试是在程序接口进行的测试,它只检查程序功能是否能按照规格说明书的规定正常使用,程序是否能适当地接收输入数据并产生正确的输出信息,程序运行过程中能否保持外部信息(例如数据库或文件)的完整性。黑盒测试又称为功能测试。 #### 白盒测试 白盒测试的前提是可以把程序看成装在一个透明的白盒子里,测试者完全知道程序的结构和处理算法。这种方法按照程序内部的逻辑测试程序,检测程序中的主要执行通路是否都能按预定要求正确工作。白盒测试又称为结构测试。 #### 白盒测试的八种逻辑覆盖标准 * 语句覆盖 * 判定覆盖 * 条件覆盖 * 判定\/条件覆盖 * 条件组合覆盖 * 点覆盖 * 边覆盖 * 路径覆盖 # 常见的白盒测试技术or控制结构测试 * 基本路径测试 * 条件测试 * 循环测试 #### 集成测试的两种策略 * 自顶向下集成 * 自底向上集成 #### 软件可靠性的定义 软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率 #### 软件可用性的定义 软件可用性是程序在给定的时间点,按照规格说明书的规定,成功地运行的概率 ### 第八章 维护 #### 软件维护的定义 所谓的软件维护就是在软件已经交付使用后,为了改正错误或满足新的需要而修改软件的过程。 #### 软件维护可能的四项活动or软件维护的四项活动 * 改正性维护 * 适应性维护 * 完善性维护 * 预防性维护 #### 软件维护的特点 * 结构化维护与非结构化维护差别巨大 * 维护的代价高昂 * 维护的问题很多 #### 软件维护过程 * 维护组织 * 维护报告 * 维护的事件流 * 保存维护记录 * 评价维护活动 #### 决定软件可维护性的因素 * 可理解性 * 可测试性 * 可修改性 * 可移植性 * 可重用性 #### 软件再工程过程 * 库存目录分析 * 文档重构 * 逆向工程 * 代码重构 * 数据重构 * 正向工程 ### 第九章 面向对象方法学引论 #### 面向对象方法学要点 面向对象方法学的出发点和基本原则,是尽可能模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识世界解决问题的方法与过程,也就是使描述问题的问题空间(也称为问题域)与实现解法的解空间(也称为求解域)在结构上尽可能一致。 #### 面向对象方法学的优点 * 与人类习惯的思维方法一致 * 稳定性好 * 可重用性好 * 较易开发大型软件产品 * 可维护性好 #### 对象的特点 * 以数据为中心 * 对象是主动的 * 实现了数据封装 * 本质上具有并行性 * 模块独立性好 #### 面向对象方法学的三要素 * 封装 * 继承 * 多态 #### 类与类之间的四种关系 * 关联 * 聚集 * 泛化 * 依赖和细化