测试方式中普遍存在的问题与点评
谈到测试,我们无法回避的是当前软件过程普遍存在的测试问题:
传统的项目测试还是以手工为主,测试人员根据需求规格说明书的要求,与测试对象进行“人机对话”。随着软件业的不断发展及软件规模的扩大,这种测试的弊端日益明显:
· 大量的手工使项目人力成本、沟通成本居高不下;
· 人工操作的低效率使项目耗时增加,带来进度风险;
· 人员素质及其他不确定因素会影响手工测试的结果,导致差错率的增加。
· 在测试过程中,需要对测试案例库进行统一配置管理,项目规模的激增使手工管理案例库的难度日益加大,尤其是在需求变更、回归测试频繁发生的时候。
从古到今,当生产率阻碍了生产力的发展的时候,必然会引入更高级的生产工具及方式。项目测试也是这个道理,引入工具,引入自动化测试及管理,是项目测试的一大趋势。
2、 缺乏文档测试、检查
文档是项目的重要产品之一,产品需求、功能分析、架构设计、详细设计、用户手册、维护手册等等,对于项目的测试、上线、维护等过程起到至关重要的参考、指导作用,所以它们的质量应该是项目重点关注点之一。令人遗憾的是,许多软件项目对于文档的重视只停留在口头上,“编码第一”的观念似乎根深蒂固。
随着需求不断变更、补充,业务、技术人员忙于应付,无法腾出精力来进行文档内容的修改及完善,往往是将包含需求变更内容的工作联系单往需求文档后一附了事,而不去更新需求与其他相关文档;另一方面,项目变更管理还不够完善,管理重点往往集中于开发,而轻视文档质量管理,未留出充分的文档更新时间,导致文档更新严重滞后于编码进度。为保证文档质量,必须定期进行文档测试,但测试要花成本,项目高层不愿意付此代价。
文档若可读性低,便会影响用户的理解;若与编码不一致,便起不到参考作用,编码测试就没有可靠的测试依据。路都看不清楚,怎么往前走呀?所以,强烈建议进行文档测试,并将其置于测试管理的首位。
当前文档测试的方法没有什么特别的形式,还缺乏测试工具支持,通常是通过静态审查方式――“走查”来进行的,主要查看文档的可读性,内容真实性、可靠性、全面性。另外,在项目里程碑时期召集相关领域专家对重要文档进行集中审核,也是一种检查方式。
3、 单元测试应引入交叉测试方法
单元测试是对软件基本组成单元进行的测试,测试对象是软件模块。通常,单元测试是由开发人员来完成,而且往往是各人测各人的。这存在问题隐患。
为什么呢,技术人员是软件模块的制造者,自己来测自己的软件的话,角色便从制造者变成了审查者,而前一个角色的目的是为了保证软件正确,后一个角色的目的是为了发现更多的缺陷,让一个人同时来扮演两种目的不同的角色,好比让他既当裁判员又当运动员,怎么能做好呢?
解决方法通常有两种,一种是:由测试人员来进行单元测试,这种方式要求测试人员要有较高的软件技术知识;另一种是:将软件人员分组,在模块开发告一段落时进行交叉测试,这种方法只需要测试者了解被测方的软件需求,不需要另外的知识培训,而且测试出发点较为客观,所以被较普遍的推广使用。
4、 测试在开发基本完成才启动
在传统的瀑布型开发模式中,软件测试位于编码阶段之后,是作为一个独立阶段存在的,许多人便一刀切地认为应该将所有的测试工作在编码完成后再开始。这个观点要不得,原因有二:
首先,若将测试工作细分,有许多工作是可以提前先期执行的,如:需求书与设计书的学习、测试计划的制定、测试人员的培训、测试脚本的建立、测试资源的搭建、测试模板的创建、测试工具的选择等等,都是可以与其他阶段并行处理的,这将大大缩短项目开发时间,为测试提供充分的时间保障,提高测试质量。
其次,软件缺陷发现的越晚,修改、补救所耗费的成本越高。引用Boehm在《Software Engineering Economics》一书中的话――“平均而言,如果在需求阶段修证一个错误的代价是1,那么,在设计阶段就是它的3-6倍,在编程阶段是它的10倍,在内部测试阶段是它的20—40倍,在外部测试阶段是它的30-70倍,而到了产品发布出去时,这个数字就是40-1000倍。”由此可见,测试目标的最佳定位应该是:在错误第一次出现的时候就捕捉到它。所以,在尽可能的情况下,测试越早展开越好。
在项目的各个进行阶段,都有不同的项目产品产生,他们质量的好坏,对后续开发影响重大,所以,现在国际上比较流行的做法是:将测试融合到各个开发环节中去,尽早测试。
5、 测试案例、测试方案的重用率低下
传统的测试过程,测试管理不严密,测试人员未建立完整的测试库,未将测试案例、测试程序、测试方案进行有效保存,等到回归测试时,相关测试程序等往往已不知所终,无处可寻了;即使能找到这些程序、案例,可往往因为回归测试过于频繁、项目期限日益迫近,已经没有时间余量来修改、完善这些程序及案例,只能凭借经验、记忆及技术人员的口述对程序修改过的地方草草重测一遍而已,缺乏正规化的测试过程,造成测试的虎头蛇尾。