软件测试大家都很熟悉,软件测试是软件开发完成后进行的一轮保障软件质量的环节,如果你是做开发类岗位的话,肯定对测试又爱又恨,恨得是测试从你的程序中找Bug,有的时候会为了某个Bug争得面红耳赤,爱的是测试通过测试软件帮你发现了很多程序中的问题,进而很好的提升了软件质量。
正因为测试能发现软件质量问题,通过测试能有效提高软件质量,所以慢慢大家都觉得,软件测试要对软件质量负责,开发也渐渐对测试产生依赖心理,很多功能模块实现后,扔给测试人员去测试,自己很少进行自测。
产品上线后,如果出现未发现的Bug,测试总是会为质量问题背锅,受到责备和惩罚,这在我们软件过程中司空见惯,但是这样其实对软件测试人员是十分不公平的。
软件开发是由多个环节组成的,从最开始的需求,到后来的设计、开发、测试等,每个环节都可能导致质量问题,而测试只能对已经完成开发的软件产品进行检测,无法干预整个过程。因为软件测试只能对功能进行测试,无法对代码直接测试。
那到底谁应该为软件质量负责呢?首先我们先了解什么是软件产品质量?
不同人对软件质量好坏其实评判角度不一样,对用户来说,看重软件有没有满足需求,是不是美观好用;对开发来说,看重代码质量是不是很高,好不好维护;对于软件测试而言,看重的是Bug数量、安全、性能等指标;对于项目经理来说,看重的是整个开发过程的质量,成本是否可控,项目能否如期完成。
David Chappell在《The Three Aspects of Software Quality:Functional,Structural and Process》中提到的软件质量的三个考量要素:功能质量、结构质量和过程质量。
所有软件的设计开发都是从一个想法开始的,客户有了一个想法,然后开发团队实施,把想法变成需求、需求变成设计、设计变成代码、代码变成软件。
功能质量,指用户体验软件的结果,满足用户需求是对功能质量最基础的要求,Bug数量、性能、UI/UX都是很重要的质量指标,如果软件Bug太多,性能差,不好用,交互差,客户不满意,这些都决定了产品的功能质量。
结构质量,软件中主要组成部分就是代码,代码质量指软件架构和功能代码的质量,代码质量主要体现在以下方面:
用户虽然不能直接看到代码,但是代码质量高低会直接影响功能质量。
过程质量,指软件开发过程中的项目管理,这个决定了项目能否如期完成,开发成本是否在预算之内。
综合来看,软件质量从来不是单方面质量决定的,都是几方面相互相成,互相影响的。
比如过程改进,增加了自动化测试的覆盖,引用了持续集成,这样可以提高代码质量和功能质量。
所以梳理清楚了产品质量后,我们知道产品质量是有功能质量、代码质量和过程质量共同决定的,三方面共同负责。
在说责任之前,我们要知道,权责向来都是对等的,我们要让开发对软件开发过程负责,那前提就是他必须有权力去影响和控制开发过程,否则离开权力谈责任就是耍流氓了。
我们先来看看项目中的主要角色,主要负责内容:
软件测试,对功能质量负责,对软件产品进行测试验收,确保产品满足功能需求。
开发人员,对结构质量负责,代码质量和测试代码,通过自动化方式做功能测试。
项目负责人,对过程质量负责,过程质量的水平高低,会间接影响代码质量和功能质量。
如果真的非要排个序的话,软件质量的首要负责人是项目经理、开发、测试。
开发是唯一能直接影响代码质量、对代码负责的人。开发能够更容易的找到Bug,更容易通过架构设计、自动化测试代码等手段保证好代码质量,提升测试效率。
现在软件开发的发展趋势就是软件测试的很大一部分手工测试工作已经被自动化代替;甚至不设测试岗位,典型代表就是Facebook,开发人员自己写代码实现功能,然后写自动化测试代码对功能进行测试,然后上线。这意味着在实现功能的同时,还要考虑如何去测试这个功能,这样让代码更具有可测试性,对开发人员的要求更高了。
我们不需要做到Facebook那样,从头到尾一个人搞定,但是作为开发人员,我们可以对代码质量有更高要求,如让项目有更多自动化代码覆盖,交付测试之前自己自测一遍。
敏捷开发强调的是,项目的所有人一起为产品质量负责,人人为产品质量负责,但是到具体实施就需要有一定的方法,否则就跟一个和尚挑水喝,两个和尚抬水喝,三个和尚没水喝,到时出现到处推诿的情况,大家都不愿真正对软件质量负责了。
如何做到“人人为产品质量负责”
我们只有真正在团队中建立了一种重视产品质量的文化,每个人才会确确实实地对质量负责,那有哪些方法可以帮助团队建立这种文化呢?
首先我们可以参考敏捷开发中的扁平化管理,产品负责人更多是充当一种服务型的角色,大家地位都很平等,每个人都有权力去影响到项目过程、实现权责对等,大家才会为过程质量负责。
其次,拆小团队,人数多的团队容易推诿扯皮,人数少的团队易于每个人承担更多的责任,有助于形成人人重视产品质量的文化。
然后,鼓励大家互相协作,例如开发人员多些自动化测试用例;测试人员给开发人员提供自动化测试用例的协作,例如设计测试用例。
最后指定相应的制度,鼓励大家重视软件质量:
总结
保证软件高质量,并非只是测试人员的责任,软件质量体现在功能质量、结构质量和过程质量三个方面,对产品质量负责,意味着要对着三方面共同负责。所以对于产品质量,最理想的状态还是做到人人都为产品质量负责,为了达到这个目标,我们需要建立一种重视质量的文化,每个人才会确确实实地对质量负责。