跳转至

31 软件测试要为产品质量负责吗?

你好,我是宝玉。从这一篇开始,我们将进入软件工程中的测试模块的学习。

说到软件测试,你一定不会陌生,尤其是如果你做开发相关岗位的话,一定是对测试又爱又恨,一方面测试从你的程序找出Bug,然后你还要费心去修复;另一方面测试帮你发现Bug,修复后能很好的提升质量。

正因为测试能发现软件中的质量问题,通过测试能有效提升软件质量,慢慢的大家就觉得软件测试能保障质量,所以测试要对质量负责。开发也会对测试产生依赖心理,很多功能模块实现后,就扔给测试人员去测试。

上线后,如果因为有测试漏测导致的Bug,测试人员还要为质量问题背锅,受到责备。上面这样的场景到现在也还在很多软件项目中上演。但这对测试人员其实是不公平的。

因为软件开发是多个环节组成的,从最开始的需求,到后面的设计、开发,每个环节都可能会导致质量问题,而测试只能对已经开发完成的软件产品进行检测,并不能干预整个过程。

比如说测试是无法对开发写的代码直接测试的,只能基于软件功能去测试,也就是说对于代码的质量,测试人员其实是没有什么办法的。

那到底谁应该为产品质量负责呢?在回答这个问题之前,你不妨先思考一个更本质的问题:什么是软件产品质量?

什么是软件产品质量?

我以前以为,软件质量就是由Bug数量、性能高低、安全性等指标决定的,现在看来这样划分其实并不全面。

因为不同的人对软件质量好坏的评判角度是不同的。比如对用户来说,更看重产品是不是满足需求,是不是美观好用;对开发来说,看重的是代码质量是不是高,是不是好维护;对于软件测试人员而言,看重的是Bug数量、安全、性能等指标;对于项目负责人,看重的是整个开发过程的质量,是不是成本可控、如期完成。

在这个问题上,我比较认同《The Three Aspects of Software Quality: Functional, Structural, and Process》这篇文章作者David Chappell的观点,他把软件质量分成了三个考量方面:功能、结构和流程。对于他提的“结构质量”,我认为定义为“代码质量”更贴切,也就是说,功能质量、代码质量和过程质量这三个方面组合在一起,很好地概括了软件质量。

所有的软件开发都是从一个想法开始的,用户需要一个软件,有人出钱,然后开发团队实施,把想法变成需求,需求变成设计,设计变成代码,代码变成软件。

  • 功能质量

最终用户得到是软件,体验的是软件的功能,功能的质量直接决定了产品的质量。

满足用户需求,是对功能质量最基础的要求。在这个基础上,Bug数量、性能、UI/UX都是很重要的质量指标。如果你的软件Bug太多、性能差,用户不会满意;界面难看,操作体验也很差,这些因素都决定了你产品的功能质量。

  • 代码质量

构成软件最重要的部分是代码,代码质量指的是实现软件功能的架构和代码的质量。代码的质量主要体现在以下这些方面:

  1. 代码的可维护性,也就是在不影响稳定性的前提下,是否能方便地添加或者修改现有的代码;
  2. 代码的可读性,代码是否容易理解,是否能快速上手;
  3. 代码的执行效率,代码执行效率直接影响了软件性能;
  4. 代码的安全性,是否有安全漏洞,安全性是代码质量很重要的一个指标;
  5. 代码的可测试性,代码是否能使用单元测试、集成测试进行测试验证。

虽然用户不能直接感知到代码,但是代码质量高低会直接影响功能质量,同时代码质量低也会影响后续的维护升级。

  • 过程质量

软件的开发离不开软件工程,离不开项目管理。软件开发过程的质量决定了你的项目是否能如期完成,开发成本是否在预算之内。

过程质量虽然也是用户不能直接感知的,但是过程质量会直接影响代码质量和功能质量,甚至是产品的成败。

以上就是软件质量的三个方面,软件质量从来不是单方面质量决定的,通常是几方面质量因素相互影响,共同决定的。

比如说改进流程,增加了自动化测试的覆盖,应用了持续集成,这样可以提高代码质量和功能质量。或者说对代码质量过于追求,又可能会影响过程质量,例如时间延期,成本超标。

