我在一家有数百人为基本相同的产品编写软件的公司工作。软件的质量必须很高,因为有很多人依赖它(尤其是开发人员自己)。正因为如此,每一个重大问题都导致了新的检查——无论是自动的还是手动的。
因此,交付软件的过程变得越来越繁重。所以这需要更多的开发人员……你可以看到这是一个恶性循环。
我们现在遇到了快速发布软件的问题——即使是为一个非常严重的问题更改一行代码,也至少需要一天的时间。
您使用什么技术来加快大型组织中的软件交付,同时仍保持软件质量?
我在一家有数百人为基本相同的产品编写软件的公司工作。软件的质量必须很高,因为有很多人依赖它(尤其是开发人员自己)。正因为如此,每一个重大问题都导致了新的检查——无论是自动的还是手动的。
因此,交付软件的过程变得越来越繁重。所以这需要更多的开发人员……你可以看到这是一个恶性循环。
我们现在遇到了快速发布软件的问题——即使是为一个非常严重的问题更改一行代码,也至少需要一天的时间。
您使用什么技术来加快大型组织中的软件交付,同时仍保持软件质量?
我还在一个庞大而繁琐的组织中工作。我已经成功实施了几种敏捷软件开发方法,但我发现有两种特别有价值。
迭代和增量开发——保持你的发布周期短而紧凑。在一个大型团队中,如果在两个版本之间进行大量更改,您会发现自己陷入了集成的噩梦。
大型组织倾向于具有较长开发时间线的大型项目计划。打这个。如果在开发的前两周之后您的整体看法可能会发生变化,那么计划一整年的项目是没有意义的。让您的利益相关者习惯于制作小的增量版本并适应不断变化的需求。
自动化单元测试- 这是确保您发布高质量软件的好方法。最严重的错误是由看似无辜的代码更改引起的,这些更改在其他地方产生了意想不到的后果。全面的单元测试可能是捕获此类错误的最佳方法。如果你能毕业去测试驱动开发或者行为驱动开发,那就更好了。
任何大型组织都会有一些平庸的开发人员。这是生活中的事实。自动化单元测试是关注它们的好方法。让您的一位更好的开发人员为他们编写单元测试。您将确保至少他们的代码可以工作(即使它很丑陋)。
参见持续集成
有很多方法可以改进流程,但关键组件是模块化。通过明确划分职责(代码和组织中的)并定义清晰一致的接口,一个大团队可以与许多捆绑在一起的小团队一起工作。
明智但阴郁的说法:
Fred Brooks:将程序员添加到后期项目会使其后期。
Gerry Sussman:程序员将类似电阻器并联在一起。
其他人:一个项目的成本是程序员的数量乘以时间表的长度。
可能有用的东西:
组织项目,以便有一个由一两个人构建的核心应用程序,最好通过一种语言操作。然后通过使用该语言进行编码,让所有程序员有效地成为核心的用户。