曾经对软件测试很轻视,因为我那时很无知,只是一名普通的中国程序员,这也是那时绝大多数程序员的心态,那时中国程序员最讲究“编程才是硬道理”。
如今却非常热爱软件测试,包括软件测试工具,方法,理论,技术。因为我在3年的测试工作中,深刻体会到软件测试的重要性和趣味性。此时,我已经跳出了“小程序员”的圈子,以软件系统工程的更大视角审视软件测试这项工作。
很长时间以来我一直被下面的问题而困惑,有些问题至今仍然只是具有肤浅的认识,而且,我感觉我做的测试项目越多,阅读的测试书籍越多,我越感到我对软件测试理解的越肤浅。因为我越来越感受到软件测试的广度和深度的无限性,它像大海宽广,像宇宙那样深邃。为什么要进行软件测试?软件测试的前途如何?软件测试的工具和思想谁更重要?软件测试的最高境界是什么?
软件测试是保证软件质量的重要活动,是软件项目实施的不可缺少的环节。软件测试的直接目的是发现软件中存在的缺陷。此为测试的有效性。
在软件项目没有结束之前的全部软件缺陷主要由软件开发人员负责,因为软件缺陷来自程序员的编程。软件项目结束后的软件缺陷主要由软件测试人员负责,因为软件测试人员没有在软件发布之前的测试中没有发现隐藏的错误。但这不是绝对的,因为软件项目是一个系统工程,软件质量牵扯到多个部门和人员,以及需求分析,设计,编码等各个环节和过程。软件测试只能证明软件存在缺陷,不能保证软件没有错误。
软件测试不是万能的,因为不可能发现全部的软件缺陷,而且软件的功能和性能不是由测试决定的。此为测试的有限性。
软件测试目前主要以手工测试为主,自动测试工具虽然很多,但实际应用的广度和深度还有很大潜力,自动将有很大的发展空间!。
软件驱动开发的观点说明了测试与编程的关系,测试应该贯穿于软件开发的整个生命周期,编程只是软件开发的一个环节。但往往大家非常重视软件编程,把测试作为编程后的一个辅助环节。这是典型的本末倒置。软件测试的缺陷管理流程非常重要,报告的软件缺陷的质量,应该由他人验证,做到责任明确,方法简便可行。
软件测试技术不断进步,但总体来看,国内的测试重视程度还不够,但已经发展很快。差不多两年之前,国内计算机书店中关于软件测试的书籍非常稀少,如今却琳琅满目,异彩纷呈。
软件测试是个可以很快入门的职业,门槛不高,但是,不要认为什么人都可以做好软件测试。因为会做和做好是两个概念。软件测试人员最好具有软件开发经验,理解软件工程的知识。这是提高软件测试能力的基础。对于刚刚毕业的学生,如果希望今后从事软件开发,那么,先从事一段时间的测试可能更有利于今后的编程。而对于具有多年编程经验的程序员,如果改行做测试,更容易提高技术。 软件测试不是孤立的活动或过程,需要开发和市场人员的参与和交流,需要软件质量保证人员SQA的积极配合和沟通。
软件测试的技术不断进步,与具体测试技术相比,掌握测试的核心思想比具体技术更重要!测试的最高境界在于运用最简单有效的测试技术,最大限度的发现软件缺陷!
应当承认,目前国内的软件测试工程师的地位和待遇仍然很低,而且不少测试人员存在浮躁的心态(我甚至感到整个软件行业始终存在着浮躁的泡沫)。如何改变这种局面,这应该是个漫长的过程。当整个IT业真正以客户为上帝时,当软件质量成为决定企业生存和发展的决定因素时,当软件测试工程师的测试工作给软件企业带来更大的经济效益时,软件测试工程师才会得到应有的尊重!
软件开发是一项复杂的、创造性的协作式游戏。作为游戏它自然存在着乐趣,所以程序员们才会乐此不疲,前仆后继。首先、这种快乐源于一种创造事物的快乐。其次、这种快乐来自于一种开发出对别人有用的东西时所带来的满足感。第三、快乐源自开发过程中,亲眼看到软件按自己预先设想的那种效果运行时所带来的迷人魅力。第四、快乐源自开发过程中持续学习的快乐。最后、快乐源自开发过程中,我们能象诗人一样,仅凭自己的想像,来建造自己的城堡时带来的快乐。编程的快乐在于它不仅满足了我们内心深处进行创建的渴望,而且还唤醒了每个人内心的情感。不幸的是,同样作为游戏它也有苦恼的一面:首先、苦恼来自追求完美主义。其次、苦恼来自总是由他人来设定目标、供给资源、提供信息。第三、苦恼来自于寻找琐碎的BUG却是一项枯燥的、重复性的活动。第四、人们通常希望在项目接近结束时,能收敛得快一些,然而,情况却是越接近完成,收敛得越慢。最后、苦恼来自当投入大量的辛苦劳动后,产品发布时却面临着陈旧过时的危险。作为软件开发者,我们别无选择,只有适应它们,就这样痛并快乐着地面对每一天。
来自领导的信息只有25%被下级知道并正确理解,从下到上的反馈信息不超过10%,平等交流的信息则可达到90%以上。平等造就信任,信任增进交流。有效地进行适当的意见交流,对一个组织的气候和生产力会产生有益和积极的影响。使顾客满意并和他们面对面地交流,才是蠃得市场的关键。
管理是一种控制性游戏,在游戏面前,你只有二种选择:或者,你确信自己能蠃,于是投入足够多的能量来蠃得一切;或者,你不进行这个游戏,放弃它。然而,作为软件项目管理者,你也应该知道,早投入、高风险才会有高回报。逃避风险是致命的,因为这也会让你得不到与风险同在的利益,久而久之,你就会面临着被市场淘汰的危险。风险是"遭受损失的可能性",由条件、结果以及周围的环境构成。风险和问题的区别在于:风险是尚未发生的问题,而问题是业也成真的风险,昨天的风险可能会是今天的问题。风险管理主要包括下面几个方面:
第一、风险识别:
从头脑想像中抽取出各种风险并加以筛选,再加上在整个开发过程中,保持持续不断的风险发现机制,以发现新的风险。
第二、风险分析:
对风险出现的可能性和潜在的危害性进行量化分析。
第三、应急计划:
如果识别出的风险真的出现,你将采取的应急措施。
第四、风险缓解:
为了使应急计划得以有效实施,必须在风险转化为真之前所采取的措施。
第五、持续的监控:
跟踪需要管理的风险,寻找风险出现的迹象。
项目面临的某些风险可能是致命的,发生时会使项目严重滞后或直接废弃。这类风险是最需要管理的,但有效的管理它们也许会使你与你的上级发生冲突(如时间上最后期限等),对于这类风险往往超出了你的管理权限,可以先将它们列为项目假定风险,然后把它们转交给上级来管理。风险可能出自技术、政治、经济、资源或其它各个方面,几乎无所不在,并且会对项目开发、市场占有率或是达到项目目标(如进度、预算、质量等)造成灾难性后果。但在所有软件项目中,通常会共存五大核心风险,分别如下:
第一、缺乏合理的进度安排
这是导致项目滞后的最主要的原因。
首先、它源于开发人员们普遍存在的乐观主义精神,我们总是期待在实现过程中不会碰到困难,然而我们的构思是有缺陷的,因此总会发现BUG。
第二.它源于一种错误的认识,人员数量和开发时间是可以互换的,既投入两倍的人数会在一半时间内完成开发工作。然而,这种理论却忽略了随着人数的增加,相应的也会增加新人培训和人们相互交流所需的负担,另外,还有任务重新分配所造成工作中断带来的负担,正如Alistair Cockburn所说:"最有效的交流方式是面对面的交流"当3、5个人的时候很容易做到这种交流方式,随着人数的增长,再也很难做到这种交流方式。交流成本的增加与培训新人所需时间成本的增加、以及任务重分配导致工作中断成本的增加,直接导致一种结果:向进度落后的项目中增加人手,只会使进度更加落后。
第三、源于空泛的估算,管理人员特别是高层管理人员为了满足顾客期望的日期而造成的不合理进度安排。如果分配的时间一开始就不够,不管高层领导威胁有多么吓人,工作也无法按时完成,如果人们察觉到管理者可能滥用权力来惩罚自己,他们就会感觉到威胁,没有安全感。安全感的缺乏会让人们反对变化,而在所有成功项目中,变化是唯一不变的要素之一,除非感到安全,否则人们就不会去迎接变化,只会按部就班,这样往往丧失了很多走捷径的好机会,而这些机会原可以大大缩减时间进度的。第四、如果你没有认真估算产品规模,那么你预计的进度就是空中楼阁,唯一的依据只是你的希望。在估计产品规模时,除了正常的时间计算以外,不但应该将"可能需要做"的事情所需工作时间加上,还要将某些"可能不需要做"的事情所需工作时间加上。项目的超期不应归咎于开发者的低效率。