白盒测试法
- 白盒测试也称为结构测试,根据程序的内部结构和逻辑来设计测试用例,对程序的路径和过程进行测试,检查是否满足设计的需要。
- 白盒测试常用的技术
- (1)逻辑覆盖。
逻辑覆盖考察用测试数据运行被测程序时对程序逻辑的覆盖程度,主要的逻辑覆盖标准有语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖6种。
- ①语句覆盖。
- 语句覆盖是指选择足够的测试数据,使被测试程序中的每条语句至少执行一次。
- 语句覆盖对程序执行逻辑的覆盖很低,因此一般认为它是很弱的逻辑覆盖。
- ②判定覆盖。
- 判定覆盖是指设计足够的测试用例,使得被测程序中的每个判定表达式至少获得一次“真”值和“假”值,或者说是程序中的每一个取“真”分支和取“假”分支至少都通过一次,因此判定覆盖也称为分支覆盖。判定覆盖要比语句覆盖更强一些。
- ③条件覆盖。
- 条件覆盖是指构造一组测试用例,使得每一判定语句中每个逻辑条件的各种可能的值至少满足一次。
- ④判定/条件覆盖。
- 判定/条件覆盖是指设计足够的测试用例,使得判定中每个条件的所有可能取值(真假)至少出现一次,并使每个判定本身的判定结果(真/假)也至少出现一次。
- ⑤条件组合覆盖。
- 条件组合覆盖是指设计足够的测试用例,使得每个判定中条件的各种可能值的组合都至少出现一次。满足条件组合覆盖的测试用例是一定满足判定覆盖、条件覆盖和判定/条件覆盖的。
- ⑥路径覆盖。
- 路径覆盖是指覆盖被测试程序中所有可能的路径。
- (2)循环覆盖。
- 执行足够的测试用例,使得循环中的每个条件都得到验证。
- (3)基本路径测试。
- 基本路径测试法是在程序控制流图的基础上通过分析控制流图的环路复杂性,导出基本可执行路径集合,从而设计测试用例。设计出的测试用例要保证在测试中程序的每一条独立路径都执行过,即程序中的每条可执行语句至少执行一次。此外,所有条件语句的真值状态和假值状态都测试过。路径测试的起点是程序控制流图。程序控制流图中的结点代表包含一个或多个无分支的语句序列,边代表控制流。
- McCabe度量法
- McCabe度量法是由Thomas McCabe提出的一种基于程序控制流的复杂性度量方法。
- McCabe复杂性度量又称为环路度量,它认为程序的复杂性在很大程度上取决于控制的复杂性。单一的顺序程序结构最为简单,循环和选择构成的环路越多,程序就越复杂。这种方法以图论为工具,先画出程序图,然后用该图的环路数作为程序复杂性的度量值。程序图是退化的程序流程图,也就是说,把程序流程图中的每个处理符号都退化成一个结点,原来连接不同处理符号的流线变成连接不同点的有向弧,这样得到的有向图称为程序图,如图5-17所示。程序图仅描述程序内部的控制流程,完全不表现对数据的具体操作以及分支和循环的具体条件。
-
- 根据图论,在一个强连通的有向图G中,环的个数V(G)由以下公式给出:V(G)=m-n+2p
- 其中,V(G)是有向图G中的环路数,m是图G中弧的个数,n是图G中的结点数,p是G中的强连通分量个数。
- p通常取1
- 也可以环路个数=闭合区域+1
- 在一个程序中,从程序图的入口点总能到达图中的任何一个结点,因此,程序总是连通的,但不是强连通的。为了使程序图成为强连通图,从图的入口点到出口点加一条用虚线表示的有向边,使图成为强连通图。这样就可以使用上式计算环路复杂性了。
- 环路复杂性度量反映了程序(或模块)的控制结构的复杂性。McCabe发现(G=10是一个实际模块的上限。当模块的环路复杂度超过10时,要充分测试这个模块变得特别难。
- 白盒测试的原则
- (1)程序模块中的所有独立路径至少执行一次。
- (2)在所有的逻辑判断中,取“真”和取“假”的两种情况至少都能执行一次。
- (3)每个循环都应在边界条件和一般条件下各执行一次。
- (4)测试程序内部数据结构的有效性等。
- 测试用例由测试输入数据和与之对应的预期输出结果组成。在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
系统维护
可维护性
1)评价指标
(1)可理解性
指别人能理解系统的结构、界面、功能和内部过程的难易程度。模块化、详细设计文档、结构化设计和良好的高级程序设计语言等都有助于提高可理解性。
可靠性是指一个系统对于给定的时间间隔内、在给定条件下无失效运作的概率。可
以用MTTF/(1+MTTF)来度量,其中MTTF为平均无故障时间。
(2)可测试性
诊断和测试的容易程度取决于易理解的程度。好的文档资料有利于诊断和测试,同时,程序的结构、高性能的测试工具以及周密计划的测试工序也是至关重要的。为此,开发人员在系统设计和编程阶段就应尽力把程序设计成易诊断和测试的。此外,在进行系统维护时,应该充分利用在系统测试阶段保存下米的测试用例。
可用性是在给定的时间点上,一个系统能够按照规格说明正确运作的概率。可以用
MTBF/(1+MTBF)来度量,其中MTBF为平均失效间隔时间。
(3)可修改性
诊断和测试的容易程度与系统设计所制定的设计原则有直接关系。模块的耦合、内聚、作用范围与控制范围的关系等都对可修改性有影响。
可维护性是在给定的使用条件下,在定的时间间隔内,使用规定的过程和资源完
成维护活动的概率。可以用1/(1+MTTR)采度量,其中MTTR为平均修复时间。
2)维护与软件文档
3)软件文档的修改
1)硬件维护
2)软件维护
软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部修改。修改时应充分利用源程序,修改后要填写程序修改登记表,并在程序变更通知书上写明新旧程序的不同之处。
(1)正确性维护
(2)适应性维护
(3)完善性维护
(4)预防性维护
3)数据维护
软件项目管理
软件项目估算
COCOMO估算模型
COCOMO模型是一种精确的、易于使用的成本估算模型。COCOMO模型按其详细程度分为基本COCOMO模型、中级COCOMO模型和详细COCOMO模型。
1)基本COCOMO模型
2)中级COCOMO模型
3)详细COCOMO模型
COCOMOⅡ模型
最初的COCOMO模型是得到产业界最广泛应用和讨论的软件成本估算模型之一,现在它已经演化成更全面的估算模型,称为COCOMOⅡ。和其前身一样,COCOMOII也是一种层次结构的估算模型,被分为3个阶段性模型。
(1)应用组装模型
(2)早期设计阶段模型
(3)体系结构阶段模型
和所有的软件估算模型一样,COCOMOⅡ模型也需要使用规模估算信息,在模型层次结构中有3种不同的规模估算选择:对象点、功能点和代码行。应用组装模型使用的是对象点:早期设计阶段模型使用的是功能点,功能点可以转换为代码行。
对象点也是一种间接的软件测量。计算对象点时使用如下的计数值:(用户界面的)屏幕书:报表数;构造应用系统可能需要的构件数。
进度管理
Gantt图(甘特图)
Gantt图是一种简单的水平条形图,它以日历为基准描述项目任务。水平轴表示日历时间线(如时、天、周、月和年等),每个条形表示个任务,任务名称垂直地列在左边的列中,图中水平条的起点和终点对应水平轴上的时间,分别表示该任务的开始时间和结束时间,水平条的长度表示完成该任务所持续的时间。当日历中同一时段存在多个水平条时,表示任务之间的并发。
图5-12所示的Gantt图描述了3个任务的进度安排。任务1首先开始,完成它需要6个月时间:任务2在1个月后开始,完成它需要9个月时间:任务3在6个月后开始,完成它需要5个月时间。
Gantt图能清晰地描述每个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是它不能清晰地反映出各任务之间的依赖关系,难以确定整个项目的关键所在,也不能反映计划中有潜力的部分。
项目计划评审技术(Program Evaluation&Review Technique,PERT图)
概念
实例
PERT图不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了任务之间的关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。图中的松弛时间则反映了完成某些任务时可以推迟其开始时间或延长其所需完成的时间。
最早出现时刻
顺着算
最晚出现时刻
倒着算
松弛时间
摸鱼时间
多流出箭头特殊考虑
关键路径
但是,PERT图不能反映任务之间的并行关系。
配置管理
在软件开发过程中变更是不可避免的,而变更时由于没有进行变更控制,可能加剧了项目中的混乱,为了协调软件开发使得混乱减到最小,使用配置管理技术,使变更所产生的错误达到最小并最有效地提高生产率。
软件配置管理(Software Configure Management,SCM)用于整个软件工程过程。SCM是一组管理整个软件生存周期中各阶段变更的活动。
主要目标
基线
软件配置项
软件配置项(Software Configure Item,SCI)是软件工程中产生的信息项,它是配置管理的基本单位,对于已经成为基线的SCI,虽然可以修改,但必须按照一个特殊的、正式的过程进行评估,确认每一处修改。以下的SCI是SCM的对象,并可形成基线。
版本控制
软件配置实际上是一个动态的概念,它一方面随着软件生存周期向前推进,SCI的数量在不断增多,一些文档经过转换生成另一些文档,并产生一些信息:另一方面又随时会有新的变更出现,形成新的版本。
可以采用图5-14所示的演变图来表达系统的不同版本,在图中各个结点是一个完全的软件版本。软件的每一个版本都是SCI(源代码、文档、数据)的一个汇集,而且各个版本都可能由不同的变种组成。
变更控制
软件工程过程中某一阶段的变更均要引起软件配置的变更,这种变更必须严格地加以控制和管理,保持修改信息,并把精确、清晰的信息传递到软件工程过程的下一步骤。
对于一个大型软件来说,不加控制的变更很快就会引起混乱。因此,变更控制是一项最重要的软件配置任务。为了有效地实现变更控制,需借助于配置数据库和基线的概念。
(1)开发库
(2)受控库
(3)产品库
风险管理
分类
分类1
项目风险
技术风险
商业风险
商业风险威胁到要开发软件的生存能力,且常常会危害到项目或产品。
(1)市场风险
(2)策略风险
(3)销售风险
(4)管理风险
(5)预算风险
分类2(Charette提出)
己知风险
可预测风险
不可预测风险
1.风险识别
概念
风险条目检查表
识别风险的一种方法是建立风险条目检查表。该检查表可用于风险识别,并且主要用来识别下列几种类型中的一些已知风险和可预测风险。
风险条目检查表可以采用不同的方式来组织。与上述每个主题相关的问题可以针对每一个软件项目来回答。根据这些问题的答案,项目管理者就可以估计风险产生的影响。
当然,也可以采用另一种风险条目检查表格式,即仅仅列出与每一种类型有关的特性,最终给出一组风险因素和驱动因子以及它们发生的概率。风险因素包括性能、成本、支持和进度。
风险因素定义
2.风险预测
概念
1)风险预测活动
通常,项目计划人员与管理人员、技术人员一起进行以下4步风险预测活动。
一种简单的风险预测技术是建立风险表。风险表的第1列列出所有的风险(由风险识别活动得到),第2~4列列出每个风险的种类、发生的概率以及所产生的影响。风险所产生的影响可用一个数字来表示:“1”表示灾难性的:“2”表示严重的:“3”表示轻微的:“4”表示可忽略的。
2)评估风险影响
如果风险真的发生,有3个因素可能会影响风险所产生的后果,即风险的本质、范围和时间。
本质
范围
时间
整体的风险显露度(Risk Exposure.,RE)可由下面的关系确定:
3.风险评估
概念
在进行风险评估时,建立了如下形式的三元组:
其中,ri表示风险,li表示风险发生的概率,xi表示风险产生的影响。
一种对风险评估很有用的技术就是定义风险参照水准。对于大多数软件项目来说,成本、进度和性能就是3种典型的风险参照水准。也就是说,对于成本超支、进度延期、性能降低(或它们的某种组合),有一个表明导致项目终止的水准。
步骤
4.风险控制
风险控制的目的是辅助项目组建立处理风险的策略。一个有效的策略必须考虑以下3个问题。
1)风险避免
应对风险的最好办法是主动地避免风险,即在风险发生前分析引起风险的原因,然后采取措施,以避免风险的发生。
例如项目风险片:表示“频繁的人员流动”,根据历史经验可知,该风险发生的概率:大约为70%,该风险产生的影响x是第2级(严重的)。为了避免该风险,可以采取以下策略。
2)风险监控
3)RMMM计划(风险缓解、监控和管理计划)
(Risk mitigation, monitoring and management,即RMMM)
风险管理策略可以包含在软件项目计划中,或者风险管理步骤也可以组织成一个独立的风险缓解、监控和管理计划(RMMM计划)。RMMM计划将所有风险分析工作文档化,并由项目管理者作为整个项目计划中的一部分来使用。
建立了RMMM计划,而且项目已经启动之后,风险缓解及监测步骤也就开始了。风险缓解是一种问题规避活动,而风险监测是一种项目跟踪活动.
这种监测活动有3个主要目的:
在很多情况下,项目中发生的问题可以追溯到不止一个风险,所以风险监测的另一个任务就是试图找到“起源”(在整个项目中是哪些风险引起了哪些问题)。
软件质量
概念
软件质量特性
ISO/IEC 9126软件质量模型
ISO/IEC 9126软件质量模型由3个层次组成:第一层是质量特性,第二层是质量子特性,第三层是度量指标。
(1)功能性(Functionality)
与一组功能及其指定的性质的存在有关的一组属性,功能是指满足规定或隐含需求的那些功能。
适应性(Suitability)
准确性(Accurateness)
互用性(nteroperability)
依从性(Compliance)
安全性(Security)
(2)可靠性(Reliability)
与在规定的一段时间内和规定的条件下软件维持在其性能水平有关的能力。
成熟性(Maturity)
容错性(Fault tolerance)
易恢复性(Recoverability)
(3)易使用性(Usability)
与为使用所需的努力和由一组规定或隐含的用户对这样使用所做的个别评价有关的一组属性。
易理解性(Understandability)
易学性(Learnability)
易操作性(Operability)
(4)效率(Efficiency)
在规定条件下,与软件的性能水平与所用资源量之间的关系有关的软件属性。
时间特性(Time behavior)
资源特性(Resource behavior)
(5)可维护性(Maintainability)
与进行规定的修改所需要的努力有关的一组属性。
易分析性(Analyzability)
易改变性(Changeability)
稳定性(Stability)
易测试性(Testability)
(6)可移植性(Portability)
与软件可从某一环境转移到另一环境的能力有关的一组属性。
适应性(Adaptability)
易安装性(nstallability)
一致性(Conformance)
易替换性(Replaceability)
Mc Call软件质量模型
Me Call软件质量模型从软件产品的运行、修正和转移3个方面确定了11个质量特性(如图5-16所示)。McCall也给出了一个三层模型框架,第一层是质量特性,第二层是评价准则,第三层是度量指标。
软件质量评审
通常,把“质量”理解为“用户满意程度”。为了使得用户满意,有以下两个必要条件。
设计质量
程序质量
软件的规格说明
外部规格说明
外部规格说明是从用户角度来看的规格,包括硬件软件系统设计、功能设计;
内部规格说明
内部规格说明是从开发者角度来看的规格说明,为了实现外部规格的更详细的规格,即软件模块结构与模块处理过程的设计。
1)设计质量的评审内容
设计质量评审的对象是在需求分析阶段产生的软件需求规格说明、数据需求规格说明,以及在软件概要设计阶段产生的软件概要设计说明书等。通常从以下几个方面进行评审。
(1)评价软件的规格说明是否合乎用户的要求
(2)评审可靠性
(3)评审保密措施实现情况
(4)评审操作特性实施情况
(5)评审性能实现情况
(6)评审软件是否具有可修改性、可扩充性、可互换性和可移植性。
(7)评审软件是否具有可测试性。
(8)评审软件是否具有复用性。
2)程序质量的评审内容
程序质量评审通常是从开发者的角度进行评审,与开发技术直接相关。它是着眼于软件本身的结构、与运行环境的接口以及变更带来的影响而进行的评审活动。
(1)功能结构
在软件的各种结构中,功能结构是用户唯一能见到的结构。因此,功能结构是联系用户与开发者的规格说明,它在软件的设计中占有极其重要的地位。在评审软件的功能结构时,必须明确软件的数据结构。需要检查的项目如下。
数据结构
功能结构
数据结构和功能结构之间的对应关系
(2)功能的通用性
(3)模块的层次
(4)模块结构
上述的模块层次结构是模块的静态结构,现在要检查模块的动态结构。模块分为处理模块和数据模块两类,模块间的动态结构也与这些模块分类有关。对这样的模坎结构进行检查的项目如下。
控制流结构
数据流结构
功能结构与数据流结构的对应关系
(5)处理过程的结构
处理过程是最基木的加工逻辑过程。
3)与运行环境的接口
运行环境包括硬件、其他软件和用户,主要的检查项目如下。
(1)与硬件的接口
(2)与用户的接口
软件容错技术
提高软件质量和可靠性的技术大致可分为两类,一类是避开错误,即在开发的过程中不让差错潜入软件的技术:另一类是容错技术,即对某些无法避开的差错,使其影响减至最小的技术。
1)容错软件的定义
2)容错的一般方法
实现容错的主要手段是冗余。
冗余是指对于实现系统规定功能是多余的那部分资源,包括硬件、软件、信息和时间。由于加入了这些资源,有可能使系统的可靠性得到较大的提高。通常,冗余技术分为4类。
(1)结构冗余
结构冗余是通常采用的冗余技术,按其工作方法可以分为静态、动态和混合冗余3种。
①静态冗余
②动态冗余。
③混合冗余
(2)信息冗余
(3)时间冗余
(4)冗余附加技术
冗余附加技术是指为实现上述冗余技术所需的资源和技术,包括程序、指令、数据、存放和调动它们的空间和通道等。
在屏蔽软件错误的容错系统中,冗余附加技术的构成包括:
在屏蔽硬件错误的容错技术中,冗余附加技术包括:
软件工具
用来辅助软件开发、运行、维护、管理和支持等过程中的活动的软件称为软件工具。
早期的软件工具主要用来辅助程序员编程,如编辑程序、编译程序和排错程序等。
在提出了软件工程的概念以后,又出现了软件生存周期的概念,出现了许多开发模型和开发方法,并且软件管理也开始受到人们的重视。
与此同时,出现了一批软件工具来辅助软件工程的实施,这些软件工具涉及软件开发、维护、管理过程中的各项活动,并辅助这些活动高效、高质量地进行。
1.软件开发工具
(1)需求分析工具
(2)设计工具
(3)编码与排错工具
(4)测试工具
用于支持软件测试的工具称为测试工具,它分为数据获取工具、静态分析工具、动态分析工具、模拟工具以及测试管理工具。
2.软件维护工具
(1)版本控制工具
(2)文档分析工具
(3)开发信息库工具
(4)逆向工程工具
(5)再工程工具
3.软件管理和软件支持工具
(1)项目管理工具
(2)配置管理工具
(3)软件评价工具