谁该为产品质量负责?

在梳理清楚产品质量的问题后,我们就可以来讨论谁该为产品质量负责的话题了。

既然产品质量是由功能质量、代码质量和过程质量共同决定的,那么对产品质量负责,意味着要对这三方面共同负责。

在说到责任之前,我想补充一下权责对等的问题。责任和权力是需要对等的,比如说你让开发人员对软件开发过程负责,那么前提是他必须有权力去影响和控制开发过程,否则离开权力谈责任就是耍流氓了。

然后,我们再一起看看项目中的主要角色,谁最应该为产品质量负责?

软件测试,可以对功能质量负责,对软件产品进行测试验收,以确保产品满足功能需求,有好的功能质量。但是通常不能对代码质量和过程质量负责。

开发人员,可以对代码质量负责,也可以写测试代码,通过自动化的方式做功能测试,虽然还不能完全替代手工测试的作用,所以也可以算得上对功能质量负责。但开发人员通常对过程质量影响有限。

项目负责人,可以对过程质量负责,而且过程质量的水平高低,会间接影响代码质量和功能质量。但因为项目负责人不直接编码和测试,所以无法直接影响代码质量和功能质量。

所以综上,我觉得如果要排序的话,软件质量的首要负责人是项目负责人,其次是开发人员,然后才是软件测试。

虽然从权责的角度看,项目负责人是最应该对项目质量负责的,但是从效果来说,却是开发人员对项目质量负责最有利。

首先,开发人员是唯一能直接影响代码质量、能对代码质量负责的人。开发人员能更容易地找到代码中的Bug,更容易通过架构设计、自动化测试代码等手段保证好代码质量,提升测试效率。

现在软件开发的发展趋势也是如此,软件测试的很大一部分手工测试工作已经被自动化代替。

所以很多公司就让开发负责产品质量,甚至都不设测试岗位,典型代表就是Facebook。开发人员自己写代码实现功能,然后写自动化测试代码对功能进行测试,最后上线。这样不仅自己测试能保证功能的质量,又能通过自己写单元测试、集成测试来保证代码的质量。

当然,开发人员对功能质量负责,意味着必须在实现功能的同时,还要考虑如何去测试这个功能,这样让代码更具有可测试性,这就对开发人员的要求更高了。

就像Facebook强调的“Be there from start to ship”,就是让每个工程师能自始至终地负责产品。从想法到原型设计、到产品开发、上线和维护,全部是工程师自己完成。

我们不需要做到Facebook那样,从头到尾都一个人搞定,但至少,作为开发人员,我们可以对代码质量有更高要求,让项目有更多自动化代码的覆盖;可以在交付测试之前自己先测试一遍。

这样的话,开发就可以真正做到对代码质量和功能质量负责。如果你还想对过程质量也能负责,那么敏捷开发中一些理念是有可取之处的。

敏捷开发中强调的是:项目的所有人一起为产品质量负责,人人为产品质量负责。

但人人为质量负责,很容易变成一句口号而很难落实。就像三个和尚没水喝的故事里面那样,当质量变成每个人的责任时,就没有人真正为质量负责了。所以我们不只是要学习敏捷开发中的理念,还要学习它一些具体的方法。

如何做到“人人为产品质量负责”?

只有真正在团队中建立了一种重视产品质量的文化,每个人才会确确实实地对质量负责。那么有哪些方法可以帮助团队建立这种“人人都重视产品质量”的文化呢?

首先,可以参考敏捷开发中的扁平化管理。在敏捷开发中没有项目经理,只有产品负责人,而产品负责人更多是充当一种服务型的角色。大家都很平等,也就是说每个人都有权力去影响到项目过程,实现权责对等,大家才会为过程质量负责。

其次,可以选择将团队拆小。敏捷开发中的团队规模都不大,大的开发团队拆分成了小的开发小组,每个组人数都不多。人数多的时候容易推诿扯皮,但如果人少,每个人就必须要承担更多的责任,这有助于形成人人重视产品质量的文化。

