软件过程
软件成熟度模型(CMM)
软件过程改进的框架:过程改进基础设施、过程改进线路图、软件过程评估方法、软件过程改进计划。
每一次软件改进要精力4个步骤:评估、计划、改进和监控。
能力成熟度模型集成(CMMI)
能力等级0指未执行过程,表明过程域的一个或多个特定目标没有被满足;
能力等级1指过程通过转化可识别的输入工作产品,产生可识别的输出工作产品,关注于过程域的特定目标的完成;
能力等级2指过程作为已管理的过程制度化,针对单个过程实例的能力;
能力等级3指过程作为已定义的过程制度化,关注过程的组织级标准化和部署;
能力等级4指过程作为定量管理的过程制度化;
能力等级5指过程作为优化的过程制度化,表明过程得到很好地执行且持续得到改进。
软件过程模型
基于构件的软件开发主要强调在构建软件系统时复用已有软件的“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验、适应性修改,然后集成到新系统中。
瀑布模型
每个阶段结束之后都要写一分文档,以文档为驱动。
V模型将测试和分析与设计关联进行。
一般有V模型有瀑布模型就选瀑布模型。
需求明确,变更比较少就选择瀑布模型。
增量模型
优先级高的增量先交付,测试最多次数。
增量模型的需求一开始是明确的。
演化模型
适用于不断更新功能的软件或者需求不明确,在原型基础上继续开发。
原型模型
原型模型允许开发人员快速地构造整个系统或系统的一部分以理解或澄清问题。原型的用途是获知用户的真正需求,因此原型模型可以有效地引发系统需求。
原型模型不适宜大规模软件的开发。
螺旋模型
螺旋模型把开发活动和风险管理结合起来以将风险减小到最小并控制风险。适合大型软件开发,有风险识别。
喷泉模型
统一过程模型
敏捷方法
集体所有权表示任何开发人员可以对系统任何部分进行改变;
结对编程存在一个非正式代码审查过程,可以获得更高的代码质量,但编码速度与单人编程想当。
软件需求
系统设计
(需求分析
确定软件要完成的功能及非功能性要求。)
概要设计
概要设计的任务是设计软件系统总体结构。
详细设计
(编码
根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试。)
开发方法
结构化方法:数据处理领域不太复杂;
原型化方法:需求不清晰且规模不太大;
设计方法
结构化设计:模块为函数、过程以及子程序;
面向对象设计:模块为类、对象和构件;
系统测试
测试设计文档在各阶段都要撰写。
传统软件的测试策略
软件测试的基本目标是发现软件中的错误。
单元测试
单元测试主要是发现代码中的问题,针对详细设计和软件实现阶段的工作进行的。
集成测试
集成测试验证系统模块能否根据系统和程序设计规格说明的描述进行工作,即
测试模块以及模块之间的接口
自顶向下从抽象到具体。
回归测试在软件发生变更之后进行。
系统测试验证系统是否执行了需求规格说明中的功能和非功能要求,测试目标在需求分析阶段就已经定义。
测试方法
静态测试分为人工检查和程序编译两种方法。
黑盒测试:只需要输入并观察输出结果就好,不考虑内部实现细节。
值在定义域内的都是有效等价类,在定义域外都是无效等价类。
测试用例既要有效等价类又要无效等价类。即一个合理数据一个不合理数据,或者都是合理数据,不合理数据唯一能测试出。
McCabe度量法
V(G)为环路复杂度,m为点的个数,n为边的条数 。点包括【开始】这一语句,边也包括【开始】与【语句1】之间的连线。即图中所有框与所有线。
代码行数是度量软件复杂性的一个重要参数。
简单路径:没有重复结点。
汇合结点相当于两条边。
伪代码转换成流程图:
白盒测试
若一个测试用例无法让每条语句都至少执行一次,那么就设计足够多的测试用例,达到所有的语句都至少被执行一次的目的。
每个真值与假值都满足一次。
AND和OR中的每一个逻辑表达式都能分别取到真值与假值。
运行和维护
软件的可维护性是在开发阶段就需要维护,在软件开发的各个阶段都需要考虑提高软件产品的可维护性。
软件文档
用于系统开发人员与项目管理人员在项目期内进行沟通的文档主要有系统开发计划,包括工作任务分解表、PERT图、甘特图和预算分配表等。
总体规划和开发合同用于与系统分析人员在系统规划和系统分析阶段的沟通。
测试计划用于系统测试人员与系统开发人员之间的沟通。
系统维护
正确性维护:诊断和改正错误的过程。
适应性维护:外部环境(新的软、硬件配置)、数据环境(数据库、数据格式、数据输入/输出发方式、数据存储介质)发生变化而修改软件的过程。
完善性维护:扩充功能、改进效率、增强性提高可维护性。-
为软件运行增加监控设施属于
完善性维护(扩充功能)。
逆向工程产品设计是根据已经存在的产品,反向推出产品设计数据(各类设计图或数据模型)的过程。一般先采用逆向工程
先从代码分析出设计,再从设计分析出需求,此时加入新的需求,然后走正向工程的路线,形成新的系统
。
逆向工程是在需求分析阶段进行的
。
沟通路径:相当于完全无向图;
主程序员组(相当于中介者模式):一共有n个程序员中包含一个主程序员,则有n-1个沟通路径;
无主程序员组适合项目规模较小,开发人员少,采用新技术和确定性较小的项目。
进度管理
一般可以有多个开始结点但是只能有一个结束结点;
没有事件指入的事件是开始结点,没有指出事件是结束结点。
求最早时刻取最大值,求最迟时刻取最小值;
松弛时间: 相当于摸鱼时间。对于
只有一个指出事件
的结点对应事件
松弛时间=最迟时间-最早时间
;对于
多指出事件的结点
(如结点2、4)看该事件原本最迟时间为多少由此算摸鱼时间,对于4到7,原本最迟时刻是16,因此松弛时间=结束结点最迟时刻17-任务持续时间1-开始结点最早时刻5=11
。
关键路径:往松弛时间为0的路径走。从结束结点开始往前看,看结点最早时间与上一个结点的最早时间是否只差一个任务持续时间,是的话此结点在关键路径上。
完成项目的最短时间因改动而推迟(提前)了多长时间要看所有的事件的最早开始时刻最多改变了多少。
项目活动图
完成项目的最短时间即关键路径的长度。
只能通过缩短关键路径上的活动工期才能缩短整个项目的完成时间,缩短非关键路径活动的工期只会延长松弛时间对活动结束时间没有有影响。
软件配置管理
风险管理
风险分析包括:风险识别、风险预测、风险评估、风险控制。
风险识别
风险只能尽可能的避免,但是不能完全避免。
若某一事件的发生存在着两种或两种以上的可能性,即可认为该事件存在风险。如项目的客户不确定需求是确定事件,所以不存在风险。
风险预测
根据风险暴露度评估风险等级。
风险评估
根据风险预测的结果预测是否影响参考水平值。
风险控制
软件质量
软件质量特性
软件的可维护性评价指标包括可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
软件评审
软件容错技术
容错技术是对某些无法避开的差错,使其影响减至最小的技术。
冗余技术分为四类,结构冗余、信息冗余、时间冗余和冗余附加技术。
冗余附加技术是指为实现其他类型冗余技术所需要的资源和技术,包括程序指令、数据、存放和调动它们的空间和通道等。
在屏蔽硬件错误的容错技术中,冗余附加技术包括:关键程序和数据的冗余存储及调用:检测、表决、切换、重构、纠错和复算的实现。
在屏蔽软件错误的容错技术中,冗余附加技术包括:冗余备份程序的存储及调用;实现错误检测和错误恢复的程序;实现容错软件所需的固化程序。
软件工具
软件维护阶段:
转自b站up主zst-2001