写点什么

成本会计会导致无价值的代码吗?

  • 2007-06-15
  • 本文字数:1143 字

    阅读完需:约 4 分钟

成本会计是分析项目货币价值的标准会计方法,它将项目的各部分分别对待并且鼓励进行局部优化。成本的局部优化意味着强调完成任务的时间,而使任务完成时间最小化的关注就意味着你没时间进行重构和其它完善工作,因为这类工作太浪费时间了。这就是“万源之源”,就是不做这些事的常见理由,即“老板没有给我足够的时间做这些事”。

Henrik Mårtensson 其博客中提到了约束理论(Theory of Constraints), 并说明产量会计(throughput accounting)是如何营造一个可以接受敏捷开发实践的环境的。他通过一个假想的例子来告诉我们:

假如有两个项目团队,A 团队和 B 团队。每个团队都一个项目经理,四个开发人员和三个测试人员。每个团队成员的薪水是€3,500/ 月,工作时间是 160 小时 / 月。项目经理的薪水是€4,000/ 月。两个团队的生产率都是 80 个故事点 / 星期。 在团队 A 中,开发人员都在拼命工作,但测试人员却有很多空闲时间,时常上网冲浪。在团队 B 中,却是另一种景象。测试人员刚好跟上开发步伐,所以开发人员降低了开发速度以免测试人员处理不完。在某一天,两个团队都发现了一个缺陷。这两个缺陷都需要一个开发人员花八小时来修复。那么,团队 A 和团队 B 的成本各是多少呢?

这是给读者的一个思考题:“发现一个缺陷时会怎样?”成本会计告诉我们,这两个团队修复这个缺陷的成本是一样多的。但是多想一会儿,你就会发现这其实只是一个假象:

在团队 A 中,一个开发者去修复这个缺陷时,会直接影响整个团队的生产率。而在团队 B 中,开发者有一定的空闲时间。他们能修复这个缺陷却不受太大影响,在整个团队生产率上可能根本没有什么影响。即使不详细说明,结果也很明显,对两个团队的影响是完成不同的。

那么,问题在哪?关键在于成本会计强调的是局部最优,而实际上我们需要全局最优。利用成本会计,我们营造了一种环境,在该环境下,我们不鼓励任何延长局部周期时间的行为。

简而言之,假如你把软件开发项目的每个组成部分都看作是与其它部分相互独立的部分,那么关注任务完成时间就变成非常重要的了。假如你关注任务完成时间,你就不会在一些琐事上浪费时间,例如重构、写单元测试,以及进行领域设计。就算你想做这些事,管理者也会督促你开始新的任务。

看看“约束理论”和精益生产(Lean Manufacturing)也没什么新鲜的: David J. Anderson 写了一本书,名为《软件工程的敏捷管理(Agile Management for Software Engineering: Applying the Theory of Constraints for Business Results)》,而 Mary 和 Tom Poppendieck 因其在精益软件开发方面的工作而闻名。随着这个社区的成长,我们将看到从这两个领域产生的新观念变成主流,而它们的术语也会变得像“站立会议”和“结对编程”一样普遍。

查看英文原文: Does Cost Accounting Cause Crappy Code?

2007-06-15 02:001021
用户头像

发布了 100 篇内容, 共 24.3 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

好用的配置工具yaml | python小知识

AIWeker

Python python小知识 三周年连更

阿里云大数据架构师推荐学习的Flink入门与实战

大数据 flink

综合清理优化工具:MacCleaner PRO激活版

真大的脸盆

Mac Mac 软件 清理工具 系统清理 优化软件

【Linux】之如何卸载干净zabbix服务?(超详细)

A-刘晨阳

Linux zabbix 三周年连更

AI 圈新晋顶流:AutoGPT,Star量近8万,远超PyTorch

Openlab_cosmoplat

人工智能 开源社区 autogpt

聊聊实例化需求

老张

需求分析 实例化需求

MySQL 主键自增也有坑?

江南一点雨

MySQL

开源即时通讯IM框架MobileIMSDK的微信小程序端技术概览

JackJiang

网络编程 IM 即时通信

Mybatis 通过接口实现 sql 执行原理解析

Java mybatis SQL执行

同时斩获7大offer的终极原因,全靠这套Java笔记

程序知音

Java 后端 JVM java面试 Java面试八股文

抛弃丑陋的try-catch,优雅处理异常

Java你猿哥

Java SSM框架 异常处理 try-catch

阿里云何川:计算巢产品规划与生态策略解读

云布道师

计算巢

史上最全499道Java面试题:JVM+分布式+算法+锁+MQ+微服务+数据库

Java你猿哥

Java 架构 算法 JVM 多线程

Alibaba微服务线上架构攻略,从实战到源码精讲

程序知音

Java 微服务 SpringCloud java架构 后端技术

景区共享电动车厂家如何找?投放前景如何

共享电单车厂家

共享电动车厂家 景区共享电单车 共享电单车投放 共享电单车生产

GreptimeDB v0.2 正式发布 | 50%+ PromQL 兼容、写入性能优化、Dashboard with Playground

Greptime 格睿科技

云原生 时序数据库 PromQL 国产时序数据库

105道Java面试题,认真思考对你面试很有价值

Java你猿哥

Java spring 面试题 java面试 Java面经

关于Java微服务的打包问题

Java你猿哥

Java 微服务 SSM框架

好用的eval | python小知识

AIWeker

Python python小知识 三周年连更

最新Java岗面试清单:分布式+Dubbo+线程+Redis+数据库+JVM+并发

Java你猿哥

Java spring JVM 多线程 myssql

原生开发能不能动态化?移动端动态能力建设的流派有哪些?

没有用户名丶

实例分享| anyRTC 部署南京某区城市运行“一网统管”综合调度系统

anyRTC开发者

音视频 指挥调度 融合通信 快对讲 综合调度

MySQL中,当update修改数据与原数据相同时会再次执行吗?

Java你猿哥

Java MySQL SSM框架 update

云原生2.0网关API标准发展趋势

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

再获殊荣!华为云GaussDB喜提“科技进步一等奖”

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 4 月 PK 榜

工作两年才真正搞懂Spring的核心概念:spring基础框架及技术生态

Java你猿哥

Java spring Spring Boot spring框架 Spring核心

600+ 道 Java面试题及答案整理(建议收藏)

Java你猿哥

Java spring 分布式 mybatis 多线程

selenium源码通读·9 |webdriver/common/desired_capabilities.py-DesiredCapabilities类分析

Python 测试 自动化测试 源码剖析 selenium

Rainbond 结合 Jpom 实现云原生 & 本地一体化项目管理

北京好雨科技有限公司

Kubernetes 云原生 rainbond 企业号 4 月 PK 榜

详解HTTP Keep-Alive选项说明及注意事项

阿泽🧸

keep-alive 三周年连更

2023年,人工智能和数据训练呈现哪些新趋势?

澳鹏Appen

人工智能 机器学习 数据标注

成本会计会导致无价值的代码吗?_研发效能_Amr Elssamadisy_InfoQ精选文章