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个限制开发者在特定代码单位可以使用的较容易的编码要素数量。在本文件中,我们报告一个软件开发小组使用CDD从在巴西技术公司Zup创新公司建立学习管理工具的经验。通过将存储器中留下的痕迹与开发者的认知结合起来,我们组织了一系列可用于有兴趣采用CDD的发现和教训。 例如,我们注意到,通过使用CDD(CDD) 定义和(CD) 的缩略度的缩略度的缩略度, 开发者也可以将CDD的缩微的缩微的缩微的缩微, 。