http://www.51testing.com/html/72/n-223772.html
软件测试人员的工作之一就是查找Bug,找出软件中的Bug,除了需要“火眼金睛”般的能力外,也需要对Bug了如指掌,对此,51CTO专访了中国软件评测中心军工测试部副总经理李亚伟老师,来听一听他对Bug的理解。
Q:Bug大都出现在程序员的编码过程中。测试人员工作之一就是找出Bug,面对那些难以被人发现的Bug,测试人员通常会采取哪些手段?以您的经验,对广大测试人员有什么好的建议?对于开发人员,您有什么建议让他们减少Bug的产生?
李亚伟老师:是否能充分发现软件的Bug,首先软件测试管理过程很重要,其次是测试人员的技术基础和经验等。
手段之一是严谨的过程管理。比如你必须遵行规范的测试管理过程,首先进行测试需求分析,充分了解测试范围和测试内容,然后经过评审,这一个过程会避免测试人员对测试需求的理解错误,遗漏测试内容。其次进行软件测试用例的设计,明确对每一项测试怎样进行测试,包括选择什么样的测试工具,操作流程和输入数据等,同样经过评审。
这一过程可以避免测试人员选择工具错误,操作或输入数据错误,遗漏测试内容等。第三个阶段是执行测试,测试最好纪录详细测试结果,在什么样的输入情况下产生什么结果,仔细比对软件开发需求,确定软件是否发现问题。测试执行完毕后,也需要进行评审,主要检测测试是否进行充分,记录是否准确,软件问题提出正确的。
手段之二就是技术保障。技术关键就是怎么样设计一个更好更全面的测试用例,从而保证测试的充分性和正确性。设计好的测试用例要保证两个方面,一是你的技术基础,二是业务也就是软件需求。你只有在非常了解软件开发需求的情况下,进一步了解软件的设计,基于这些,结合你的技术基础和经验,采用合适的测试工具、设计合理的输入数据和操作流程,才能保证测试的充分性。
测试过程中我们也常常凭借测试工具来发现更多的问题,比如说代码规则检查、代码逻辑测试、代码质量度量、性能测试、安全性测试、强度测试等等。使用工具前提是你得知道在什么样的情况下选择什么样的工具,其次会使用测试工具,凭借你的技术基础和经验制造测试场景和测试数据,同时会分析测试结果,从测试结果中寻找蛛丝马迹。有时候商业或者通用的测试工具不适用的情况下,也可针对测试需求开发相应的测试工具。
对于开发人员,减少Bug的产生,同样需要从管理和技术方面来要求。众所周知,开发过程越规范,软件出现问题的可能性更少;其次技术越好,经验越丰富,出现问题的可能性也更少。这些是大道理,但是得承认它是正确的。不管怎么样,我认为以下几个方面对开发人员提高软件质量,减少Bug的产生很重要:
1.尽可能了解用户需求,从而转化为软件需求,组织用户进行需求评审。重点强调的是软件开发需求,不仅仅是描述用户需要完成什么功能指标和性能指标,而是要转化为软件开发必须界面要求、数据元素要求、业务操作流程要求等。因需求不明确、业务流程不清晰、软件需求规格说明不细致等导致软件问题太常见了。
2.进行充分的设计,并经过评审,集合项目组的经验和智慧,对软件的架构、数据结构、逻辑处理流程等进行充分论证。个人的经验和智慧是有限的,经过评审或者小组讨论,往往使你思路更清晰,少走错误路线或者弯路。
3.编码遵循一定的编码规范,养成良好的编码习惯,提高代码的可读性。开发通常是一个长期的过程,依靠标准的规则和注释而不是考验你的记忆力。
4.做好自测工作。开发过程中,不断的进行单元测试或者集成测试。借助于测试工具或者自己写代码测试的方式,首先保证每一个小模块、函数或者算法的正确性和合理性。测试时不仅仅是验证功能是否实现,还必须包括对各种异常输入的处理是否正确,往往软件的Bug出现在软件的异常处理不正确或者不充分。
5.做好配置管理。借助于一些成熟的版本管理工具管理好自己的代码,避免因版本错误导致新的问题或者旧问题重复出现。
6.开发是一个技术和经验不断积累的过程,需要不断地学习各种基础知识,规范管理开发过程,总结教训、通过各种方式和平台交流经验。没有人开发出的软件没有问题,只是多和少的问题,只有不断地学习、交流和总结,才能开发出更好的软件。
Q:Bug除了出现在程序员编码阶段外,在测试过程中,会不会因为测试人员的操作失误,亦或是其他原因,导致软件出现Bug呢?
李亚伟老师:完全有可能在测试过程中导致软件出现Bug,但不是一定的。比如在进行代码单元测试时,我们通常需要在代码中进行插桩,有可能就插入错误,或者在测试执行完毕后,未删除插桩代码,导致软件出现Bug。
需要明确的是,如果是因为测试人员改变软件代码导致软件出现Bug那是测试人员操作问题,除此之外,测试过程中的比如软件操作流程不正确、配置错误、数据输入错误等等导致软件出错均是软件自身的问题,因为软件自身应该对任何输入(包括外部数据输入和操作)都是有预期的,也就是不过什么输入,均有预判的正确的响应结果。
此外,因为管理上的原因也可能导致软件出现Bug,比如配置管理混乱导致软件部分部件版本错落,软件出现问题。
Q:对于测试人员来讲,除了借助于一些测试工具外,还应具备什么样的个人能力?是否需要具备自己动手处理Bug能力?再则您认为软件开发人员是否需要具备自我测试的能力?李亚伟老师:测试工具不是最重要的,测试工具只是一个提高工作效率的辅助工具,不是测试人员必须掌握的,这个随时可以学习使用,使用测试工具只是一个熟练程度的问题,关键还是你的综合技术基础,测试经验。
通常认为软件测试人员具备的基本素质按重要等级依次是:技术、沟通能力、自信心、责任心、耐心和细心等。
技术是基础,作为测试人员,你应该具备一定的软件开发基础,了解软件的运行环境、生产过程、常见的软件开发问题等,同时你需要知道在软件的开发过程中各个阶段需要进行什么测试,选择什么样的测试工具,怎样分析测试工具进行测试的结果等。
其次是你的沟通能力,因为在测试过程中,你需要不断地跟开发人员、项目管理人员等沟通协调,沟通能力是你测试工作顺利进行的重要保障。测试人员发现问题最重要,在技术基础的保障下,你得知道什么是软件问题,什么情况下出现问题,出现在什么地方,最好知道因为什么原因出现问题,最最好知道怎么去修改这个问题,这样的话你跟开发人员更好沟通,你的测试工作就会进行得更顺利。
再次,作为测试人员,你得有自信,首先测试工作是一项技术要求很高的工作,测试并不比开发地位低。在技术基础的保障情况下,你应该非常自信地进行自己的工作,理直气壮地向开发人员提出软件问题,并坚持自己的观点,明确各方责任。
最后,测试工作非常重要,你担负着软件质量验收责任,你必须有责任心,耐心和细心地工作,争取不放过任何一丝一毫的软件错误和缺陷。
测试和开发工作是独立的,你可以具备动手处理Bug的能力,或者可以协助开发人员定位问题,提出修改建议,但是绝对不可自己去修改Bug。自己动手处理Bug的能力能具备更好,但不是必须的。
开发人员必须具备自我检测的能力,我们说调试也是一种测试,但不是系统的或者正规的测试工作。通常开发人员需要进行编码规则自查、单元测试工作等,同时开发人员在提交测试之前一般也需要先进行自我检测,谁也不愿意把更多的问题让测试人员发现。另一个方面,开发人员只有自己具备自我检测的能力,才会知道在开发过程中注意避免产生问题,减少软件Bug产生隐患。
Q:我们经常看到一款软件在正式发布后,仍存在很多Bug。在产品发布后,是否还需要人员去进行测试Bug?对一款产品的测试工作,Bug率达到一个怎样的状态才算作合格产品?
李亚伟老师:软件测试是一个有计划的活动,产品发布意味着当前版本软件开发和测试工作完毕,所以严格上来讲,有计划的测试活动已经结束。然后众所周知有限的测试不可能发现软件所有的Bug,我们也经常看到,几乎所有的软件产品都会有后续的升级版本,升级的原因:一是因为新增功能,其二就是修改旧版本的Bug,这也说明在行业实际运营过程中,测试在产品发布后仍然延续。
软件测试是一个有计划的活动,测试活动再次进行前必须是软件代码在上一次测试活动结束后进行过修订。软件测试需要投入人力和物力,产品发布之后是否需要继续进行测试,可根据人员情况和软件产品自身的情况决定,人员充足,自身认为产品质量需要继续提高,便可继续进行测试。
Bug率评价产品是否合格我认为是不正确的,一个产品也许只有一个Bug,但是这个Bug是致命的,那这个软件规模再大,它的Bug率非常小,其产品也是不合格的。另外,这个软件在应用上基本满足用户要求,但也存在一些易用方面的小问题,其Bug率较大,但其质量我认为比存在一个致命Bug的产品质量要好。
Q:您认为测试人员有没有必要与开发人员在同一个项目组工作,能将Bug扼杀在萌芽状态吗?如果采用这样的工作方法,责任应该如何界定,避免互相推诿?
李亚伟老师:测试人员有没必要与开发人员在同一个项目组工作,跟公司的管理制度、项目规模和人员素质等有关系。必须明确一点的事,测试工作和开发工作必须独立,测试人员与开发人员独立。
测试人员与开发人员在同一个项目组工作,而且人员与工作独立,理论上讲,如果测试人员素质没有问题,项目管理正常,在软件开发的需求分析、设计以及编码阶段、集成阶段等均进行了必要的测试工作的话,在前期很大程度上能减少Bug的发生,也能提高软件质量。但是测试工作是有限的,并不能将所有的Bug都发现或者预防其产生。
如果测试人员与开发人员同在一个项目组,首先工作应该独立。工作分工非常明确,项目组通常称包括开发人员和测试人员,严格上来讲,项目组包括项目经理、需求分析人员、软件设计人员、编码人员和质量管理人员、测试人员等,一般来说,开发人员兼任需求分析、设计、编码工作,质量管理人员兼任测试和质量管理工作。我们必须清楚一个事实:“设计而不是测试决定软件的质量”,软件测试是一个验证的活动,其依据是软件需求规格说明和软件设计说明。软件测试的质量跟测试过程管理、测试人员素质有很大关系。
软件产品发布后软件出现质量问题,软件问题类型多样,有设计问题、程序问题、文档问题等,其责任要具体定论,一般来说,如果管理没有问题,而且测试依据明确,软件出现不应该出现的问题,软件测试人员有一定的责任,但主要责任应该是开发人员的,首先没有按照需求或者设计完成开发人员。