SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?
測试策略:静态測试还是动态測试?
[对话场景]
成功公布某个软件版本号之后,项目团队召开了项目的经验教训总结大会。在会议期间,项目经理小项和測试经理小測进行了例如以下的对话:
小项:“小測,我们的项目时间压力非常大。測试运行是我们的关键路径,測试团队能否够在測试运行阶段投入很多其它的人力和物力?”限定时间和人力资源同等条件。
小測:“啊!假如添加我们的測试运行时间,在整个周期不变的情况下。我们就须要压缩前期的学习和评审投入的时间和工作量,是吗?”
小项:“是的,你看是否可行?”
小測:“……”
[场景分析]
上述场景中,项目经理小项希望測试经理小測在眼下的人力和时间情况下。通过压缩前期的学习和评审时间,来添加測试运行的时间。但从项目的成本和产品质量角度而言。这并非一个有效的手段。
測试应该贯穿于整个软件开发生命周期,而不只关注在測试运行阶段,这已经成为了软件測试的一个基本原则。
评审作为静态測试的一种有效手段(静态分析也是常见的一种静态測试手段。在本文中以评审作为解说的对象),它能够有效的减少成本和提高质量,应该成为每一个项目參与人员的共识。
假如能够通过量化的方式阐述评审的重要意义。不仅能够有效的回答项目经理小项的问题,并且能够更加有效的开展软件測试的各个測试活动。本文以通用的V模型作为样例。量化分析评审是怎样提高质量和减少成本的。
通用V模型有需求规格说明、系统功能设计、系统技术设计、组件规格说明、编码、组件測试、集成測试、系统測试和验收測试等阶段组成。图1是量化评审在减少成本和提高质量方面的模型图。
当中的概念部分能够觉得直接来自用户的要求和需求。而用户使用现场指的是产品公布给用户之后在实际环境中使用。
图1 量化评审作用的模型图
图中的每一个图例的解释和含义。请參考图2。
图2 图例说明
依据图1能够看出评审和动态測试是用来发现和移除缺陷的两个主要測试活动:评审主要应用于软件开发的早期阶段(在V模型的左边),而动态測试应用于測试对象能够执行之后的阶段(在V模型的右边)。图1至少体现了两个软件測试的实践经验:
1)首先。缺陷的放大效应(即缺陷的雪崩效应)。
2)其次,缺陷发现和修复的成本随着开发阶段的演进而高速的上升;
虽然图1中提供的缺陷放大系数和缺陷在不同阶段的修复成本,并不一定适合不同的组织和项目,可是,作为案例分析评审在减少成本和提高质量的原理是适合的。以下首先对图中的一些基本概念和数字进行描写叙述:
l 静态測试主要指的是评审活动,动态測试包含了4个測试级别;
l 不同阶段的缺陷修复的成本分布,依次为1、2、5、10、15、22、50、100和500。
l 不同阶段引入的缺陷数目,以及缺陷数目的放大系数。
当中左边的放大系数为1.5。而右边为1。而缺陷的移除率,为了简单起见。左边和右边都定义为50%;
图中的方框内的数字分别表示为:
(1)左上角为上个阶段遗漏的缺陷数目。在V模型的右边。通常缺陷数目会是缺陷放大效应之后的数目;
(2)左下角为为本阶段引入的缺陷数目。在需求和设计阶段,缺陷存在于规格说明中。在实现阶段。缺陷来自于代码中。而測试阶段,缺陷主要来自缺陷的改动之后引入;
(3)右上角为本阶段的缺陷移除率(以%表示)。
(4)右下角为本阶段移除缺陷之后剩余的缺陷数目;
通过在软件开发生命周期的早期开展评审活动,在项目早期发现和修复缺陷,将能够大大的减少成本。减少成本不仅是因为早期发现和修复缺陷的成本,比在后期发现和修复的成本低。而且也能够更好的预防缺陷的雪崩效应,即减少前期的缺陷遗留到兴许的阶段。
下表通过数据和计算的方式,来分析通过评审的引入是怎样减少成本的。
表1 开展评审怎样减少成本和提高质量
|
阶段 |
开展评审活动 |
没有评审活动 |
||||
|
总的缺陷 |
移除缺陷 |
成本 |
总的缺陷 |
移除缺陷 |
成本 |
|
|
需求规格说明 |
100 |
50 |
50 |
100 |
0 |
0 |
|
系统功能设计 |
195 |
97 |
194 |
270 |
0 |
0 |
|
系统技术设计 |
297 |
148 |
740 |
555 |
0 |
0 |
|
组件规格说明 |
424 |
211 |
2110 |
1033 |
0 |
0 |
|
编码 |
618 |
308 |
4620 |
1849 |
0 |
0 |
|
组件測试 |
329 |
164 |
3608 |
2793 |
1397 |
30724 |
|
集成測试 |
185 |
92 |
4600 |
1417 |
708 |
35414 |
|
系统測试 |
113 |
56 |
5600 |
728 |
364 |
36414 |
|
验收測试 |
77 |
38 |
19000 |
384 |
192 |
96035 |
|
部署 |
39 |
|
|
192 |
|
|
|
Total |
|
|
40522 |
|
|
198588 |
从上表中。能够清楚的看到:在软件开发生命周期的每一个阶段开展评审活动,并在測试阶段相同开展动态測试活动。其花费的总成本是40522。而假如仅仅在測试阶段开展动态測试活动,而没有在早期进行评审活动,其花费的总成本是198588。两者数据进行比較,能够发现开展评审活动之后减少的成本是很可观的。当然前期投入评审也是须要成本的,因此在採用评审作为主要静态測试手段的时候,測试策略须要平衡评审成本和收益。实现静态測试和动态測试的动态平衡。
开展评审活动能够非常好的提高产品质量,也是非常明显的。
在软件开发生命周期的早期开展评审活动,其遗留到客户现场的缺陷数目是39个,而没有开展评审活动,其遗留到客户现场的缺陷数目是192个。也就是说,通过在软件开发生命周期的早期进行评审活动,能够使得遗留到客户现场的缺陷数目大大减少,从而提高产品的质量。
SWTBOK測试实践系列(1) -- 測试在项眼下期的评审投入划算吗?的更多相关文章
- SWTBOK測试实践系列(4) -- 软件測试技术的黑白之道
白盒測试和黑盒測试往往是项目中最受争议的两种測试类型,每一个人偏爱各不同.现实生活中行业人员大多喜欢白盒測试而忽视黑盒測试,那么项目中又应该怎样平衡这两类測试呢?我们先来看两个案例. 案例一: 某移动 ...
- SWTBOK測试实践系列(5) -- 项目中使用手动和自己主动化的策略
手动測试和自己主动化測试永远是一个非常热门的话题.自己主动化也一直被人们捧上神坛.自己主动化測试和手动測试从技术上来说本质事实上都是測试用例设计.仅仅只是终于形式一个是人工运行,一个是代码运行罢了.这 ...
- atitit.jndi的架构与原理以及资源配置and单元測试实践
atitit.jndi的架构与原理以及资源配置and单元測试实践 1. jndi架构 1 2. jndi实现原理 3 3. jndi资源配置 3 3.1. resin <database> ...
- (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试
Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...
- Nagios学习实践系列——基本安装篇
开篇介绍 最近由于工作需要,学习研究了一下Nagios的安装.配置.使用,关于Nagios的介绍,可以参考我上篇随笔Nagios学习实践系列——产品介绍篇 实验环境 操作系统:Red Hat Ente ...
- Nagios学习实践系列——配置研究[监控当前服务器]
其实上篇Nagios学习实践系列——基本安装篇只是安装了Nagios基本组件,虽然能够打开主页,但是如果不配置相关配置文件文件,那么左边菜单很多页面都打不开,相当于只是一个空壳子.接下来,我们来学习研 ...
- 【转】RHadoop实践系列之二:RHadoop安装与使用
RHadoop实践系列之二:RHadoop安装与使用 RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析.Hadoop主要用来存储海量数据,R语言完成MapReduce 算法, ...
- 【转】RHadoop实践系列之一:Hadoop环境搭建
RHadoop实践系列之一:Hadoop环境搭建 RHadoop实践系列文章,包含了R语言与Hadoop结合进行海量数据分析.Hadoop主要用来存储海量数据,R语言完成MapReduce 算法,用来 ...
- ASP.NET Web API实践系列04,通过Route等特性设置路由
ASP.NET Web API路由,简单来说,就是把客户端请求映射到对应的Action上的过程.在"ASP.NET Web API实践系列03,路由模版, 路由惯例, 路由设置"一 ...
随机推荐
- 获取当前最上层controller
- (UIViewController *)topViewController { UIViewController *resultVC; resultVC = [self _topViewContr ...
- BZOJ 1927 最小费用流问题
From lydrainbowcat //By SiriusRen #include <queue> #include <cstdio> #include <cstrin ...
- Access-Control-Allow-Origin 如何设置多个值呢
需求就是多个网站请求同一个api服务器和这里一样https://segmentfault.com/q/10... 我不是做后端的,但是我们后端不知道怎么设置,在web.config里设置了一下 < ...
- 关于docker部署javaweb应用的问题
我做了两个镜像,一个mysql,一个tomcat.建完mysql容器之后,在建tomcat的时候用--link把他们链接起来了进tomcat的容器里面 /etc/hosts 也发现了mysql的ip但 ...
- OnClientClick知识+一个上传的例子
文件名:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp ...
- SSD-2(代码部分介绍)
single shot multibox detectior tensorflow 代码 一.SSD重要参数设置 在ssd_vgg_300.py文件中初始化重要的网络参数,主要有用于生成默认框的特征层 ...
- Python3 利用POP3与smtplib进行计算机远程控制
初习,代码有不足之处,欢迎指出. 跟大家分享的是,通过发送端发送cmd命令,从而对接收端进行cmd命令的控制. #接收端代码 from poplib import POP3 import time,o ...
- sql查询 按照规定的顺序返回结果集。
DECODE函数 oracle 独有,功能强大.相当于 if else if IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ..... ...
- caioj 1071 动态规划入门(二维一边推4:相似基因) (最长公共子序列拓展)
复制上一题总结 caioj 1069到1071 都是最长公共字序列的拓展,我总结出了一个模型,屡试不爽 (1) 字符串下标从1开始,因为0用来表示字符为空的情况,而不是第一个字符 (2) ...
- CF245H Queries for Number of Palindromes(回文树)
题意翻译 题目描述 给你一个字符串s由小写字母组成,有q组询问,每组询问给你两个数,l和r,问在字符串区间l到r的字串中,包含多少回文串. 输入格式 第1行,给出s,s的长度小于5000 第2行给出q ...