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