另外,也可以鼓励工种之间的融合,例如开发人员多写自动化测试代码;测试人员在开发人员写自动化测试时,提供帮助,例如设计测试用例。这样不只是局限于各自负责的质量领域,也同时关注其他质量领域。

最后就是制定相应的制度,鼓励大家重视质量。比如说:

  • 每个Sprint都有项目回顾会议,每个人都可以针对质量提出有效的建议,最终将这些建议落到实处;
  • 出现质量问题,不是推卸责任,而是分析原因,及时修复,避免以后出现类似问题。

要做到“人人为产品质量负责”,还是要像上面提到的一样,要落到行动而不是口号上,组织上扁平化、小型化,分工上打破岗位墙,制度上鼓励大家重视质量,才能真正建立重视产品质量的文化,一起把产品的质量提升上去。

总结

今天我带你一起探讨了一个在软件项目中的常见问题:软件测试要为产品质量负责吗?

保证软件高质量,并非只是测试人员的责任。软件质量体现在功能质量、代码质量和过程质量这三个方面,对产品质量负责,也意味着要对这三方面共同负责。

软件测试,不能影响代码质量和过程质量,所以并不需要为产品质量负责,项目负责人能直接影响过程质量,也能间接影响代码质量和功能质量,应该为产品质量负责。对于开发人员而言,不应只是局限于对代码质量负责,还应该注意功能质量。

对产品质量,最理想的状态还是能做到人人都为产品质量负责,而达到这样的目标,还是需要建立一种重视质量的文化,每个人才会确确实实地对质量负责。

课后思考

你所在项目组中,谁为产品质量负责?你觉得应该怎么样在团队中建立一种好的重视质量的文化?欢迎在留言区与我分享讨论。

感谢阅读,如果你觉得这篇文章对你有一些启发,也欢迎把它分享给你的朋友。

