编程法则和现状:我们明白自认为明白的东西吗?

简介: 软件工程领域的知名专家Capers Jones,已经建立了涵盖20,000个项目的范围广泛的项目记录数据库,大部分都是大型的。有了这些数据支持,他经常写文章讨论,哪些活动和方法在实践中发挥着作用,以及如果可能,它们实际上提供多少提升幅度,它们的成本有多少。在这篇客座编辑里,他非正式地评价了一些编程和业务上的流行“法则”在面对软件开发现状时,是如何发挥作用的。

当面对复杂数据时,编程格言是如何经得起考验的?

软件工程领域的知名专家Capers Jones,已经建立了涵盖20,000个项目的范围广泛的项目记录数据库,大部分都是大型的。有了这些数据支持,他经常写文章讨论,哪些活动和方法在实践中发挥着作用,以及如果可能,它们实际上提供多少提升幅度,它们的成本有多少。在这篇客座编辑里,他非正式地评价了一些编程和业务上的流行“法则”在面对软件开发现状时,是如何发挥作用的。

Boehm第二法则

原型显著减少了需求和设计错误,特别是用户错误。

Barry Boehm提出的这个法则是有数据支持的。需要说明的是,原型大概占到规划的系统规模的10%。对于1,000个功能点的应用程序,原型大概会有100个功能点,容易构建。对于100,000个功能点的大型应用程序,原型本身会是一个具备10,000个功能点的大型系统。这得出一个结论,如果可能的话,大型系统最好采用增量式开发的方式。

Brooks的法则

给一个延期的软件项目增加人手会让项目更延期。

Fred Brooks的法则在计算机领域是非常知名的。在一定程度上它有证据支持。应用程序越大,无论怎样,挽救进度延期都要越困难。对于少于五人团队规模的小项目,增加一个有经验的人不会拉长进度,但是增加一个新手就会拉长。对于超过100人团队规模的大型应用程序,这些项目几乎总是由于糟糕的质量控制和变化控制而延期。增加人手会因为培训和复杂的沟通渠道而趋于减缓进度。

Conway的法则

任何一款软件都会体现生产它的组织结构。

数据趋于支持该法则。需要说明的是,每个软件的组件规模都要考虑匹配被安排这部分工作的团队大小。由于很多团队包含八个人,这就意味着再大的系统或许也要被分解成能够安排给八个人一个部门的组件,这对于应用程序的总体架构可能不是最优的。

Cunningham的技术债务法则

开发过程中为了节省资金或时间的捷径和草率将导致称之为“技术债务”的后续费用,它或许超过了前期节约的费用。

观察的数据支持这个基本概念,早期的捷径导致昂贵的后续修复。Ward Cunningham的技术债务概念是一个伟大的隐喻,但不是一个伟大的标准。技术债务忽视了由于糟糕的质量而被取消的项目。既然35%的大型项目根本不可能完工,这就是一个严重的疏漏了。这些失败的项目成本巨大,但是技术债务为零,因为他们从来不会发布。技术债务也忽略了诉讼成本和因为糟糕的质量而损失的付款。我在一桩因质量控制引起的诉讼中担任内行的目击者,判给原告的损失是修复本身bug带来的技术债务费用的1,000倍。

Hartree的法则

软件项目一旦启动,日程安排在完工之前是个常量。

对于缺少规划的、普通或拙劣的项目,观察的数据支持Douglas Hartree法则。对于使用了早期风险分析的项目,和由有效方法组成的顶级团队,这个法则就不是有效的。换句话说,该法则适用于90%的项目,而不是顶级的10%。

Jones的编程语言实用性法则

每10年,所有被开发的软件程序中的90%的程序,只用到了当时可使用的编程语言的10%。

我最初阐述了这个规律。它受1965到2014年数据流的支持。编程语言的流行程度非常短暂,从最初的流行爆发到开始消退貌似平均不超过3.5年的周期。没有人知道这个现象出现的原因。一些语言,比如用在Apple上的Objective C已经持续很多年了。编程语言来来去去的原因不得而知,语言持续的原因也不得而知。

Jones的软件缺陷排除法则

排除缺陷效率高于95%的项目,比排除缺陷效率低于90%的项目要更快、更便宜。

来自于20,000个项目的观察数据支持这个法则。只使用测试的项目,通常其缺陷排除效率低于90%,由于拉长测试间隔常常导致延期。同样的项目,在测试之前使用检查和静态分析,其缺陷排除效率能够达到99%,通常按时或提前完成,首先要假定合理的日程规划。糟糕的缺陷排除效率是日程后移的主要原因。

Lehman/Belady的软件进化法则

软件必须持续更新,否则它的用处变得越来越少。

软件的熵或复杂度随时间而增加。

