软件质量的认识论:每晚有多少睡眠?你工作愉快吗?这些是最影响软件质量的问题。 - increment


研究表明,人为因素最影响我们的工作质量,可是为什么我们会投入更多精力希望通过技术性解决方案解决软件质量呢?
假设您经营一个新团队。您可以一刀切地实施任何您想提高人员生产力和减少代码错误的策略。你会做什么?
进行配对编程!切换到Haskell!使用UML进行所有操作!这些技术都有自己的书籍和会议。但是他们值得努力吗?它们生效需要多长时间?他们甚至都能有效吗?
这些技术解决方案中很少有能影响软件质量的:
静态类型?FSE 2014年提出的一项研究:没有发现任何证据表明,静态类型是有帮助的-或有害的。
编码标准?在ICSM 2008上分享的另一篇论文发现,这些会使情况变得更糟。
代码审查?好的,根据Empirical Software Engineering发表的2016年一篇文章,实际上有效。但是我们不能仅仅依靠我们团队的成功“更多代码审查。”

我坚信技术解决方案会有所帮助。但是,我们经常将将技术工具和流程的选择作为决定团队成败的关键决策。业内知名人士可能声称:Lisp是“ 秘密武器 ”;Python用户是“ 不道德 ”;必须使用TDD才能“ 专业。”

除了技术因素,我们还需要谈论人为因素。

每晚有多少睡眠?您上次上一次工作超过40小时是什么时候?你工作愉快吗?这些是最影响软件质量的问题。

编程是我们思维的延伸,任何损害我们思维的东西都会损害我们的编程技能。

睡眠
有两种睡眠剥夺。我们经常将失眠视为急性睡眠剥夺(ASD):醒来24小时或更长时间。大多数人已经知道这很糟糕。根据IEEE Transactions on Software Engineering进行的2018年研究,新手程序员在经历ASD时丧失了大部分技能,并且我们可以合理地假设高级开发人员(也就是其他人)也不能幸免。

根据2007年《神经精神疾病与治疗》的文章,大多数伤害睡眠不足的人不知道自己的病情恶化,这是在伤害中增加了侮辱。一个开发人员不一定能说出他们犯了更多的编程错误,这使得自我调节变得更加困难。这意味着危险更加微妙,长期并且容易被忽略。

慢性睡眠剥夺(CSD)更微妙,连续几个晚上睡眠不足。2007年的文章证明了CSD全面降低了心理表现。更糟糕的是,要完全逆转CSD,可能要花几个晚上恢复时间,每晚要睡超过八个小时  。

工作时间
根据劳动经济学研究所2017年的一份报告,呼叫中心员工在大约四个小时后发现他们的服务质量直线下降。研究人员估计,在每周工作60个小时的两个月后,生产率下降的速度甚至更快,

压力
最后,考虑压力。当您焦虑,生气或分心时,很难集中精力。也有理由认为,当您承受压力时,您没有那么有生产力或一丝不苟。疾病预防控制中心 的一部分,国家职业安全与健康研究所已经表明,压力大的护士既生产力低下,又犯严重错误的可能性大大增加。
2014年发表在PeerJ上的一项研究发现,快乐的开发人员只要直截了当地解决问题即可。

总结
一方面,一些研究表明,诸如语言选择和测试实践之类的技术解决方案可能会对工程团队的工作质量产生某些影响。另一方面,大量研究表明,睡眠,工作量和压力会对性能产生巨大影响。那么,为什么博客文章,会议演示和软件工程书籍这么多地谈论前者而很少谈论后者呢?

假设您经营一个新团队。您可以全权以赴地实施任何想要使团队效率更高,代码更少错误的策略。你是做什么?您可以选择一种新的编程语言,或者将所有内容切换到微服务,或者遵循最新的趋势。或者您可以做重要的事情。您可以安排时间表。您可以确保没有人每天工作超过8个小时。您可以让人们提前20分钟离开,以避免高峰时间。您可以让父母尽可能轻松地在孩子生病时休假。您可以让人们觉得他们很重要,因为人们很重要。没有什么方法,工具或语言比我们自己的想法重要。