本文仅供复习参考使用!
质量
质量
与质量相关的概念:组织、过程、产品、服务、客户、体系
质量就是用来衡量产品的或工作的好坏。
质量的内涵是由一组满足客户及其他相关方所要求的固有特性组成。
质量属性:质量的客户属性,质量的成本属性,社会属性,可测性,质量的可预见性。
客户
客户与质量的关系:质量是相对客户而存在的,客户与质量的基本关系是相互依赖的关系。
不同的质量观点
质量概念的发展
软件质量
软件特点
软硬件特征比较
软硬件开发过程比较
软件过程
软件开发的基本过程:需求分析,设计,编程,测试,维护
软件开发过程模型:
V模型
敏捷方法极限编程:
个体和交互胜过过程和工具
可以工作的软件胜过面面俱到的文档
客户合作胜过合同谈判
响应变化胜过遵循计划
极限编程的生命周期:
增量模型和迭代模型
增量模型和迭代模型都是软件开发过程中常用的方法,它们各自具有不同的特点和应用场景。以下是对这两种模型的详细分析:
增量模型
基本概念:
增量模型是一种逐步构建系统的开发方法,它将整个系统划分为多个增量,每个增量都是一个可交付的部分系统,包含完整的功能和特性。
特点:
模块化与组件化:增量模型将待开发的软件系统模块化和组件化,允许分批次地分析、设计、编码和测试这些增量组件。
降低风险:以组件为单位进行开发降低了软件开发的风险,因为一个开发周期内的错误不会影响到整个软件系统。
开发顺序灵活:开发人员可以对组件的实现顺序进行优先级排序,先完成需求稳定的核心组件。当组件的优先级发生变化时,还能及时地对实现顺序进行调整。
适用场景:
需求明确:增量模型适用于需求比较明确,架构比较稳定的软件开发项目。
长期开发:对于需要长时间开发和部署的大型项目,增量模型可以提供更早的交付价值,降低项目风险。
迭代模型
基本概念:
迭代模型是通过深度或细化的程度来划分开发阶段,每阶段都完善、增强功能。它类似于小型的瀑布式项目,但更强调灵活性和适应性。
特点:
灵活性:迭代模型能够及时响应用户反馈和需求变化,减少开发风险,增加项目的可控性。
逐步达到目标:每完成一个阶段都有新版本发布,有利于鼓舞团队士气,降低项目风险。
适用场景:
需求不明确:迭代模型适用于需求不甚明确、难度比较大的软件开发项目。
快速迭代:对于需要快速迭代和交付的项目,迭代模型能够迅速实现功能并获取用户反馈。
两者区别
阶段划分:迭代模型是通过深度或细化的程度来划分阶段,而增量模型则是从功能量上来划分阶段。
适用场景:迭代模型更适合需求不稳定、复杂度较高的项目;而增量模型更适合需求明确、架构稳定的大型项目。
软件缺陷
软件质量
软件产品的质量
软件开发过程的质量
软件在其商业环境中所表现的质量
软件质量的特性:
3A特性:可说明性 有效性 易用性
3维特性:功能性 可靠性 性能
ISO9126定义特性:功能 可靠 易用 效率 可维护 可移植
软件质量的内容
软件质量工程体系
概述
要将软件质量管理作为一个系统来管理,运用系统科学的方法,通过有关质量的各种信息反馈与调控,对软件质量进行全面、综合的系统性管理,包括软件质量计划、组织、协调、控制,以实现软件质量的目标。
软件质量因素和指标
软件的6个品质要素:正确性,可靠性,易用性,效率,可维护性,可移植性
软件质量模型分析
软件质量工作层次
质量方针:
质量控制:
质量保证:
质量改进:
软件质量成本
质量成本=保证成本+损失成本
保证成本=预防成本+评价成本
软件质量标准和度量
软件质量度量
测量基础
度量尺寸:
分类尺度:
➢某个指标被分成一系列的类别。如产品质量属性有:功能性、适用性、性能、安全性、可靠性、可维护性等。
➢ 序列尺度:
分类的序列,即在分类的基础上,再加以排序。如用1、2、3表示用户的满意度,1度最低,3度最高。也可以用某中线为基准的相对百分比来表示程度。
➢ 间隔尺度:
通过数值来表示两个邻近测量点之间的差异,但没有绝对的“零”值。
➢ 比值尺度:
和间隔尺度相似,但有绝对的“零”值存在。
有效性和可靠性是测量标准中最重要的指标
测量过程:识别目标和度量描述,定义度量过程,搜集数据,数据分析与反馈,过程改进
软件开发生命周期的度量活动
项目质量度量、产品质量度量、过程质量度量
软件项目的质量度量
进度度量,风险度量,规模度量,复杂度度量,缺陷度量,工作量度量,其他的项目度量
方法:德尔菲法(一种专家评估技术),造性成本模型,代码行度量方法,功能点分析法,面向对象软件的对象点方法
软件产品的质量度量
软件过程的质量度量
➢ 对软件过程质量的改进围绕改善软件质量、提高生产效率和降低成本这三方面展开。
➢ 涉及到7个互相关联的共性过程质量要素:进度、资源和费用、评审、缺陷、开发性能、技术完备
性、需求稳定性。
➢ 软件开发分为需求、设计、编码、测试、运行和维护5个阶段。
➢ 因此个性过程质量要素也和5个开发阶段相对应,包括:需求规格说明书、设计有效性、代码审查、测试用例和环境、问题和缺陷修复。
软件质量度量中的统计分析
软件质量标准
软件质量标准概述
标准的层次
国际标准,国家标准,行业标准,企业规范,项目规范
常用标准简介
ISO 9001-3 ,CMM,CMMI,TR 15504,ISO/IEC15504,IEEE软件工程标准,Tick IT
能力成熟度模型CMMI
CMMI质量思想
初始级,可重复级,已定义级,已管理级,优化级
CMMI关键过程域
CMMI内容分级
CMMI内容分为”必需的”、”期望的”、”提供信息的”三个级别,来衡量模型包括的质量重要性和作用。
“必需的”级别的构件 :目标
“期望的”级别的构件 :方法
“提供信息的”级别的构件 :目的、介绍性说明、引用、名字、方法与目标关系表、注释、典型工作产品、子实践、学科扩充以及公用方法的详尽描述 。
CMMI流程改进
CMMI量化管理
CMMI质量框架意义
软件评审
为什么需要评审
成本上,缺陷发现得越晚纠正费用越高。 软件评审的重要目的就是通过软件评审尽早的产品中的缺陷,减少大量的后期返工。
技术上,前一阶段的错误会导致后一阶段的工作结果中有相应的错误,而且错误会逐渐累积,越来越多。
效率上,
评审的内容
管理评审
技术评审
文档评审
检查列表:正确性,完整性,一致性,有效性,易测性,模块化,清晰性,可行性,可靠性,可追溯性
过程评审
评审的方法和技术
方法:
对于最可能产生风险的工作成果,要采用最正式的评审方法。
技术:
评审会议
准备评审会议:制定评审计划和评审时间,组建评审组,准备评审材料,发送审查包,制定活动进程表。
如何实施成功的评审
SQA的组织活动
软件质量管理组织介绍
基本的软件质量组织
软件测试部门 软件工程过程组(SEPG) 软件过程改进网络(SPIN) 质量保证协会(QAI)
SQA组织活动流程
SQA组织结构和角色
常用的组织结构模型
角色的分类和职能
非全职的QA:项目经理,开发工程师,测试工程师
全职的QA:SQA经理,SQA工程师
各角色之间的关系
SQA组织的目标和责任
SQA人员的培养
SQA认证与培训
注册软件质量分析师 注册软件质量工程师 企业内部认证
提高软件设计质量
软件设计
软件设计的目标
软件设计是软件开发的重要阶段之一,是把软件需求转换为软件表示的过程,也是将用户需求准
确转化为软件系统的唯一途径。 软件设计的两个阶段:概要设计和详细设计。
软件设计的目标具备特征:可靠性,性能和安全性,可扩展性,可定制性或可移植性,可维护性,可重用性
软件设计评价标准
软件设计原则
软件设计的基本原则
◼ 设计过程中,始终以质量为目标而展开
◼ 设计越简单越好
软件设计的指导思想
◼ 降低模块耦合度
◼ 提高模块内聚性
软件设计原则:里氏代换原则,依赖倒转原则,接口隔离原则,合成/聚合复用原则,迪米特法则
软件体系结构
体系结构模型:结构模型,框架模型,动态模型,过程模型,功能模型
体系结构的分类:单用户体系结构,C/S软件体系结构,B/S软件体系结构,中间件的多层分布式的体系结构
软件设计模式
创建型模型(工厂模式),结构型模式(适配器模式),行为型模式(中介者模式)
设计模式的四要素:模式名称,问题,解决方案,效果。
设计模式的作用:
设计模式在工程小组成员之间提供了通用的语义。
➢ 设计模式可以更加简单方便的复用成功的设计和
体系结构。
➢ 有助于作出有利于系统复用的选择,避免设计损
害系统复用性。
➢ 可以帮助设计者更快更好的完成系统设计。
软件设计优化
一些典型的系统设计
数据库设计质量
数据字典:
高质量编程
代码风格
Windows程序命名规则
对于一般标示符,适当的使用简写形式,以最短的组合词表达所需要表达的意义。
◼ 程序中不要仅靠大小写来区分相似的标识符。
◼ 程序中尽量不要出现与标示符完全相同的局部变量和全局变量。
◼ 变量的名字应当使用“名词”或者“形容词+名词”。
◼ 全局函数的名字应当使用“动词”或者“动词+名词”。
◼ 类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身
◼ 用正确的反义词组命名具有互斥意义的变量或者相反动作的函数类名和函数名用大写字母开头的单词组合而成;变量和参数用小写字母开头的单词组合而成;常量全用大写的字母,用下划线分割单词。
◼ 静态变量加前缀s_。如果必须定义使用全局变量,则在全局变量前加g_。
◼ 类的数据成员加前缀m_,可以避免数据成员与成员函数的参数同名。
◼ 为了防止某一软件库中的一些标识符和其他软件库中的标识符冲突,可以为各种标识符加上反映软件性质的前缀。
◼ 使用i、j、k、l、m作为循环计数变量。
函数处理规则
◼ 参数的书写要完整,不要只写参数的类型而不写参数名。函数没有参数时用void填充。
◼ 参数命名要恰当,顺序要合理。
◼ 如果参数是指针且仅做输入用,应该在类型前面加const,以防止该指针在函数体内被意外修改。
◼ 如果输入参数以值传递的方式传递对象,宜改用“const & ”方式来传递,这样可以省去临时对象的构造和析构过程,从而提高效率。
◼ 避免参数太多,参数的个数尽量控制在5个以内。
◼ 不要省略返回值的类型。
◼ 函数名字与返回值类型在语义上不可冲突。
◼ 不要将正常值和错误标志混在一起返回。正常值用输出参数获得,错误标志用return语句返回。
◼ 有时函数原本不需要返回值,但是为了增加灵活性,如支持链式表达,可以附加返回值
◼ 如果函数的返回值是一个对象,要注意”引用传递”、”值传递”的不同使用。
◼ 在函数体的”出口处”,对return语句的正确性和效率进行检查。
文件结构
◼ 定义文件开头处的版权和版本声明。
◼ 对一些头文件的引用。
◼ 程序的实现体(包括数据和代码)
版权和版本的声明
◼ 版权信息。
◼ 文件名称,标识符,摘要。
◼ 当前版本号,作者/修改者,完成日期。
◼ 版本历史信息。
头文件的结构
◼ 为了防止头文件被重复引用,应当用ifndef/define/endif结构产生预处理块。
◼ 用 #include <filename.h> 格式来引用标准库的头文件(编译器将从标准库目录开始搜索)。
◼ 用 #include “filename.h” 格式来引用非标准库的头文件(编译器将从用户的工作目录开始搜索)。
◼ 头文件中只存放“声明”而不存放“定义”
◼ 不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。
空行规则
◼ 在每个类声明、每个函数定义结束之后都要加空行。
◼ 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。
程序的版式
代码行,对齐,长行拆分,注释,类的版式
表达式
共性规则
基本语句
if语句,循环控制语句
内存管理
内存分配方式:从静态存储区域分配,在栈上创建,从堆上分配(亦称动态内存分配)。
常见的内存错误:内存分配未成功,却使用了它。内存分配虽然成功,但是尚未初始化就引用它。
内存分配成功并且已经初始化,但操作越过了内存的边界。忘记了释放内存,造成内存泄露。释放了内存却继续使用它。
free和delete对指针操作的正确理解。
• free和delete只是把指针所指的内存给释放掉,但并没有把指针本身干掉。
其他编程经验
用const修饰函数的参数
Java编程规则
C++编程规则
软件测试
软件测试概述
测试是为了发现错误而执行程序的过程。
零缺陷是目标!足够好是原则!
测试在软件开发各个阶段的任务:需求分析审查,设计审查,单元测试,集成测试,功能验证,系统测试,验收测试,版本发布,维护。
软件测试过程
测试的方法应用之道
验证和确认缺一不可
测试方法的辩证统一 (重点)
白盒设计方法又分为逻辑覆盖法和基本路径覆盖法等,逻辑覆盖又分为语句覆盖、判定覆盖、条件覆盖方法、判定-条件覆盖、条件组合覆盖等。黑盒设计方法分为等价类划分法、边界值划分法、错误推测法、因果图法等。
测试目标实现的完整性和有效性
除了正确性和实用性之外,还包括:符合标准和规范、直观性、一致性、灵活性、舒适性。
性能测试和容量测试
容错性测试和安全性测试
测试过程的评审和质量保证
要严格执行测试
提高测试覆盖度
软件测试组织和管理
测试项目的管理原则,测试进度和成本的控制,测试风险的管理,测试风险的控制方法,测试风险的应急方案
白盒测试
白盒测试概述
白盒测试也称结构测试或逻辑驱动测试。
白盒测试的实施步骤:
测试计划阶段 测试设计阶段 测试执行阶段 测试总结阶段
白盒测试方法
逻辑覆盖法
循环测试
简单循环 嵌套循环 连锁循环 非结构循环
基本路径测试法
步骤:画出控制流图,计算圈复杂度(判定节点P+1或者边数E-节点数N+2),导出测试用例,准备测试用例
程序插装
程序变异测试
黑盒测试
等价类划分
边界值分析法
边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。
通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。
因果图法
功能图法
测试方法选择策略
黑盒测试工具介绍
LoadRunner和QuickTest Pro
集成测试
集成测试定义
集成测试是在单元测试的基础上,将多个模块组合在一起进行测试的过程,主要检查各个软件单元之间的相互接口是否正确。是介于单元测试和系统测试之间的过渡阶段,是单元测试的扩展和延伸。