软件工程基础知识
软件质量保证
一、软件质量
软件质量是“软件与明确的和隐含的定义的需求相一致的程度 ”。具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的隐含特征的程度。
软件质量具有如下3个要点:
- (1)用户需求是度量软件质量的基础。
- (2)指定的标准定义了一组指导软件开发的准则。
- (3)没有显式描述的隐含需求(如期望软件是容易维护的)。
二、软件质量特性
ISO/IEC9126软件质量模型
ISO/IEC9126软件质量模型是一种评价软件质量的通用模型, 包括3个层次:
1、质量特性
2、质量子特性
3、度量指标
1.功能性
与功能及其指定的性质有关的一组属性。
- 适合性:与规定任务能否提供一组功能及这组功能的适合程度有关的软件属性
- 准确性:与能否得到正确或相符的结果或效果有关的软件属性
- 互操作性:与其他指定系统进行交互的能力有关的软件属性
- 保密安全性:与防止对程序及数据的非授权的故意或意外访问的能力有关的软件属性
- 功能性的依从性:使软件遵循有关的标准、约定、法规及类似规定的软件属性
2、可靠性
在规定的时间和条件下,软件维持其性能水平的能力有关的一组属性。
- 成熟性:与由软件故障引起失效的频度有关的软件属性
- 容错性:与由软件故障或违反指定接口的情况下,维持规定的性能水平的能力有关的软件属性
- 可恢复性:在失效发生后,重建其性能水平并恢复直接受影响数据的能力,以及为达此目的所需的时间和能力有关的软件属 性
3、易用性
与一组规定或潜在的用户为使用软件所需作的努力和对这样的使用所作的评价有关的一组属性。
- 易理解性:与用户为认识逻辑概念及其应用范围所花的努力有关的软件属性
- 易学习性:与用户为学习软件应用所花的努力有关的软件属性
- 易操作性:与用户为操作和运行控制所花的努力有关的软件属性
4、效率
与在规定的条件时间特性与软件执行其功能时,软件的性能水平与所用资源量之间关系有关的一组属性
- 时间特性:响应和处理时间及吞吐量有关的软件属性
- 资源特性:使用的资源数量及其使用资源的持续时间有关的软件属性
5、可维护性
与软件维护的难易程度有关的一组属性。
- 易分析性:与为诊断缺陷或失效原因及为判定待修改的部分所需努力有关的软件属性
- 易修改性:与进行修改,排除错误或适应环境变化所需努力有关的软件属性
- 稳定性:与修改所造成的未预料结果的风险有关的软件属性
- 可测试性:与确认已修改软件所需的努力有关的软件属性
6、可移植性
与软件可从某一环境转移到另一环境的能力有关的一组属性
- 适应性:与软件无需采用特殊处理就能适应不同的规定环境有关的软件属性
- 易安装性:在指定环境下安装软件的难易程度
- 一致性:软件服从与可移植性有关的标准或约定的程度。
- 可替换性:软件在特定软件环境中用来替代指定的其他软件的可能性和难易程度。
McCall的软件质量模型
参考:https://www.cnblogs.com/yangxia-test/p/4028773.html
McCall等认为,特性是软件质量的反映,软件属性可用做评价准则,定量化地度量软件属性可知软件质量的优劣
- McCall认为软件的质量模型应该包括<mark>产品的修正、产品的转移,产品的运行</mark>
- 而<mark>产品的修正</mark>又包括<mark>可维护性、可测试性、灵活性</mark>等子特点。
- <mark>产品的转移</mark>包括<mark>可移植性、可复用性、互连性</mark>等。
- <mark>产品的运行</mark>包括<mark>正确性、可靠性、效率、可使用性和完整性</mark>。
三、软件质量保证
是为保证软件系统充分满足用户要求的质量而进行有计划、有组织的活动,其目的是生产高质量软件。
1、质量保证主要手段:
- 开发初期制订质量保证计划
- 开发前选定制订开发标准、开发规范
- 选择分析设计方法和工具,形成高质量分析模型设计模型
- 严格执行阶段评审,及时发现问题
- 进行阶段测试
- 严格执行变更控制流程
- 有完整阶段文档
2、CMM(软件能力成熟度模型)
是一种用于评价软件承包能力以改善软件质量的方法,侧重于软件开发过程的管理及工程能力的提高与评估。
分为五个等级:
初始级
可重复级
已定义级
已管理级
优化级
- 1.初始级
软件过程是无序的,有时甚至是混乱的,对过程几乎没有定义,成功取决于个人努力。管理是反应式的。
- 2.可重复级
建立了基本的项目管理过程来跟踪费用、进度和功能特性。制定了必要的过程纪律,能重复早先类似应用项目取得的成功经验。
- 3.已定义级
已将软件管理和工程两方面的过程文档化、标准化,并综合成该组织的标准软件过程。所有项目均使用经批准、剪裁的标准软件过程来开发和维护软件,软件产品生产在整个软件过程是可见的。
- 4.已管理级
软件过程和产品质量的详细度量数据,对软件过程和产品都有定量的理解与控制。管理有一个作出结论的客观依据,管理能够在定量的范围内预测性能。
- 5.优化级
过程的量化反馈和先进的新思想、新技术促使过程持续不断改进。
3、CMMI(软件能力成熟度集成模型)
分为五个等级:
- 初始级
- 可管理级
- 严格定义级
- 定量管理级
- 优化级
四、软件复杂性
软件复杂性是指理解和处理软件的难易程度。软件复杂性度量的参数很多,主要有以下几个。
- 规模。规模即总共的指令数,或源程序行数。
- 难度。通常由程序中出现的操作数的数目所决定的量来表示。
- 结构。通常用与程序结构有关的度量来表示。
- 智能度。智能度即算法的难易程度。
软件复杂性包括程序复杂性和文档复杂性,软件复杂性主要体现在程序的复杂性中。
五、软件评审
软件评审的目的是检验软件开发、软件评测各阶段的工作是否齐全、规范,个阶段产品是否达到了规定的技术要求和质量要求,以决定是否可以转入下一阶段的工作。
设计质量评审、程序质量评审
《软件设计师教程》书P304
软件项目管理
一、项目管理内容
二、软件项目估算
估算的内容包括:
软件规模的估算
软件工作量的估算
成本估算
1、软件规模估算方法
-
LOC估算法(代码行估算法)
估算软件的代码行数。将软件项目划分为小的模块,通过历史数据、开发人员经验对LOC数进行估算。 -
FP估算
FP(功能点)是一种衡量工作量大小的单位。
功能点=信息处理规模*技术复杂度
2、信息处理规模:
外部输入数
外部输出数
外部查询数
内部逻辑文件数
外部接口文件数
技术复杂度=0.65+调节因子
3、软件工作量估算
COCOMO模型是一种精确的、易于使用的工作量估算方法。
按其详细程度分为三级:
- 基本COCOMO模型:用已估算出来的代码行数(LOC)为自变量的经验函数计算软件开发工作量。
- 中间COCOMO模型:在基本模型的基础上,再用涉及产品、硬件、人员、项目等方面的影响因素调整工作量的估算。
- 详细COCOMO模型:在中间模型的基础上,按模块层、子系统层、系统层,做出三张工作量因素分级表,供不同层次估算使用。
三、风险管理
是指对项目风险从识别到分析乃至采取应对措施等一系列过程
- 编制风险管理计划
- 风险识别
- 定性风险分析
- 定量风险分析
- 风险应对计划的编制
- 风险跟踪和监控
1、识别项目中的风险方法:
- 头脑风暴法
- 专家评估法
- 风险检查表
- 假设分析
2、IT项目中常见的风险
需求风险 技术风险 团队风险 关键人员风险 预算风险 范围风险
四、项目计划编排的方法与技术
1.计划评审技术(PERT)
PERT是利用网络分析制定计划以及对计划予以评价的技术。它能协调整个计划的各道工序,合理安排人力、物力、时间、资金, 加速计划的完成。
PERT对各个项目活动的完成时间按三种情况估计:
- (1)乐观时间:任何事情都顺利的情况下,完成某项工作的时间。
- (2)最可能时间:正常情况下,完成某项工作的时间。
- (3)悲观时间:最不利的情况下,完成某项工作的时间。
ai表示第i项活动的乐观时间
mi 表示第i项活动的最可能时间
bi 表示第i项活动的悲观时间。
2.甘特图
甘特图也叫横道图,它以横线来表示每项活动的起止时间。
- 优点:简单、明了、直观、易于编制的,因此到目前为止仍然是小型项目中常用的工具。
- 缺点:不能系统地表达各项工作之间的复杂关系,难以进行定量的计算和分析,以及计划的优化,同时也没有指出影响项目寿命周期的关键所在。
在大型工程项目中,它是高级管理层了解全局、基层安排进度时 有用的工具。
3.关键路径法(CPM)
是借助网络图和各活动所需时间(估计值),计算每一活动的最早或最迟开始和结束时间。
CPM算法的核心思想是将工作分解结构(WBS)分解的活动按逻辑关系加以整合,统筹计算出整个项目的工期和关键路径。
每个活动有四个和时间相关的参数:
( 1 )最早开始时间(ES)。某项活动能够开始的最早时间。
( 2 )最早结束时间(EF)。某项活动能够完成的最早时间。EF=ES+工期估计
( 3 )最迟结束时间(LF)。为了使项目按时完成,某项工作必须完成的最迟时间。
( 4 )最迟开始时间(LS)。为了使项目按时完成,某项工作必须开始的最迟时间。 LS=LF-工期估计
CPM方法有两个规则
规则1 :某项活动的最早开始时间必须相同或晚于直接指向这项活动的最早结束时间中的最晚时间。
规则2 :某项活动的最迟结束时间必须相同或早于该活动直接指向的所有活动最迟开始时间的最早时间。
根据以上规则,可以计算出工程的最早完工时间。
通过正向计算 (从第一个活动到最后一个活动)推算出最早完工时间,步骤如下:
( 1 )从网络图始端向终端计算。
( 2 )第一任务的开始为项目开始。
( 3 )任务完成时间为开始时间加持续时间。
( 4 )后续任务的开始时间根据前置任务的时间和搭接时间而定。
( 5 ) 多个前置任务存在时,根据最迟任务时间来定
通过反向计算(从最后一个活动到第一个活动)推算出最晚完工时间,步骤如下:
( 1 )从网络图终端向始端计算。
( 2 )最后一个任务的完成时间为项目完成时间。
( 3 )任务开始时间为完成时间减持续时间。
( 4 )前置任务的完成时间根据后续任务的时间和搭接时间而定。
( 5 ) 多个后续任务存在时,根据最早任务时间来定
最早开始时间和最晚开始时间相等的活动成为关键活动,关键活动串联起来的路径成为关键路径,关键路径的长度即为项目的工期。
一般可以通过两个原则来确认关键路径:
(1)总持续时间最长的线路称为关键线路
(2)总时差最小的工作组成的线路为关键线路
总时差是指一项工作在不影响总工期的前提下所具有的机动时间。
- 总时差=该工作最迟完工时间-该工作最早完工时间
- 总时差=该工作最迟开工时间-该工作最早开工时间
自由时差指一项工作在不影响其紧后工作最早开始时间的条件下,本工作可以利用的机动时间。
- 自由时差=该工作的紧后工作最早开时间-该工作最早完工时间
五、极限编程
极限编程是-种敏捷开发方法。其他敏捷方法还有自适应开发、水晶方法、特性驱动开发等,它们都有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法。
- 在极限编程方法中,提出了四大价值观:沟通、简单、反馈、勇气。
- 五大原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
- 还有十二个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、集体代码所有制、结对编程、每周工作40小时、持续集成、编码标准和现场客户。