IBM的Meir Lehman博士Laszlo Belady博士提出的法则来自于对公司的OS/360操作系统的长期研究。他们已经分别被我确认了。第一个法则直觉上明显,第二个则不然。为了修复bug和小优化而持续进行的修改随着时间的增长而增加循环复杂度,最终增加软件的熵或混乱。做为回报,这将放慢维护工作,或需要额外的维护人员,除非取代或重组发生。软件翻修和重组能够反转熵。

Senge的法则

越快就越慢。

Peter Senge注意到,通常业务企图加快项目提交的进度,却往往放慢了进度。这种现象在软件领域也是如此。当尽量加快项目时,会犯下包括忽视检查和压短测试的一般错误。它们拉长了软件开发,而不是缩短。草率的需求收集和回顾,越过设计直接编码,忽略严重的问题,都会发生意外,进而放慢项目进度。为了优化软件开发进度,质量控制是有价值的,包括测试之前的检查和静态分析。

Wirth的法则

软件性能变慢的速度要大于硬件变快的速度。

在大型机时代,Niklaus Wirth提出了这个法则,那时候他好像为大型机工作。然而,对于网络处理器和并行计算,这个法则貌似不太准确。

Yannis的法则

编程生产力每六年翻倍。

我的数据显示,编程生产力和醉汉走路类似,某种程度上是因为应用程序规模越来越大。然而,如果你砍去需求、设计,只看纯代码工作,这个法则可能更为真实。毫无疑问,Java,Ruby,Go,C#之类的现代语言比汇编和C之类的老语言有着更好的编码性能。主要因素是对于一个已知的应用程序,对于可复用的功能,现代语言需要更少的、独特的代码。

相关文章
|
SQL Java 数据库连接
hibernate和mybatis的区别
hibernate和mybatis的区别
|
SQL Java 数据管理
HiveServer2&beeline
HiveServer2&beeline
263 0
HiveServer2&beeline
|
容器
关于在容器通过apt安装程序碰到的问题
记录容器安装程序的问题
2448 0
|
3月前
|
人工智能 JSON API
淘宝/天猫:使用物流查询API实时显示包裹位置,减少客服咨询量
在电商竞争激烈的环境下,淘宝、天猫通过集成物流查询API,实现实时追踪包裹位置,显著减少用户咨询量。本文解析其原理、实现步骤与效益,展示如何以技术手段提升用户体验、降低客服压力,助力平台高效运营。(238字)
321 0
|
5月前
|
JSON 人工智能 数据挖掘
LLM开发者必备:掌握21种分块策略让RAG应用性能翻倍
本文将系统介绍21种文本分块策略,从基础方法到高级技术,并详细分析每种策略的适用场景,以帮助开发者构建更加可靠的RAG系统。
331 0
LLM开发者必备:掌握21种分块策略让RAG应用性能翻倍
|
存储 机器学习/深度学习 并行计算
【AI系统】Tensor Core 深度剖析
Tensor Core 是英伟达 GPU 的关键技术,专为加速深度学习计算设计,尤其擅长矩阵乘法和卷积运算。通过混合精度计算,Tensor Core 使用半精度(FP16)输入输出,内部以全精度(FP32)计算,确保精度同时提高效率。相比传统 CUDA Core,Tensor Core 每个时钟周期可执行 64 个浮点运算,大幅提升计算速度。其工作原理包括指令流水线、线程执行等多级优化,确保高效并行处理。通过分块、分配和并行执行策略,Tensor Core 能有效处理大规模矩阵计算,极大加速神经网络模型的训练和推断。
947 1
【AI系统】Tensor Core 深度剖析
|
Serverless 数据安全/隐私保护 前端开发
大模型代码能力体验报告之贪吃蛇小游戏《一》:Claude.ai篇 - 生成、预览和快速部署的serverless一条龙
本文介绍了通过Claude.ai生成并优化Web版贪吃蛇游戏的过程,展示了其强大的代码生成功能及用户友好的界面设计。从初始版本的快速生成到根据用户反馈调整游戏速度,再到提供多种实用工具如文件管理、版本控制和一键部署,Claude.ai不仅是一个代码助手,更像是一个全面的serverless开发平台。文中还呼吁国内厂商关注此类技术的发展。
666 2
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
435 0
Windows 平台安装 MongoDB
|
关系型数据库 MySQL 数据库
如何在MySQL中查看已创建的数据库列表?
【5月更文挑战第22天】如何在MySQL中查看已创建的数据库列表?
1190 1
|
存储 测试技术 块存储
阿里云块存储团队软件工程实践【对外版】
作者:晴筱、石超、张小路序“我背上有个背篓,里面装了很多血泪换来的经验教训,我看着你们在台下嗷嗷待哺想要这个背篓里的东西,但事实上我给不了你们”,实践出真知。 这是阿里云块存储团队内部的一次新人培训材料,内容源自老同学们的踩坑经验,总结成案例和方法分享公示,实践和方法论不限于分布式系统,希望对读者有启发。本文主要包括以下三个方面:编码习惯(开发、测试、Review,Bad/Good Case)研发
1111 5
阿里云块存储团队软件工程实践【对外版】