软件质量与软件测试

1 软件质量
质量保证一直是软件产业的重大课题。

据IDC预测,世界软件市场将有一个突飞猛进的发展,预计每年以13%左右的比例增长。软件应用领域越来越广泛,其质量的优劣也日益受到人们的重视。质量保证能力的强弱直接影响着软件业的发展与生存。那么,到底什么是软件质量呢?

软件质量是与软件产品满足明确或隐含需求的能力有关的特征和特性的总和(ISO 9126)。

我们可以从以下三个方面把握软件质量的概念:
1.软件需求是衡量软件质量的基础。如果开发出的软件与需求不一致,就谈不上软件的质量。

2.规定了的标准是软件开发必须遵循的准则,如果软件项目未能按标准开发,其质量必定是低劣的。

3.软件通常有着一些不作明文规定的隐含需求,例如,要求软件有较好的可维护性、易扩展性等。如果开发的软件已经满足了明文规定的需求,却没有满足隐含的需求,那么软件产品的质量仍然是有问题的。

软件的质量包括产品质量和过程质量,产品质量是文件、设计、代码和试验的属性,过程质量是指技术、工具、人员和组织机构方面的属性。提出过程质量是因为它有决定软件质量方面的作用,是为实际产品的生产建立一个必要的支持条件。不可能希望以不具备这个条件的

工艺过程开发出成功的高质量的软件产品。

2 软件测试
(1)软件测试的目的

软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。

软件工程的总目标是充分利用有限的人力和物力资源,高效率、高质量地完成软件开发项目。不足的测试势必使软件带着一些未揭露的隐藏错误投入运行,这将意味着更大的危险让用户承担。过度测试则会浪费许多宝贵的资源。到测试后期,即使找到了错误,然而付出了过高的代价。E.W.Dijkstra的一句名言说明了这一道理:“程序测试只能表明错误的存在,而不能表明错误不存在。”可见,测试是为了使软件中蕴涵的缺陷低于某一特定值,使产出、投入比达到最大。

(2)软件测试的基本过程

软件测试是一个极为复杂的过程。一个规范化的软件测试过程通常包括以下基本的测试活动:
拟定软件测试计划

编制软件测试大纲

确定软件测试环境

设计和生成测试用例

实施测试

生成软件测试报告

对整个测试过程进行有效的管理,实际上,软件测试过程与整个软件开发过程基本上是平行进行的,那些认为只有在软件开发完成以后才进行测试的观点是危险的。测试计划早在需求分

析阶段即应开始制定,其它相关工作,包括测试大纲的制定、测试数据的生成、测试工具的选择和开发等也应在测试阶段之前进行。充分的准备工作可以有效地克服测试的盲目性、缩短测试周期,提高测试效率,并且起到测试文档与开发文档互查的作用。

软件测试大纲是软件测试的依据。它明确详尽地规定了在测试中针对系统的每一项功能或特性所必须完成的基本测试项目和测试完成的标准。无论是自动测试还是手动测试,都必须满足测试大纲的要求。

测试环境是一个确定的,可以明确说明的条件,不同的测试环境可以得出对同一软件的不同测试结果,这正说明了测试并不完全是客观的行为,任何一个测试的结果都是建立在一定的测试环境之上的。没必要去创造一个尽可能好的测试环境,而只需一个满足要求的、公正一致的、稳定的、可以明确说明的条件。测试环境中最需明确说明的是测试人员的水平,包括专业的、计算机的、经验的能力以及与被测程序的关系,这种说明还要在评测人员对评测对象作出的判断的权值上有所体现。这一点要求测试机构建立测试人员库并对其参与测试的工作业绩不断做出评价。

一般而言,测试用例是指为实施一次测试而向被测系统提供的输入数据、操作或各种环境设置。测试用例控制着软件测试的执行过程,它是对测试大纲中每个测试项目的进一步实例化。已有许多著名的论著总结了设计测试用例的各种规则和策略。从工程实践的角度出发,应遵循以下几点:

1)要弄清软件的任务剖面,使测试用例具代表性;能够代表各种合理和不合理的、合法和非法的、边界和越界的,以及极限的输入数据、操作和环境设置等;

2)测试结果的可判定性:即测试执行结果的正确性是预先可判定的;

3)测试结果的可再现性:即对同样的测试用例,系统的执行结果应当是相同的。

