软件设计师笔记——(第五章:软件工程)

目录

一、软件工程概述(⭐⭐⭐)

1、软件工程基础知识

2、软件能力成熟度模型(CMM)

3、软件能力成熟度模型集成(CMMI)

4、统一过程模型(UP)

二、软件开发模型(⭐⭐⭐)

1、瀑布模型

2、增量模型

3、演化模型

4、原型模型

5、螺旋模型

6、喷泉模型

三、软件开发方法(⭐⭐⭐)

1、敏捷开发方法

2、除敏捷外其他开发方法

四、需求分析(⭐⭐)

五、系统设计(⭐⭐)

六、系统测试(⭐⭐⭐)

1、系统测试的意义和目的

2、软件测试策略

3、McCabe度量法 

4、黑盒测试

5、白盒测试

七、系统维护(⭐⭐)

八、软件开发项目管理(⭐⭐⭐)

1、成本估算

2、进度管理

3、风险管理

九、软件质量(⭐⭐⭐)

1、软件质量特性

2、软件评审

3、软件容错技术

4、软件配置管理

5、软件工具 


一、软件工程概述(⭐⭐⭐)

1、软件工程基础知识

软件工程基本要素:方法、工具、过程

软件生存周期如下:

  • ①可行性分析:确定软件的开发目标和可行性。(产生的主要文档有可行性分析报告、项目、开发计划

  • ②需求分析:确定软件系统的功能,性能,数据和界面等。(产生的主要文档有软件需求说明书

  • ③概要设计:选择系统解决方案,规划子系统。(产生文档有概要设计说明书

  • ④详细设计:设计子系统内部具体实现。(产生文档有详细设计文档

  • ⑤程序编码:将软件设计的结果转换成计算机可运行的程序代码。

  • ⑥软件测试:以最少的人力和时力发现潜在的各种错误和缺陷。(主要产生文档有软件测试计划,测试用例和软件测试报告

  • ⑦软件维护:软件开发阶段各个时期的关键目标。

考过的零碎知识点:

  • 构建软件系统确定人数时需要考虑:系统的规模、技术复杂性、项目计划、开发人员的技术背景。

  •  确定软件体系结构:是在软件设计阶段进行的。(项目范围不是系统设计的范围)

  • I/O软件隐藏了I/O操作实现的细节,向用户提供的是逻辑接口,方便用户使用。

  • 软件变量控制是变更管理的重要内容,要有效进行变更控制,需要借助配置数据库和基线的概念。

  • 决策树和决策表适用于数据流程图中涉及多个逻辑条件的情况。

  • 逆向工程在软件维护时,由于缺少文档资料,而对软件的一种分析。(可以认为是在需求分析阶段进行的)

  • ⑦软件维护工具不包括配置管理。

2、软件能力成熟度模型(CMM)

软件设计师笔记——(第五章:软件工程)_第1张图片

3、软件能力成熟度模型集成(CMMI)

能力成熟度模型集成(CMMI):将已有的几个CMM模型结合在一起,使之构造成为“集成模型”。可分为:阶段式模型和连续式模型。

一、连续式模型(重点)

  • 1.CL0(未完成的):过程域未执行或CL1中定义的所有目标。

  • 2.CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。(仅考一次,原概念)

  • 3.CL2(已管理的):其共性目标集中于已管理的过程的制度化。

  • 4.CL3(已定义级的):其共性目标集中于已定义过程的制度化。

  • 5.CL4(定量管理的):其共性目标集中于定量管理的过程的制度化。

  • 6.CL5(优化的):使用量化(统计学)手段改变和优化过程域、以满足客户要求的改变和持续改进计划中的过程域的功效。(仅考一次,原话)

二、阶段式模型(从未考过)

  • 1.初始的:过程不可预测且缺乏控制。

  • 2.已管理的:过程为项目服务。

  • 3.已定义的:过程为组织服务。

  • 4.定量管理的:过程为以度量和控制。

  • 5.优化的:集中于过程改进。

4、统一过程模型(UP)

1、统一过程模型:是一种“用例和风险驱动,以架构为中心,迭代并且增量”的开发过程。
2、开发的四个阶段:

  • 起始阶段:生命周期目标(项目的初始活动)。

  • 精化阶段:生命周期架构(需求分析和架构演进)。

  • 构建阶段:初始运作功能(系统的构建,产生实现模型)。

  • 移交阶段:产品发布(软件提交方面的工作,产生软件增量,进行β测试,交付系统)。

  • 产生阶段

3、UP的每一次迭代都是一次完整的软件开发过程,包括整个软件开发生命周期,有五个核心工作流(需求、分析、设计、实现、测试)

4、统一过程的典型代表是RUP,RUP是商业扩展,兼容UP,比UP更完整更详细。(角色—谁做,制品—做什么,活动—怎么做,工作流—什么时候做)

二、软件开发模型(⭐⭐⭐)

1、瀑布模型

瀑布模型:结构化方法中的模型,是结构化的开发,开发流程如同瀑布一般,一步一步的走下去,直到最后完成项目开发。

  • 只适用于需求明确或者二次开发(需求稳定、变更少)。(eg:一般都是说具备什么开发经验、改系统什么,已经做过一次,那么需求就很明确了)

  • 容易理解,管理成本低;

  • 强调开发的阶段早期计划及需求调查和产品测试;

  • 客户必须能够完整、正确和清晰地表达他们的需求;当需求不明确时有很大的缺陷。

  • V模型:(不考,以干扰选项出现)

2、增量模型

增量模型:首先开发核心功能模块,而后与用户确认,之后再开发次核心功能,即每次开发一部分功能,并与用户需求确认,最终完成项目开发,优先级高的服务最先交付

  • 融合了瀑布模型的基本成分和原型,具有瀑布模型的所有优点第一个增量往往是核心的产品。

  • 第一个可交付版本所需要的成本和时间很少,快速支付。

  • 可以减少用户需求的变更,不必等到整个系统开发完成就可以使用。

  • 适用于商业产品的创新模式

  • 缺点:模块划分是一个难点而不是优点,同时不适合大规模项目。

3、演化模型

演化模型:软件开发人员需要一种专门应对不断演变的软件产品的过程模型,演化模型是迭代的过程,使用软件开发人员能够逐步开放出更完整的软件版本。

  • 特别适用于对软件需求缺乏准确认识的情况

4、原型模型

原型模型:比较适合于用户需求不明确、需求经常变化的情况。

  • 系统规模不是很大,也不是太复杂时,采用这个方法比较好(有效地捕获系统需求)

5、螺旋模型

螺旋模型:将瀑布模型(需求)和演化模型(迭代更新)结合起来就成了螺旋模型。

  • 适用于复杂的大型模型,同时加入了风险分析。
  • 包含维护周期,因此维护和开发之间没有本质区别。
  • 支持用户需求的动态变化,但是过多的迭代次数会增加开发成本,延迟提交时间。

6、喷泉模型

喷泉模型:是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法。

  • 喷泉模型克服了瀑布模型不支持软件重用和多项开发活动的集成的局限性。
  • 喷泉模型中的开发活动常常需要重复多次在迭代过程中不断的完善软件系统(迭代性)
  • 各开发活动之间不存在明显的边界(无间隙性)

三、软件开发方法(⭐⭐⭐)

1、敏捷开发方法

1、敏捷开发的总体目标是通过“尽可能早,持续地对有价值的软件的交付”使客户满意。

2、敏捷开发过程典型的方法:极限编程(XP)、水晶法(Crystl)、并列争球法(Scrum)、自适应软件开发(ASD)、敏捷统一过程(AUP)。

一、极限编程(XP)

4大价值:沟通、简单性、反馈和勇气

5大原则:快速反馈、简单性假设、逐步修改、提倡更改和优质工作。

12个最佳实践:

  • ①计划游戏(快速制定计划、随着细节的不断变化而改善)
  • ②小型发布(系统的设计要能够尽可能早地交付
  • ③隐喻(先找到合适的比喻传达信息)
  • ④简单设计(只处理当前的需求,使设计保持简单)
  • ⑤测试先行(先写测试代码,然后再编写程序)
  • ⑥重构(重新审视需求和设计,重新明确地描述他们以符合新的和现有的需求)
  • ⑦结对编程(可以按日甚至按小时为客户提供可运行的版本,两人一起编程)(速度与单人相当,没有更快)
  • 持续集成:可以按日或按小时为客户提供可运行的版本
  • 集体代码所有制
  • ⑩每周工作40小时
  • 11.现场客户
  • 12.编码标准

二、其他的敏捷开发方法

1、水晶法(Crystl):认为每一个不同的项目都需要一套不同的策略、约定和方法论。

2、并列争球法(Scrum):使用迭代的方法,其中,把每30天一次的迭代称为一个冲刺。

  • 敏捷开发方法Scrum步骤包括:Product Backlog(产品待办事项清单)、Sprint Backlog(Sprint待办事项)、Sprint (冲刺代办)。

3、敏捷统一过程(AUP):采用在大型上连续以及在小型上迭代的原理来构造软件系统。

4、自适应软件开发(ASD):强调开发方法的适应性。六原则。

2、除敏捷外其他开发方法

1、结构化方法:适合面向数据流,处理规模不大且不复杂,需求明确的项目

2、Jackson方法:面向数据结构的开发方法,适合于小规模的项目

3、原型方法:适合于需求不明确的开发,以原型模型为代表。

4、面向对象方法:强调复用性,以构件组装模型为代表。
 

四、需求分析(⭐⭐)

1、软件需求包括:

  • 功能需求(开发软件必须具备什么样的功能)
  • 非功能需求(软件的属性、品质,eg:可靠性、性能、响应时间、扩展性)、设计约束(对解决方案的约束条件)

2、具体内容如下:功能需求、性能需求、用户或人的因素、环境需求、界面需求、文档需求、数据需求、资源使用需求、安全保密需求、可靠性要求、软件成本消耗与开发进度需求、其他非功能需求。

3、需求分析阶段的输出包括:数据流图、实体联系图、状态迁移图、数据字典。

五、系统设计(⭐⭐)

1、概要设计:设计软件系统总体结构,将一个复杂的系统按功能划分成模块确定每个模块的功能;确定模块直接的调用关系;确定模块之间的接口。基本任务如下:

  • ①设计软件系统总体结构
  • ②数据结构及数据库设计
  • ③编写概要设计文档

2、详细设计:对每个模块进行详细的算法设计

六、系统测试(⭐⭐⭐)

1、系统测试的意义和目的

1、意义:系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误。

2、目的:以最少的人力和时力发现潜在的各种错误和缺陷。

3、系统测试包括:软件测试、硬件测试、网络测试(硬件和网络测试是根据具体的性能指标进行测试)

4、软件测试应遵循的原则:

  • ①系统测试阶段的测试目标来自于需求分析阶段。
  • ②应尽早并不断地进行测试。
  • ③测试工作应该避免由原开发软件的人或小组承担。

  • ④在设计测试方案中,不仅要确定输入数据,还要确定预期输出结果。

  • ⑤在设计测试方案中,不仅要设计有效合理的情况,也要包含不合理失效的输入条件。

  • ⑥测试程序时,不仅要检验程序是否做了该做的事,还要检验程序是否做了不该做的事。

  • ⑦严格按测试计划来进行,避免测试的随意性。

  • ⑧妥善保存测试计划,为维护提供方便。为重测追测提供方便。

  • ⑨测试例子都是精心设计出来的。

2、软件测试策略

1、单元测试(模块测试):在模块编写完成且无法编译错误后就可以进行。如果选择机器测试,一般用白盒法多个模块一起进行。每个模块测试时需要两种开发模块:(①驱动模块:相当于一个主程序,②桩模块:代替测试模块中所调用的模块)。检查模块5个特征:

  • ①模块接口。保证数据流可以正确地流入、流出。
  • ②局部数据结构。局部数据结构出错是比较常见的错误。
  • ③重要的执行路径。对路径的测试是最基本的任务。
  • ④出错处理。好的设计应该能预测到出错的条件并且有对出错处理的路径。
  • ⑤边界条件。单元测试的最后工作,也是非常重要的工作。软件容易在边界出现错误。

2、组装测试(集成测试):把模块按系统设计说明书的要求组合起来进行测试。

  • ①自顶向下集成测试:不用编写驱动模块,需要编写桩模块
  • ②自底向上集成测试:不用编写桩模块,需要编写驱动模块
  • ③回归测试:用于软件变更后,防止软件变更后带来的错误
  • 冒烟测试

3、确定测试

4、系统测试

3、McCabe度量法 

1、计算有向图G的环路复杂性的公式为:V(G)= m-n+2或V(G)= 闭合区域+1。其中m是G中的有向弧数(边数)(有头有尾方可算入),n是G中的节点数。

2、软件复杂性取决于代码行的数量。

1、经典例题 

软件设计师笔记——(第五章:软件工程)_第2张图片

4、黑盒测试

软件测试方法分为两种:静态测试和动态测试

1、静态测试:被测试程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。

2、动态测试:通过运行程序发现错误。(测试用例由测试输入数据和与之对应的与其输出结构构成。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。)

  • ①黑盒测试
  • ②白盒测试

黑盒测试(功能测试):在完全不考虑软件的内部结构和特性的情况下,测试软件的外部特性。(输入测试数据关心程序输出结果)常用黑盒测试技术如下:

  • ①等价类划分:假如输入的结果都是错的,就不是一个合适的测试用例。(需要考虑有效等价类和无效等价类)
  • ②边界值分析:输入有效等价类的边界值。
  • ③错误推测:基于经验和直觉推测程序中所有可能存在的错误。
  • ④因果图

3、经典例题 

软件设计师笔记——(第五章:软件工程)_第3张图片

5、白盒测试

白盒测试(结构测试):根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。常用白盒测试技术如下:

1、逻辑覆盖:主要有6大逻辑标准。

  • ①语句覆盖:测试路径中每条语句至少执行一次。
  • ②判定覆盖(分支覆盖):每个判定式中的真、假都至少执行一次。
  • ③条件覆盖:每个判定式中的每个逻辑条件的真假都至少执行一次。
  • ④判定/条件覆盖:每个判定式的真假和判定式中的每个逻辑条件的真假都至少执行一次。
  • ⑤条件组合覆盖:每个判定式条件的各种可能值的组合都至少出现一次。
  • ⑥路径覆盖:覆盖被测试程序中所有可能的路径。

2、循环覆盖:执行足够的测试用例使循环中的每个条件都得以验证。

3、基本路径测试:

4、经典例题 

软件设计师笔记——(第五章:软件工程)_第4张图片

软件设计师笔记——(第五章:软件工程)_第5张图片

七、系统维护(⭐⭐)

1、系统可维护性的评价指标:可理解性、可测试性、可修改性。

2、软件文档是软件可维护性的决定因素,每一个阶段都应该考虑并提高软件可维护性。

3、编写高质量软件文档可提高开发质量:

  • 文档是产品的一部分,没有文档就不是软件
  • 文档对产品有重要意义,只好不坏

4、系统的维护主要包括:硬件维护、软件维护、数据维护

5、软件维护主要有四大方面:

  • 正确性维护:开发存在错误,测试未发现
  • 适应性维护:为适应变化而修改(被动进行)
  • 完善性保护:扩充功能,改善性能的修改(改进/改善)
  • 预防性保护:为适应未来而变化(主动出击)

6、软件的质量特性:可靠性、可用性、可维护性

  • 可靠性:无失效运行的概率=MTTF÷(1+MTTF)(MTTF平均无故障时间)
  • 可用性:正确运行的概率=MTBF÷(1+MTBF)(MTBF平均失效间隔时间)
  • 可维护性:=1÷(1+MTTR)(MTTR平均修复时间)

八、软件开发项目管理(⭐⭐⭐)

1、成本估算

1、COCOMO估算模型:精确的,易于使用的成本估算模型。如下分类:

  • ①基本COCOMO模型:是一种静态单变模型。

  • ②中级COCOMO模型:是一种静态多变模型。

  • ③详细COCOMO模型:它将软件系统分为系统、子系统和模块3个层次。

2、COCOMOII模型:和其前身一样,也是一种层次结构估算模型。分为3个阶段:

  • ①应用组装模型对象点
  • ②早期设计阶段模型功能点
  • ③体系结构阶段模型代码行

3、Putnam模型:是一种动态多变量模型

2、进度管理

1、Gantt图:清晰描述何时开始、结束、以及并行关系,但是不能表现依赖关系。

2、PERT图:可以表现出依赖关系,但不能反映并行关系。

  • 开始结点最早时刻=0,结束结点的最早时刻=结束结点的最晚时刻
  • 正推相较取最大值,逆推相较取最小值
  • 松弛度=该结点最晚时刻—该结点最晚时刻
  • 关键路径=耗时最长的路径
  • 松弛度=0的这些路径在工程的关键路径上面

3、经典例题 

软件设计师笔记——(第五章:软件工程)_第6张图片

软件设计师笔记——(第五章:软件工程)_第7张图片

3、风险管理

1、风险管理:(两大特性: 不确定性和损失)。三大风险如下:

  • 项目风险:项目复杂度、规模及结构不确定性
  • 技术风险:技术的不确定性、技术陈旧以及“前沿”技术
  • 商业风险:开发软件的生存能力

2、风险管理过程如下:

  • ①风险识别:识别出项目中已知和可预测的风险形成一个风险列表。
  • ②风险预测(风险估算):(从风险可能发生的可能性或概率,风险产生的后果两方面预测)(评估风险影响→受整体风险显露度(RE)=P×C的影响)
  • ③风险评估:定义风险参照水准,将识别出来的风险评估分类。(成本、进度、性能三种典型的水准)
  • ④风险控制:辅助项目组建立处理风险的策略,包括风险避免,风险监控,RMMM计划(风险管理及意外事件计划)应对风险最好的办法就是主动避险。

九、软件质量(⭐⭐⭐)

1、软件质量特性

软件设计师笔记——(第五章:软件工程)_第8张图片

1、ISO/IEC 9126 软件质量模型:6大质量特性如下

  • 功能性:一组功能及其指定的性质的存在有关的属性。
  • 可靠性:软件维持在其性能水平有关的能力。
  • 易使用性:方便用户学习、理解、操作。
  • 效率:软件的性能水平与所用资源之间的关系。
  • 可维护性:与进行规定的修改所需要的努力有关的一组属性。
  • 可移植性:从一中环境转移到另一种环境的能力的因素。

2、McCall质量模型 :

  • 运行:正确性、可靠性、效率、完整性、使用性
  • 修正:维护性、测试性、灵活性
  • 转移:转移性、复用性、共运行性

2、软件评审

1、通常把“质量”理解为“用户满意程度”。为了使得用户满意,有两个必要条件:

  • ①设计的规格说明书符合用户的要求,这称为设计质量
  • ②程序按照设计规格说明所规定的情况正确执行,这称为程序质量

2、设计质量评审内容:是否合乎用户的要求、可靠性、可测试性、可复用性、保密性、性能实现情况、可修改性。

3、程序质量评审内容:功能结构、功能的通用性、模块的层次、模块结构(①控制流结构、②数据流结构、③模块结构与功能之间的对应关系)、处理过程的结构。 

3、软件容错技术

容错技术分为如下四类:

1、结构冗余:

  • 静态(通过表决和比较,少数服从多数)
  • 动态(多重模块待机备份,故障时切换备份机)
  • 混合(二者综合)

2、信息冗余:为检错和纠错在数据中加上一段额外的信息,例如校验码原理。

3、时间冗余:遇到错误时重复执行。

4、冗余附加技术:

  • 屏蔽硬件错误:(①关键字程序和数据的冗余存储及调用)(②检测表决、切换、重构、纠错、复算的实现)
  • 屏蔽软件错误:(①冗余备份程序的存储及调用)(②实现错误检测和错误恢复的程序)(③实现容错软件所需的固化程序)

4、软件配置管理

1、软件配置管理主要目标:变更标识、变更控制、版本控制、确保变更正确地实现、变更报告。

2、软件配置主要内容(版本1):版本管理、配置管理、变更支持、过程支持、团队支持、审计支持、变化报告。

3、软件配置主要内容(版本2)软件配置标识、变更管理、版本控制、系统建立、配置审核、配置状态报告。

4、配置数据库分为以下三类:开发库、受控库、产品库。

5、软件工具 

1、软件开发工具:需求分析工具、设计工具、编码与排错工具、测试工具

2、软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再生工具

3、软件管理和支持工具:项目管理工具、配置管理工具、软件评价工具。

你可能感兴趣的:(软考笔记(持续更新中),笔记,软件工程,软件需求,单元测试,学习,功能测试)