测试和除错
测试和除错是两个不同的概念,测试只是检测出错误,而除错才是将错误修正的过程;测试在先,除错在后。
===================
一个人进行测试和除错的过程
1、进行测试
2、发现问题。在发现问题中,很重要的一点,就是该问题(缺陷)是可重复的。
3、定位问题(缺陷)。即找到代码中出现缺陷的位置以便将来进行修复
4、确定重要性。这个重要性,至少可以从两个方面进行考虑。第一方面,不同问题做对比,一定有重要性更高的问题;第二方面,问题自身做对比,修复这个问题的可能性和可能产生新的风险的可能性做对比。
5、进行修改,改变代码以去除问题
6、解决问题。尝试去除或绕过障碍来让软件完成应该完成的工作。
7、通过测试进行学习。通过测试进行学习,这是一项基本的技能。
如果是一个人,他通过测试来发现、查明问题、定位、确定重要性、修改、解决问题以及通过测试来学习等多项活动之间进行转换。只要他一直给用户提供服务,那么他在某个特定的时间到底是在进行哪一项活动并不重要。
===================
大型机构中进行测试和除错
不过,在具有专门测试人员或客户支持人员的大型机构里,混淆通过测试来发现、查明问题、定位、确定重要性、修改、解决问题,以及通过测试来学习等多项活动的区别会导致冲突、抱怨和项目失败。
有些时候,查明缺陷是测试团队的工作,某些时候则不是。更为常见的是,没有人明确指定由谁来负责查明缺陷。测试人员认为他们的工作是测试(发现问题),而开发人员认为测试人员的工作是为开发提供支持――对开发人员而言,意味着测试和查明缺陷,有时甚至还包括定位缺陷和确定重要性,甚至还包括去倒咖啡。
===================
以时间限制试探法作为管理法则,但根据需要进行调整
有一条试探法扼要地说明了确定谁应花多长时间做哪项工作的原则:项目中没有人可以随意浪费任何人的时间。时间限制原则是试探性的,而不是严格的规则。
有些测试团队通过设置专门的缺陷调查员来节约开发人员的时间,他们可以帮助处理那些几分钟内无法确定的缺陷。该原则的另一个应用是不要浪费时间来做非常细微的区分。例如,在发现和查明缺陷之间并没有一个很清晰的界限,这种情况随处可见。不要浪费时间争论特定的活动是否属于查明问题,而是让测试人员和开发人员都投入进来共同完成工作。
===================
信息免疫
错误不会因为反复传播而变成事实,事实也不会由于没有人发现而变成错误。
虽然测试的目的是提供信息,但大家常常会将这些信息看成某种威胁。例如,项目经理:“有这么多的缺陷,我会没法达到原定的进度计划”。
我们在害怕的时候,通常会进行防卫。我们有很多防卫的方法,其中一种失效了就会尝试另一种。我们不是总能克服自己的恐惧或者驱散它的影响,但是在我们觉得受到威胁的时候,本能地就会采取防卫措施。人类在构建防卫措施的问题上具有无穷的创造性。心理学家将这些防卫措施分成了六个类别。压抑、合理化、投射、转换、过度补偿和强迫。
1、压抑就是不承认或者忽略我们认为无法接受的想法、感觉和记忆。压抑行为的一个众所周知的象征就是鸵鸟把自己的脑袋埋到沙子里面:“如果我看不见,那就不存在。”
2、合理化就是试图让没有意义的、愚蠢的或者是无理的举动看上去合法。例如,一名开发人员在声称“我在程序中留下错误就是为了检测测试人员是否工作得很好”时就是在进行合理化。
3、负面的投射,就是批评其他人具有我们自己身上也有的某种并不希望有的品质。例如,你的程序要让用户等待好几分钟才能响应,用户向你反映情况,而你却回答:“你和其他用户需要学会保持耐心,你们应该对应用程序可以做的大量工作感到赞赏”
4、转移就是指责并非问题真正来源的人或事,从而免除我们自己的责任。例如,“我的铅笔断了,所以我没法完成家庭作业。”
5、过度补偿就是为了弥补某些真实的或者是想象的个人不足而做得过了头。例如,用户向你问了10个问题,你回复了9个;当用户说你遗忘了一个问题,你居然将1000页的文档发给了用户让他找答案。
6、强迫就是无法摆脱某种负面的行为模式。