几个月前,我开始担任初级程序员的工作。我们正在研究的系统已投入生产约2年。我没有参与系统和设计的乞讨。
我注意到的一件事是,系统主要版本已经是11.YZ。根据我在其他系统和库上的使用经验,我不记得看到如此快的产品碰撞主要版本的情况。有些产品已经在1.XY中使用多年,并且仍在接收功能和错误修正。
假设正确使用了语义版本控制,这是否表明系统设计不佳,因为它几乎每四个月进行一次重大更改?
几个月前,我开始担任初级程序员的工作。我们正在研究的系统已投入生产约2年。我没有参与系统和设计的乞讨。
我注意到的一件事是,系统主要版本已经是11.YZ。根据我在其他系统和库上的使用经验,我不记得看到如此快的产品碰撞主要版本的情况。有些产品已经在1.XY中使用多年,并且仍在接收功能和错误修正。
假设正确使用了语义版本控制,这是否表明系统设计不佳,因为它几乎每四个月进行一次重大更改?
Answers:
假设正确使用了语义版本控制,这是否表明系统设计不佳,因为它几乎每四个月进行一次重大更改?
不必要。
您在评论中提到这是一个内部API。破坏API是不好的,因为您破坏了每个人的代码。但是对于内部API,“每个人”就是“您”,您完全有能力与自己协调此类API更改,因此,通常与API更改相关的痛苦要轻得多。
此外,平均数可能会产生巨大的误导作用:也许他们在早期开发的前几天就进行了11次API重大更改,并且从那时起已经稳定了4年?如果主号码为0,SemVer 允许您在不增加主号码的情况下进行重大更改,但这并不强迫您这样做。也许他们从第0天开始就使用SemVer,甚至在原型设计/探索阶段也是如此?
当使用语义版本控制时,仍然需要决定哪些更改被认为是“主要”,哪些更改是“次要”。出于各种原因更改版本号-或不更改版本号。
具有向后兼容性保证的系统可能最终会在大多数更新中增加主要版本号,仅仅是因为在某种程度上有些神秘的极端情况下存在向后兼容性中断。相同的系统几乎可以无限期地坚持1.xy,因为向后兼容性付出了很多努力,试图永不破坏任何从属系统。两种版本编号方法都可以被认为是“保守的”,但是这两种方法也可能表明存在着深层的潜在问题。
在其他时候,您实际上有一个发布时间表(考虑每季度发送给客户的季度更新CD),在该版本中可以更改主要版本号,因此它不是“ Version 3.4 / Oct 16”,而是说“ Version 11.0”。如今,越来越短的间隔内发布了更多的软件,这使得发布计划不再是坚持特定版本控制方案的理由。我已经在大型仓库系统中看到了这一点,该系统只允许内部IT每季度停机一天(通常是星期日)。这一天是部署日,每次都标记有一个新的主版本。
一些程序具有最重要的外部依赖关系,因为用户将必须同时更新两者。如果您有一个仅适用于Word 2010的Word插件,而另一个适用于Word 2013的Word插件,则可能希望将主要版本号与MS-Word的主要版本号同步。在这里,主要数字非常重要,因为您的某些用户尚未更新到Word的最新版本(或您所依赖的其他版本),因此某些用户将落后于正常的更新计划。等等)。
有时,其他外部因素决定了版本号。如果您有财务软件,则可能会有与税法相对应的年度更新(该更新通常在1月1日生效)。此类系统的主要版本每年仅更改一次-不是因为那是更新时间表,而是因为这对客户而言还有其他重要性:如果您执行2016年税法,最好将程序更新为2016年税法。
最后,版本号取决于很多因素(通常特定于一个域),以至于仅版本号不会告诉您有关代码库状态的任何信息。这是查看何时,为什么以及如何进行部署以及部署进行得如何顺利的一种更好的方法。如果您可以向10.000个客户推出主要更新并打几个电话-您可能还不错。如果您向10个客户推出次要补丁程序,并且因此不得不加班,那可能是错误的。
关于版本号含义的共识确实是major.minor.revision.buildnumber
如果专业快速上升,那可能就是开发人员拥有了所有这些新想法并且真的很努力。
但是,在商业世界中,可能还有其他原因需要增加主版本号。喜欢
销售下降,客户/用户正在等待下一个重要的主要版本,然后再进行升级。
合同规定客户有权进行较小的更新。供应商无法向他们收取这些费用,因此将一些小的改进作为主要产品升级出售。
竞争对手X在游戏中的时间更长,因此其主要版本号刚好高于您的主要版本号。这使得您看起来落后了,您必须“追赶”。