精选留言(15)
  • 易林林 👍(11) 💬(1)

    产品设计、软件开发、软件测试都应该对产品质量负责。 产品设计要重视产品需求的完整性,提升用户的操作舒适感,展现流畅的页面逻辑设计,这是产生良好软件质量的开端。在进行产品设计评审的时候,除了评审人员外,相应的软件开发团队和软件测试团队一定要派人员参加,不能坐等任务分配。有的开发团队和测试团队不去了解需求和产品设计情况,只是一味的等待产品的UI设计,久而久之,就形成了少交流多看文档的习惯,于是大家就开始机械般各顾各的,做完了扔出去就好,就很难在产品质量上达成共识。 软件开发是核心,开发人员对产品的理解程度和自身的技术水平决定了产品的质量和迭代周期。如果开发团队不去与产品团队交流,不去与测试团队核对测试用例,那么在开发过程中大多只会去关注是否实现和能否实现,至于产品质量出现的问题就不是他们关注的重点。然后就会自私的认为产品设计需要增删改是产品团队的原因,产品上线出现bug是测试团队没有覆盖到,部门之间的战争就开始酝酿直至爆发。 软件测试更多的是发现问题、监督问题和约束行为。发现问题的重点在于通过完善的测试覆盖,去找到开发过程中的盲点,而不是去为别人的疏忽大意导致的错误埋单,比如:开发提交的产品有错别字什么的,这种错误就是开发负责人应该承担的。在明确发现问题后,测试团队有权利去监督开发团队解决问题,直至问题得以彻底解决。除此之外,测试团队可以对开发团队行为进行约束,双方协作完成自动化测试体系和流程的构建,共同遵守规则:开发团队负责单元测试、集成测试和系统测试的代码编写,测试团队负责查缺补漏和必要的人工测试。 因此,个人认为,产品、开发、测试的紧密合作是保障产品质量的必备条件。

    2019-05-11

  • 陈丹 👍(5) 💬(1)

    测试原则中有一条是不能测试自己的代码,facebook开发自己测试自己的代码,也会有问题,除非交叉测试

    2019-08-22

  • 蓝黑 👍(3) 💬(1)

    个人觉得过程质量很大程度影响代码质量和功能质量,没有项目经理对整个项目的把控,例如在开发过程中不设立代码审查环节,开发人员随意签入低质量代码,从而影响软件代码质量,还有在开发过程中没有做好需求评审环节的工作,从而影响软件的功能质量,所以高的过程质量可以很大程度上提高软件的代码质量和功能质量

    2019-07-05

  • hua168 👍(3) 💬(1)

    质量是怎么打分的?算进KPI考核吧? 直接用代码质量管理软件(如sonar)实现自动检查可以吧?

    2019-05-12

  • 👍(3) 💬(1)

    我们公司团队小,每次app开发完成后,要求测试人员组织开发全体测试2次,用于保证质量。团队小测试人员技术有限,性能,安全等一般难以保证。

    2019-05-12

  • 行与修 👍(3) 💬(1)

    项目负责人为软件质量总责任人。功能,代码,过程都要关注,并不一定要亲力亲为,因为除了质量他还要兼顾范围、时间和成本。提升质量意识最理想状态是组员有质量人人有责的意识与行动,但实际上这很难。如果自下而上做不到,就自上而下用制度强推,有奖有罚。最后补充一点就是推行质量保障是需要公司层面作为支持的,否则在推行过程中会有不少阻力,也许在强人项目经理的推动下,个别项目能做的很好,但心会很累~

    2019-05-11

  • javaadu 👍(2) 💬(1)

    有一定影响,刚开始很不习惯(现在也有不少同事不习惯),没有测试为开发写测试用例了,作为开发者就要有更好的测试意识,要自己组织测试评审,有些好的核心的测试用例要及时加入到集成测试中。测试人员也转型为测试开发,将精力投入到测试平台的打造上。

    2019-05-24

  • 纯洁的憎恶 👍(2) 💬(1)

    解铃还须系铃人,要想提高软件质量,就要着眼于整个生产链条,每一个环节都要为提高质量出力,而绝不能仅仅依靠质量监控岗位或部门。相反,很多企业设置了类似的部门或岗位,并把质量、安全的重担压在他们肩上,但又没有赋予足够的权力去介入、影响整个链条,结果可想而知。不谋全局者不足以谋一域啊。 把整体质量按照生产链条或链条上的不同角色,划分为若干子部分。通过有机的把控各个子部分质量,形成合力,达到提高整体质量的目的。

    2019-05-15

  • Charles 👍(2) 💬(1)

    目前理论上我们整体质量负责是项目经理 但是团队小,所以一碰到线上问题,基本上boss都知道是哪一块出的问题,直接找对应的岗位了,然后通过这个人出发去解决问题,这个人发现需要协调,人少就自己直接对接,人多就项目经理协调 另外我认为除了老师说的这些流程和自动化来保证产品质量,可能对于小团队而言,人的因素也很重要,发自内心的责任感、对产品的认可并且产品数据持续增长还有boss福利给到位,产品质量就已经有一大半成功了

    2019-05-11

  • javaadu 👍(2) 💬(1)

    产品经理(pd)为功能质量负责 项目经理(pm)为过程质量,代码质量负责,开发人员经常兼任技术pm 没有测试人员,有完整的ci基础平台

    2019-05-11

  • Joey 👍(1) 💬(1)

    请教宝玉老师,系统间接口治理,有没有好的实践或方案可以推荐?我们公司现状:业务系统多,调用关系复杂,且调用方式也五花八门,上游修改接口,下游难以发现或通知遗漏,引发生产质量。总体可以归纳为三种方式:API接口、数据接口、文件接口。

    2019-12-11

  • 风翱 👍(1) 💬(1)

    没问题部门领导负责,有问题开发人员负责。 授权,不应该只有责任没有权力。

    2019-06-26

  • williamcai 👍(1) 💬(1)

    软件开发是一个团体活动,任何参与的个体都要对软件质量负责。软件成功了,大家都有成就感,失败了大家都有责任。这是个体与整体的关系

    2019-05-19

  • 一路向北 👍(1) 💬(1)

    软件产品质量是一个整体问题,从设计,实现,测试,每一个环节都是质量的关键。质量出问题,很多时候是因为缺失一环造成。

    2019-05-18

  • 胖虫子 👍(0) 💬(1)

    一般都是测试背锅啊,产品需求不明,测试也无能为力,但最后有问题还是测试背,你怎么没想到

    2019-11-18