3 软件测试工具
以往对应用系统大多采用手工调试的方法,或编制一些测试程序进行一下测试,既耗去大量时间又不规范。在将软件分发给用户使用时,常常发生问题,严重时致使系统瘫痪,这不仅无法收回最初的投资,而且造成巨大经济损失。据美国计算机市场分析调查权威机构Gartner Group统计,世界上仅有16.2%的应用系统较为完善和成功。可见,传统的手工测试已远远不能满足现实需求。企业及独立软件开发人员正在寻求能探测并改正错误的测试工具。

测试工作需要新一代科学的测试方法予以支持。这种科学的测试应是贯穿整个开发过程的。

据有关机构研究表明:在开发周期中,每推后一步实施错误检查,成本就会增加10%。因此,查找、修改错误的最佳开始时间是在项目设计阶段,之后伴随着开发过程的每一个环节,保证测试与开发同步进行。

由此可见,利用测试工具是确保软件质量的必要手段。

美国Rational公司的著名套装软件SQA Suite和PureAtria公司极具特色的Purify是测试工具中的佼佼者。

SQA Suite是美国优秀自动测试工具,它是针对Windows客户机/服务器环境中,用PowerBuilder、Visual Basic、SQL Windows、Delphi和Developer 2000等第四代语言开发的应用而研制的。目前占据着世界Windows自动测试市场65%的市场份额。

SQA Suite的各组件(SQA Manager、SQA Robot、SQA LoadTest)各司其职,又紧密集成,有效地完成了整个测试生命周期。

SQA Robot

利用SQA Robot能够创建、修改、运行自动测试程序,以确保软件在分发前达到要求的质量。该模块包含两种特殊技术:基于对象的录制技术和对象测试,以便对Windows应用程序进行对象级测试。

对象测试技术不仅使Robot能测试应用的GUI,还可以检测应用中对象的所有属性,包括手工不能测的不可视属性。例如,SQA Robot可测试由Powerbuilder的DataWindow生成的对数据库的SQL调用。

SQA LoadTest
SQA LoadTest是网络自动测试工具,对Windows Client/Server应用进行加载(load)、强化(stress)和多用户测试。

LoadTest可完成以下任务:
1)对TCP/IP、NetBIOS和IPX/SPX网络上的Client/Server应用进行加载、强化和多用户测试,确保应用的质量达到分发的水平。

2)在Windows NT、Windows95和Windows3.x平台上对32位和16位的应用进行跨Windows平台测试。

3)测试任何与Windows NT、Windows95、Windows3.x客户端相连的服务器(包括UNIX、Windows NT和OS2)。

4)无须编程,仅通过点击鼠标,即可生成Client/Server的多站点测试。

5)通过在执行测试时增加测试站点来改变系统的加载量。

6)在多台站点上同步运行复杂的多用户应用。

SQA Manager
它是软件开发和测试的信息管理工具,在软件开发、测试到升级的整个过程中,它都可以对测试信息进行跟踪。

利用SQA Manager可以完成以下工作:
1.制定测试计划;

2.跟踪有关测试执行的信息;

3.从发现到解决,对缺陷不断进行跟踪;

4.利用报表对整个软件测试进行管理。

总之,SQA Suite提供了一个比较完整的测试平台,以支持软件测试的各种基本活动,包括测试计划与测试大纲的制定、回归测试的自动化、测试结果的分析比较、软件问题报告的生成与自动分发和控制等。对于许多应用软件的开发无疑是个有力的测试支持工具。
Purify是原PureAtria公司(现已经与美国Rational公司合并,改名为美国Ratioal公司)于90年代初率先推出的专门用于检测程序中种种内存使用错误的软件工具。几乎所有使用过C语言开发软件的程序员都会有这样的体会,C语言中使用极为灵活的指针给程序员带来了很大便利,但同时也制造了许多的麻烦。由于指针使用不当而引起的错误通常是最难发现的,同时也是最难定位的一类错误。而Purify对多种常见的内存使用错误的检错能力和准确的定位,受到广大软件开发人员的青睐。

Purify可以自动识别出二十多种内存使用错误,包括:
未初始化的局部变量

未申请的内存

使用已释放的内存

数组越界

内存丢失

文件描述问题

栈溢出问题

栈结构边界错误等

在1997年初,原PureAtria公司陆续推出了其系列产品—Pure,包括支持内存检测的Purify,支持路径覆盖的PureCoverage,支持多线程应用程序性能测试的Quantify,以及用以提高测试期间连接编译被测程序效率的PureLink等。