金字塔的5个点之间相连的8条边代表着测试要素之间的关系,这些要素之间的关系处理是否妥当,将显著影响测试工作的质量和效率。
这8组关系为如下所示。
1)质量与人员的关系。
2)质量与流程的关系。
3)质量与技术的关系。
4)质量与资源的关系。
5)人员与技术的关系。
6)人员与流程的关系。
7)技术与资源的关系。
8)流程与资源的关系。
下面就简单说明一下这些关系的内涵,以及如何处理它们之间的关系(参见图1-1)。
质量需要组织中的全员负责,每个人的行为都能对软件产品质量有直接的影响,每个人都应树立积极的态度,做正确的事,对软件产品质量的提高贡献自己的力量。
借助流程避免或减少人为的错误,借助流程可以督促人们在正确的时间做正确的事,甚至基于已有的良好流程迫使流程自身的优化,持续改进。所以,基于流程的质量改进是相对可靠、稳定的,基于流程的质量改进是可持续发展的。
有些流程的实施需要技术的支撑,例如,将流程融入软件项目管理系统,就可以看做:借助技术,流程被固化在某个信息系统中,这样流程的执行更加可靠。例如,要求所有的代码在检入(check in)前都需要进行代码评审,如果没有评审,就不能检入。如果流程仅写在纸上,其执行比较困难,有的人在代码没有评审的情况下可以偷偷检入代码。但是,如果开发一个辅助代码评审的系统(如Review Board、JCR等),并将这个系统和源代码配置系统(如CVS、SubVersion等)集成起来,代码没评审就根本无法检入代码。这就是从技术上解决流程的执行问题,使流程执行不流于形式,从这个角度保证质量。除此之外,基于技术能力,可以开发代码安全性检查工具、代码规范符合性扫描工具等,更彻底地确保代码的质量。从这个意义上看,技术完全可以服务于质量,并能更好地保证质量,或使质量保证工作能事半功倍。
质量保证是需要成本的,从这个角度看,质量的提高需要更多的资源。可以说,质量和资源是成正比的,资源不足会降低质量,而资源充足可以改进质量。质量与资源的关系是被动的,最终取决于人、流程和技术。例如,服务器资源不够时,可以通过虚拟技术来增加逻辑服务器,满足测试的需要。
软件测试人员隶属于研发团队,在工程师范畴内,因是技术人员,故以技术为本。软件测试人员作为用户代表,虽然更多的是站在用户的角度去看问题,去测试产品,但还是要靠技术武装自己。因为,要完成测试任务,无论是测试环境设置,还是测试工具及其脚本开发、性能测试、可靠性测试等,都需要技术,包括系统部署技术、网络技术、编程技术等。没有技术,很难和开发人员进行有效沟通,甚至因无法进行对话而得不到开发人员的尊重。
有了技术,便能理解系统架构设计和系统实现,就可以更有针对性地进行测试,做到事半功倍。另外,也只有掌握编程技术,才能参加代码评审,接受敏捷方法的挑战。因此,作为工程师,技术能力可体现自身价值,是未来发展的基础。
树挪死、人挪活,流程是死的,人是活的。人发现流程有问题,就需要做出调整,对流程进行修改。流程是人开发出来的,流程是为人服务的,而不是人为流程服务。但同时,我们也要认识到,流程是多数人甚至是组织的全部人员达成一致意见的结果,是一种约定,在流程没有改变之前,人们要遵守流程。作为个体,人要遵守流程,而作为人的整体,当流程不适应组织的变化时,就要服从组织、服从人的整体。
技术与资源相辅相成,技术的发展需要资源的支撑,而技术发展以后,又可以反过来优化资源,减少资源的需求。如果技术和资源之间的关系建立在这样和谐的良性循环基础上,对企业、对产品都有利;反过来,当技术和资源之间的关系始终处在激烈的矛盾之中,那它们不利于软件测试,不利于软件产品的开发,一定会阻碍企业的发展。
流程与资源的关系,和技术与资源的关系类似,也是相辅相成的关系。流程需要资源支持,资源为流程服务;同时,流程可以帮助我们更好地管理资源,充分地利用资源。