6种办法实现精益软件

banq 18-09-03
              

最近,我浏览了公司的代码库,发现它有三个版本的仪表板,都是用于分析页面,我很确定客户不需要那样做。这引发了我幼稚脑中的一些事情,我开始在互联网上寻找相关的想法。就在那时,我发现了这篇古老的论文:“为精益软件辩护”

这篇文章提出的观点很大程度上与我共鸣。

介绍
与10年前的类似功能软件相比,我们今天写的软件很大,运行任何现代软件所需的内存和资源都非常高,增强的用户体验和功能只是增加的大小的一部分,原因还有更多。

所有现代设计模式、代码架构等都是教会我们如何应对这种复杂性,而不可能从根本上消灭它。

两条法则非常准确地反映了软件的状态:
1. 内存越来愈大,软件扩展了才能填充可用内存。
2. 硬件却变得越来越快,但是软件变得慢更多。

简化软件的方法在于用训练有素的方法将其返回本质。

“FAT软件”的原因
导致复杂性的一个主要原因是软件拥有的功能太多,这些不一定都是使用时所必需的功能,我们不断添加新功能和扩展,并且与原始系统的任何不兼容性将被忽略或传递无法识别。

当系统的强大到通过功能数量来衡量时, 数量变得比质量更重要 ,每个新版本都必须添加功能,即使它真的不需要添加任何功能。

1.所有功能,所有时间
软件的单体设计是使软件复杂化的主要原因之一,每个可以想象得到的功能都是系统设计的一部分,随着时间的推移,大多数功能都变得无关紧要,但会继续对系统产生影响。

2.对某些人来说,复杂性就是力量。
当我建议将去除一些不必要的灵活性并使事情标准化以降低复杂性和提高可维护性时,PM当时的反应至今记忆犹新。

不可理解性应引起人们的怀疑,而不是钦佩。

3.没有足够的时间
时间压力是笨重软件的首要原因。我们没有足够的时间从代码中删除已弃用的功能并改进我们认为可接受的解决方案。

六种办法帮助保持软件“精益”
1. 强类型语言
使用强类型语言有助于以更简单的方式设计复杂系统,它允许编译器精确定位错误和接口,并且可以更自信地使用和更改抽象。

2.找到适当的分解
系统应该被分解成模块,模块应该被分解成组件,组件应该有单一的责任,整个系统应该在层次结构中进行分解,同时最小化复杂性并且去除重复代码。

3.可扩展性
可扩展性是保持系统从一开始就简化的先决条件。它还允许定制系统以适应新的更改和删除已弃用的扩展。

4.永远不应该构建复杂的软件
认为复杂系统需要设计师和程序员的纪律是不正确的,完全无法理解的系统,至少在单个个体的重要程度上,应该永远不会建立起来。

5.沟通是关键
随着时间的增长,沟通问题变得占主导地位,复杂的团队结构促成复杂的软件。

6.降低复杂性应该是目标
降低软件的复杂性和规模应该是每个开发步骤的目标,在系统规范中,对于详细的编程设计 - 每个步骤都必须有意地消除系统中任何不必要的复杂性。

结论
本主题确实触及了软件团队的敏感神经,当我和我的团队讨论这个时,他们的回答就是“不同意,这是销售需要的功能。“,”现在没有必要保持软件小。我们拥有更大的机器和更好的工具“等借口。

我明白了。我在某种程度上也不会同意,但不是因为保持软件精益是错误的,而是因为它很难,尽管如此,我希望在设计系统时牢记这些想法应该可以减少软件的复杂性。

A plea for lean software: 6 Lessons I learned to h