基于模型的软件测试
作者:网络转载 发布时间:[ 2013/2/20 15:46:40 ] 推荐标签:
(3)模型机理。由于编程过程中,程序员具有较强的个体性,因此软件模型是多种多样的。通常软件中的故障主要来源于程序员,如错误的理解造成的、二义性造成的、疏忽造成的和遗漏造成的。如看下面的例子:
例1:某C/S结构、采用Delphi语言开发的数据库类软件,该软件大约30万行,分7个子系统、20个模块,测试结果如表1所示。
在该例子中,由疏忽造成的错误占错误总数的大约63%,如果不考虑测试引入的错误,则疏忽造成的错误占错误总数的大约80%。虽然单个软件的具有很强的个体性,但是,大量的测试数据统计分析可以发现有些软件模型是具有共性的,比如说内存泄露故障模型、非法指针引用故障模型。其实,导致程序员犯错的因素很多,有程序员本身的编程水平、习惯以及所属团队软件工程管理水平等,编程语言及其相关类库的有些难以理解的特性也是一个比较重要的原因。

2、软件模型分类
软件模型有很多,目前常用的有数百种。软件模型通常可以分为以下7类。
(1)故障模型。该类模型主要是会引起错误的常见软件模型, 应该尽量避免, 如内存泄漏故障 、使用空指针故障、数组越界故障、非法计算类故障、使用未初始化变量的故障、不完备的构造函数故障以及操作符异常故障等。
表2是对3197302行、美国生产的C++程序4类故障的测试结果。可以看出,该4类故障总的故障密度为0148/KLOC,也是说,大约2000行C++的代码有1个故障。

(2)安全漏洞模型。该类模型为他人攻击软件提供可能。而一旦软件被攻击成功,系统可能发生瘫痪,所造成的危害可能更大,因此,此类漏洞应当尽量避免,如:缓冲区溢出漏洞模型、被感染数据漏洞模型、竞争条件漏洞模型以及风险操作2随机数漏洞模型等。从所统计的数据来看,在上述所给出的故障类型中,其故障密度一般在1个故障/1~2 KLOC。因此,测试这些故障是很有价值的。
(3)差性能模型。该模型在软件动态运行时效率比较低下,因此建议采用更高效的代码来完成同样的功能。这类模型主要包括调用了不必要的基本类型包装类的构造方法、空字符串的比较、拷贝字符串、未声明为static 的内部类、参数为常数的数学方法、创建不必要的对象以及声明未使用的属性及方法等。
(4)并发故障模型。该模型主要是针对程序员对多线程的编码机制不十分了解,对各种同步的方法、Java存储器模型和Java 虚拟机的工作机制不是很清楚,而且由于线程启动的任意性和不确定性使用户无法确定所编写的代码具体何时执行而导致对公共区域的错误使用,如死锁等。

sales@spasvo.com