测试的基本概念
一、软件质量保证同软件测试的区别
软件质量保证(Software Quality Assurance):SQA介入于整个软件开发过程——监督和
改进过程,确认达成的标准和过程被正确的遵循,保证问题被发现和解决。它以预防
为主。
软件测试(Software Testing):软件测试是在一定控制的条件下,围绕一个系统或应用
的操作并且评价其结果(一个最简单的例子:如果用户使用硬件A,在应用接口B上做
了操作C,那么结果D应当出现),控制的条件应当包括正常和异常的条件。测试企图
使事情变得很糟糕,从而来检测出一些应当发生而没有发生,或者不应当发生而发生
的事情。测试以检测为主。
*关于如何安排QA和测试的任务时,不同的组织变化是很大的。有时它们可以有一个
组或个人来负责,共同的是一个项目组混合了测试人员和开发人员,并且他们一起紧
密的工作,而QA过程有项目经理来监督。所有这些是同组织的大小和商业结构有关
的。
二、软件中存在错误的来源
1、缺乏或者没有进行沟通,如对于一些我们应用程序中应当或者不应当实现的细节问
题。
2、软件复杂度——在当今的软件开发中,对于一些没有经验的人来说,软件复杂性
可能是难以理解的。图形化界面,客户/服务器和分布式的应用,数据通信,大规模的
关系数据库,应用程序的规模等指数般的增加了软件的复杂度。面向对象技术也有可
能增加软件复杂度,除非能够被很好的工程化。
3、编程错误——任何一个编程人员都可能产生错误。
4、不断变更的需求——用户可能不知道变更的影响,或者知道影响却还是需要进行
变更,这些会引起重新设计,工程的重新安排,对其它项目的影响,已完成的工作可
能不得不重做或推翻,硬件需求可能也会受到影响。如果存在许多小的变更或者任何
大的改动,由于项目中不同部分间可知和不可知的依赖关系,这样就会产生问题,跟
踪变更的复杂性也可能引入错误。项目开发人员的积极性也会受到打击。在一些快速
变化的商业环境下,不断变更的需求可能是一种残酷的事实。在这种情况下,管理人
员必须了解结果的风险,QA工程师和测试工程师必须适应和计划进行大规模的测试来
防止不可避免的BUG出现无法控制的局面。
5、时间的压力——软件项目的时间安排是最难的,通常是需要很多猜测的工作。当最
后期限来临的时候,错误也就伴随发生了。
6、人员的自大——我们经常会发现人们普遍喜欢说:
“没问题”
“很简单”
“我可以在几小时内解决那个问题”
“修改那些老代码应当是很简单的”
而不是说:
“那会增加很多复杂性,可能会导致很多错误”
“如果我们要做那个的话,我们将无能为力”
“我无法估计可能要多长时间,除非我能进一步进行观察和研究”
“我们无法搞清楚那些混乱的代码到底在做什么事情”
如果存在太多的“没问题”的话,问题也就产生了。
7、缺乏文档的代码——维护和修改很差的代码或缺乏文档的代码是很困难的。最终
结果将导致BUG的出现。
8、软件开发工具——视图工具,类库,编译器,脚本工具等等通常会把它们自身的
BUG 引入到你的项目中。