Software design techniques are undoubtedly crucial in the process of designing good software. Over the years, a large number of design techniques have been proposed by both researchers and practitioners. Unfortunately, despite their uniqueness, it is not uncommon to find software products that make subpar design decisions, leading to design degradation challenges. One potential reason for this behavior is that developers do not have a clear vision of how much a code unit could grow; without this vision, a code unit can grow endlessly, even when developers are equipped with an arsenal of design practices. Different than other design techniques, Cognitive Driven Development (CDD for short) focuses on 1) defining and 2) limiting the number of coding elements that developers could use at a given code unit. In this paper, we report on the experiences of a software development team in using CDD for building from scratch a learning management tool at Zup Innovation, a Brazilian tech company. By curating commit traces left in the repositories, combined with the developers' perception, we organized a set of findings and lessons that could be useful for those interested in adopting CDD. For instance, we noticed that by using CDD, despite the evolution of the product, developers were able to keep the code units under a small amount of size (in terms of size). Furthermore, although limiting the complexity is at the heart of CDD, we also discovered that developers tend to relax this notion of limit so that they can cope with the different complexities of the software. Still, we noticed that CDD could also influence testing practices; limiting the code units' size makes testing easier to perform.
翻译:软件设计技术无疑是构建优秀软件过程中的关键要素。多年来,研究者和从业者提出了大量设计技术。遗憾的是,尽管这些技术各有特色,但软件产品中仍常出现设计决策欠佳的情况,进而导致设计退化问题。造成这种现象的一个潜在原因是开发者缺乏对代码单元可能增长规模的清晰认知;缺乏这种认知时,即使开发者掌握了丰富的设计实践方法,代码单元仍可能无限膨胀。与其他设计技术不同,认知驱动开发(简称CDD)聚焦于:1)定义代码单元中开发者可使用的编码元素数量;2)限制这些元素的数量。本文报告了巴西科技公司Zup Innovation的一个软件开发团队在使用CDD从零构建学习管理工具时的经验。通过梳理仓库中的提交痕迹并结合开发者的感知反馈,我们整理出一系列发现与经验教训,这些内容对有意采用CDD的从业者具有参考价值。例如,我们发现,尽管产品不断演进,但采用CDD的开发者仍能将代码单元规模(以规模度量)保持在较小范围内。此外,虽然限制复杂性是CDD的核心要义,但我们也发现开发者往往会放宽这种限制概念,以应对软件的不同复杂度情境。同时,我们注意到CDD还能影响测试实践:限制代码单元规模使测试执行更加便捷。