写点什么

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

  • 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:001216
用户头像

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

关注

评论

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

跟着卷卷龙一起学Camera--延迟02

卷卷龙

ISP camera 10月月更

Java核心之多态

魏铁锤

java 编程 10月月更

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析04

桑榆

源码刨析 10月月更 C++

Java多线程 Callable和Future

Yeats_Liao

后端 Java core 10月月更

Java多线程 Future和FutureTask的区别

Yeats_Liao

后端 Java core 10月月更

Web3.0杂谈-#006(53/100)

hackstoic

DAO Web3.0

Java多线程 线程池Executor框架

Yeats_Liao

后端 Java core 10月月更

基于 HDP 构建企业数据平台

Bright

大数据 数据开发 数据平台

深入理解 Go 语言的一等函数及其应用

宇宙之一粟

函数 Go 语言 10月月更 匿名函数

TLS加密远程连接Docker

程序员欣宸

Docker 容器安全 10月月更

CorelDRAW 2019 软件应用项目(三)

张立梵

设计师 CorelDRAW 2022 10月月更

MAC地址与IP地址

急需上岸的小谢

10月月更

kubernetes

急需上岸的小谢

10月月更

SpringBoot的实体类中常用的注解

Java学术趴

10月月更

微信朋友圈的高性能复杂度分析

Louis

2022-10-16:以下go语言代码输出什么?A:timed out;B:panic;C:没有任何输出。 package main import ( “context“ “fmt“

福大大架构师每日一题

golang 福大大 选择题

Java编程之方法重写

魏铁锤

后端 java 编程 10月月更

java之字节型文件流笔记

魏铁锤

java 编程 10月月更

架构--作业2

李某人

架构实战营

跟着卷卷龙一起学Camera--延迟01

卷卷龙

ISP camera 10月月更

渲染农场是什么_云渲染农场优缺点有哪些?

Renderbus瑞云渲染农场

云渲染 云渲染农场 渲染农场 Renderbus瑞云渲染

跟着卷卷龙一起学Camera--延迟03

卷卷龙

ISP camera 10月月更

微信朋友圈的高性能复杂度分析

乖乖IvyShine

02微信高能性复杂度分析

神奇的叶叔叔

TCP 复位攻击原理和实战复现

急需上岸的小谢

10月月更

微信朋友圈架构高性能复杂度分析

π

#架构实战营 架构实战训练营9期

挑战30天学完Python:Day5 数据类型 - 列表list

MegaQi

Python 挑战30天学完Python 10月月更

当前Serverless的六大局限性

阿泽🧸

Serverless 10月月更

SpringBoot实体类常用注解(二)

Java学术趴

10月月更

架构实战训练营模块 2 作业

atcgnu

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