|
朋友的一篇译文,觉得无论是新手还是老鸟都会从中有所收获,推荐给大家。
liulichuan.cn 翻译自微软一位培训经理 William Rollison 的文章
软件测试曾在商业软件领域被认为是一种事后的亡羊补牢。初级的产品经理甚至开发人员认为软件测试是任何人都可以从事的工作。一些关于软件测试的书籍甚至冠以“艺术”、“手艺”之类的名字。这导致软件行业的某些读者误认为质量测试不是软件工程的一个学科。相反,通过缺陷鉴别,错误预防和合理风险分析的实测报告,有效的测试不仅是一门工程的学科,而且是提升软件质量和可靠性的关键部分。
测试的创造力
尽管一些人认为测试软件是一名艺术,这么说也只是因为测试和工艺品同样具有创造性。然而,没有工艺品需要软件测试过程中需要的数学基础和逻辑能力。
对于一个大规模的计算机程序,测试需要比设计程序更多的创造力。这个观点一直存在争议。Glenford J. Myers 在《软件测试的艺术》支持了这个理论。他指出“测试是极度富有想象力和高智力的有挑战性的工作”。实际上,很多既设计又开发软件的人承认他们通过创造力的软件测试发现更多美学上的满足感。但是,跟创造力差不多,软件测试绝不是一门艺术或者一门手艺。
测试的哲学观点
有史以来,人类早已通过怀疑工具和流程的设计参与了各种形式的测试工作。这种持续的重估值导致了质量的提高和效率的重大提升。但是,基于反复试验的测试是非常艰苦和耗时的。
1962年,哲学家Sir Karl Popper提出知识增长来自于更科学的方法和流程。在他的书《猜错与反驳》中,Popper假设减少伪事物促成了科学的进步。本质上,进步是将科学理论(猜错)转化为可测试的假设(反驳)实现。
测试是一门科学
计算机软件与科学假设类似;两者都固有易错性。软件调试过程的基本框架类似于科学假设的试验和错误实践。因此,计算机软件是简单的技术推测。
测试工程师通过严格的测试(主要用于证明缺陷存在)反驳无缺陷软件的假设。这种“造假”的过程和数据驱动的方法(例如归纳和推理)形成鲜明的对照。数据驱动通过事实的重复来证明正确性。
这些方式都是通过确认来支持论断。通过使用特殊数据验证功能正常来证实不确定的无差错。这种方式仅能证明软件功能在某种情况下功能正常;它并不能证明软件无差错。
建立软件的信心
建立软件可靠的信心的最佳途径是在设计或者功能方面发现缺陷,而不是仅仅证明一个软件在产品需求的范畴内能够工作。
可是,任何假设可以经受住无数小时的彻底测试,却仍然存在错误。驳斥不能保证无缺陷的软件,因为在一定量的时间里,有太多的假设需要测试。 William Hetzel 在《软件测试完全指南》中解释了彻底测试的无效性。他写道“一个有70个分支的程序包含的测试用例超过你用茶勺去衡量太平洋的水。”
当一个测试人员成功地反驳一个软件(发现一个bug),他报告一个缺陷。开发人员然后解决这个问题并假设该软件能正常运行,反驳的过程再次重复执行。尽管测试永远不能证明软件没有缺陷,发现错误能突出问题,最终导致更高的软件可靠性和质量,或者对风险分析和降低提供一个基本的考量。
测试人员真正做什么
当我们让测试工程师描述他们的工作的时候,大多数的反应是“破坏软件(Breaking software)”。也许这就是为什么一些人错误地认为测试人员的工作就是破坏的过程。其实,测试人员并不真正“破坏”软件。测试人员通过观察测试的结果,逻辑推测和实验,反驳或者伪造假设来暴露早已存在的错误。
发现错误只是软件测试的一个方面。测试工程师通过这几个方面使得在开发过程有重要的价值:验证软件,发现软件的错误,对开发人员提供信息避免bug,提供信息给管理人员来评估风险,并且最重要的,扮演一个客户拥护者的角色。
但是,在软件中发现隐藏很深的错误或许是这份工作对智力的最高挑战,需要有很强创造力的人才能胜任。或许这就是为什么测试人员在经过富有创造力的攻击测试,发现一个隐藏很深的错误之后流露出的兴奋,他成功地“破坏了软件”! |
|