软件测试人员的工作之一就是查找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,比如配置管理混乱导致软件部分部件版本错落,软件出现问题。