关于生产力和SLOC
SLOC的问题
SLOC度量标准的问题在于,它测量的是近似的代码编写量,而没有考虑以下因素:
- 代码的质量(即,如果每100个SLOC由于错误而不得不再添加90个SLOC,但是在交付代码时却不知道该怎么办?)
- 代码达到的目标(即10K SLOC是否处理所有预期的用例或用户案例?或仅处理很小的一部分?)
- 代码的可维护性(即,您是否需要增加1%或50%的代码来将代码调整为可预期的不断发展的要求?)。
除非另有说明,与许多经过精心设计的可重用代码相比,产生带有大量复制粘贴部分的易于出错且难以维护的意大利面条代码将被认为更具生产力。
因此,SLOC绝对不是衡量生产率的最佳方法。
我们正在考虑什么生产力?
生产率是针对过程进行衡量的。因此,SLOC可能仅是编码过程的理想选择。
例如,如果您误解了较差的要求,花了五个月的时间生产该软件,将其展示给用户,发现它完全是错误的,然后又花了五个月的时间从头开始对其进行重写,那么您在SLOC中的生产力将相同/月,这是一个团队第一次正确编写代码的原因,例如,因为他们使用了敏捷的流程,可以通过频繁的反馈减少误会。这种明显的平等生产力掩盖了巨大的问题。
因此,衡量软件开发生产率需要考虑到整个过程,包括分析需求,设计要编写的代码,编码,测试,调试以及验证是否满足用户期望。由于所有这些活动都非常不同,所以最好的办法是衡量唯一重要的想法:正在运行的软件,即所生产的软件对用户意味着什么。
如何衡量软件可交付成果?
存在几种方法:
- 经典软件工程中的典型方法是功能点(FP)。根据要满足的要求来测量功能点(例如,表格数量,每种表格中的字段数量等)。然后以单位时间和人均FP来衡量生产率。一些公司甚至拥有可以告诉开发人员在给定领域以给定语言每单位时间可以产生多少个功能点的数据。FP的问题在于,它需要预先非常详细的要求,而且很耗时。
- 故事点(SP)是一种更现代,更务实的方法。这些用于评估要生成的代码的复杂性,并通常用于评估开发团队的速度。但是,SP是在了解所有详细信息之前执行的工作的估计量。这不是对实际发生情况的最终衡量。因此,将其用作生产力度量时必须格外小心,因为它可能会适得其反。
关于静态打字与动态打字的生产率
我必须承认,我个人是静态类型语言的粉丝,因为在我内心深处,我知道它更可靠(多年的编码证明了这一点)。
因此,我可以肯定的一件事是,与非静态类型的语言相比,静态类型的语言能够在编译时防止更多的错误/错误(例如,拼写错误,预期类型不匹配等)。但出于客观考虑,我不敢将其概括为更高的生产率。
您的建筑师正确吗?
也许吧,也许不是。
但是他的论点似乎无效:静态类型语言的生产率提高来自编译器预先捕获的大量错误。
因此,仅靠查看SLOC而不考虑动态类型语言所需的返工是不可能发现这种“更高”生产率的提高的。所以他的比较是不公平的。
可比环境的论点也不成立。某些动态类型化语言允许使用一些高级结构,而这些语言所需的代码要比经典的静态类型化语言之一所需的代码少。因此,您可能需要更少的时间,更少的代码,但是增加了相同的分析,测试和验证开销。因此,通过SLOC衡量生产率会稀释潜在的生产率提高,从而对动态类型语言产生偏见。
有研究支持这一说法吗?
关于该主题存在一些最新的学术研究。尽管其中一些人看到了静态类型化的优点,但通常将其限制于特定目的(文档,不良文档代码或API的重用等)。还应使用谨慎的措辞,因为现代IDE已大大降低了与动态键入有关的风险: