在过去半个世纪,软件获得了空前的发展,逐渐渗透到各个领域,从最早的科学计算、文字处理、数据库管理、银行业务处理到工业自动控制和生产、办公自动化、新闻媒体、通信、汽车、消费电子、娱乐等等,软件无处不在,改变了人类生活与生产方式。随着计算机软件在各行各业的普及应用,人们对软件质量的要求也越来越高,专业化和多样化的特点越来越显著。但同时,我们看到软件产业还不够成熟,软件质量状况不容乐观,软件在运行和使用过程中出现的问题还比较多。例如,2008年互联网web发展十大失败的事件中,其中90%的失败都是由质量问题造成的,与“宕机”、“停机”、“崩溃”等一系列严重的质量问题联系在一起。
软件质量一直是软件工程中的一个焦点,成为人们几十年来不断研究、探索的领域。为了改善软件质量,人们不仅从企业文化、软件过程模型、需求工程、设计模式等不同方面来获取有效的方法和最佳的实践,而且开始重视软件测试、在软件测试上有更多的考虑和投入。虽然质量是内建的,但软件测试依旧承担着非常重要的作用。软件测试自身也在发生变化,已经不再只充当门卫——在软件发布之前进行检验,而是正在成为一个持续的反馈机制,贯穿软件开发的整个过程,尽早地发现问题,降低开发成本,提高软件开发生产力。软件测试人员不再是软件开发的辅助人员,而是软件开发团队的主体之一、积极的参与者。从项目开始的第一天,测试人员就参与项目需求和设计的讨论、评审等各种活动,尽早发现软件需求定义和设计实现上的问题,及时发现软件项目中存在的质量风险。软件开发团队必须尽可能地在交付产品之前控制未来的质量风险,这就必然需要依赖于卓有成效的软件测试。将传统的程序测试的狭义概念扩展到今日业界逐渐认可的、广义的软件测试概念,测试涵盖了需求验证(评审)、设计验证(评审)等活动。软件测试贯穿整个软件生命周期,从需求评审、设计评审开始,就介入到软件产品的开发活动或软件项目实施中,和其它开发团队相互协作、相互补充,构成软件生命周期中的有机整体。
作为一名优秀的测试工程师,首先要对测试工作有兴趣:测试工作很多时候都是显得有些枯燥的,因此热爱测试工作,才更容易做好测试工作。因此,除了具有前面的专业技能和行业知识外,测试人员应该具有一些基本的个人素养,即下面的“五心”:
专心:主要指测试人员在执行测试任务的时候要专心,不可一心二用。经验表明,高度集中精神不但能够提高效率,还能发现更多的软件缺陷,业绩最棒的往往是团队中做事精力最集中的那些成员。
细心:主要指执行测试工作时候要细心,认真执行测试,不可以忽略一些细节。某些缺陷如果不细心很难发现,例如一些界面的样式、文字等。
耐心:很多测试工作有时候显得非常枯燥,需要很大的耐心才可以做好。如果比较浮躁,就不会做到“专心”和“细心”,这将让很多软件缺陷从你眼前逃过。
担心:担心是做好工作必备的素质之一,测试工程师更应该将其发扬光大。如果测试中没有尽到责任,不去考虑其他事情,不去担心测试,甚至敷衍了事,这将会把测试工作交给用户来完成,很可能引起非常严重的后果。
信心:自信心是现在多数测试工程师都缺少的一项素质,尤其在面对需要编写测试代码等工作的时候,往往认为自己做不到。要想获得更好的职业发展,测试工程师们应该努力学习,建立能“解决一切测试问题”的信心。
“五心”只是做好测试工作的基本要求,测试人员应该具有的素质还很多。例如测试人员不但要具有团队合作精神,而且应该学会宽容待人,学会去理解“开发人员”,同时要尊重开发人员的劳动成果——开发出来的产品。
一名优秀的测试人员所具备的不仅要做到“五心”还要具有:
测试的兴趣:测试的工作相对来说比较枯燥,如果没有兴趣会很快乏味;
个人的性格:测试的工作需要耐心、细心、恒心的去对待工作;
测试的好奇:好奇心是探索问题的根本,好奇能让bug无所隐形;
测试的成就:每当一个Bug生命周期的介绍那份终结者的成就是可替代的;
测试的态度:测试是一个bug的寻找过程,必须认真并且严谨;
测试的责任:测试是一个产品质量的好坏的评判标准;
软件测试不是一项简单的工作,远比人们所直观想象的要复杂。高效、高质量地完成一个软件系统的测试,涉及的因素很多,也会碰到各种各样的问题,并且要在测试效率和测试风险之间找到最佳平衡点和有效的测试策略,这些都需要测试人员一一克服。要做好软件测试,不仅需要站在客户的角度思考问题,真正理解客户的需求,具有良好的分析能力和创造性的思维能力,完成功能测试和用户界面的测试,而且能理解软件系统的实现机理和各种使用场景,具有扎实的技术功底,通过测试工具完成相应的性能测试、安全性测试、兼容性测试和可靠性测试等更具挑战性的任务。软件测试主要目的是发现软件中的缺陷,坚持“质量第一”的原则,在实际操作中会遇到一些阻力,需要测试人员去克服。从这些角度看,要成为一个优秀的测试工程师,其实比对设计、编程人员的要求还要高,不仅要体现高超的技术能力,如系统平台设置、架构设计分析、编程等方面的能力,而且要展示自己的业务分析能力、对客户需求的理解能力和团队沟通协作的能力。