免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 30515 | 回复: 83
打印 上一主题 下一主题

论“软件工程”中的分工 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-27 10:57 |只看该作者 |倒序浏览
"软件工程"是指我们在学校中学习的那些理论,经过多年的开发实践和技术交流中,我们不断在对传统的软件工程理论进行反思。

问题的提出

在将软件开发分为3个阶段(需求分析、设计和编程)时,我们很自然地会提出一个问题,"软件开发者应该继续提高专业化程度吗?"毕竟,劳动的分工是工业革命的基础。正是由于将制造业分解成多个精确定义的小任务,一组工人的生产率才能得到突飞猛进。所以,我们想当然地认为:对于软件开发,这种"专业化"的方式也将同样有效。

这看起来显而易见,不是吗?让一些人成为专业的分析师,专门获取和记录用户的需求;让一些人成为设计师,负责从需求文档制造出设计规格文档;程序员则负责根据设计规格进行编码。很显然,这应该是一种更加高效的工作方式,不是吗?答案是否定的。

问题的分析

1. 忽略了沟通的成本

同一件任务被切分而成的小步骤越多,人与人之间传递信息所耗费的时间总量就越多。因此,在不需要大量交流工作中(例如制造业中的很多体力劳动)中,流水式生产线能够运转得很好;但在需要大量交流的脑力劳动(尤其是软件开发)中,这种方式一败涂地。

软件开发的绝大部分工作都是在团队成员的头脑中完成的。如果要强迫每个人专门从事某一项特定的工作,那么任何一个简单的项目都会需要传递更多额外的中间产品。每一次的传递都可能带来潜在的错误和缺陷,因此,每次传递都是相当昂贵的。没错,如果要求每个人都编写大量的文档,以降低其他人作出错误理解或假设的风险,我们当然可以将"由于交流而出错"的可能性降到最低。但是,"编写更多文档"的工作量同样也是计算在项目的开销中的。正如Fred Brooks所指出的,如果决定某项任务成败的因素是项目组成员之间的交流效率,那么加入更多的人就只会延缓项目的进展。

当同一个开发者对需求、设计和源代码都有着深入的理解时,软件开发就能够获得最好的效果。Steven Levy所采访的所有黑客都是独自进行设计和编码的。在对"影响了(个人)计算机产业的19个程序员"的采访中,Susan Lammers也提到了同样的现象。在这些伟大的程序员中,没有任何一个使用过软件工程风格的分工方式,他们通常都是独自深入整个设计和编码工作。很有趣的是,他们几乎每个人都有自己独特的工作风格。

2. 导致混乱

将传统的劳动分工强加于软件开发,结果是导致分析师、设计师、程序员、测试员、用户界面专家、文档工程师、技术支持工程师之间不断地传递信息。过多的交流极大地降低了效率,项目被不断拖延。任何一点变化出现时,都必须将信息沿整条开发链传递下去,并导致一片混乱。项目结束后不久,软件就变成了"遗留系统",因为没人清楚它究竟时如何工作的。

软件工程对技术进行人为的细分,结果导致任何一个人都不可能了解整个应用程序。软件工程解决这个问题的办法不是再开发者之间进行交叉培训,让他们了解全局,而是不断强调文档的神话-良好的文档能让任何人理解整个应用程序。不幸的是,尽管文档能够很好地记录软件中的抉择和协议,但却无法有效地保留、传递关于具体问题的详细信息,而这些具体细微的知识才是最重要的。

软件工程的另一个贻害是:它把文档搞得声名狼藉。很多项目实际上根本没有任何文档,因为年轻的开发者们本能地拒斥这种"软件工程的产物"。

3. 缺乏科学量化的手段

"科学管理"用科学取代了经验法则。在"科学管理"的方法中,数字支配一切。如果要改进什么东西,你首先必须对它进行度量。如果什么东西不能被度量,就不可能对它进行改进。管理者知道一切。任何工作都必然有一条最佳途径。

所以,看到软件工程师发明了许许多多软件开发的度量方法,我们也就不会觉得太惊奇了。甚至,由"科学管理"带来的"时间-动作研究"(time-and-motion study)已经被用于研究软件的使用情况了。在某些特定的问题上,人们已经规定出一些定量法则,例如将光标移动到按钮上需要多长时间(Fitts 法则)、在概率相当的行为之间作出选择需要多长时间(Hick法则)等等。

在对量化管理的狂热之中,人们常常忽视了机械活动与智力活动之间的差异。Fitts法则主要时针对机械活动的-尽管移动鼠标、点击按钮的动作需要眼睛和手的协调,但它仍然只是一个(比较复杂的)机械活动。Hick法则则试图度量人大脑中的活动。这正是软件工程犯下的一个经典错误:它认为能够度量的东西时最重要的,但情况并非如此。

从根本上来说,软件开发还是一项智力活动。打字的速度从来不是、也永远不可能是软件开发的瓶颈。要谈论一项智力活动,唯一的方式就是通过不精确的讨论,因为你能度量的东西对于提升效率根本无济于事。软件工程之所以有害,因为它忽视了开发者之间讨论的价值-而那是我们理解软件开发、提高开发效率的唯一途径。

软件工厂总是表现出一种倾向:它们试图模仿制造业从前的模式。但是,就连制造业也在不断发展。现在,哪怕是最热衷于生产线的人也早已不再谈论"完全集成的制造业"了。如今,汽车企业不再拥有钢铁工厂、煤矿和橡胶种植园。他们不再自己制造轮胎,而是向擅长制造轮胎的企业购买轮胎。对于软件组件,道理也是一样:借助于唾手可得的组件,小型团队也可以开发出优秀的软件。

"软件工厂"的概念没有真正流行,因为软件的制造实在太容易了。如何与用户协作、交流,创建一个良好的设计,并使其不断演进发展,这才是软件业中真正的难题。

忠告

如果你的项目拥有实际上无限的资源,那么软件工程就是一条有效的软件开发途径。但是,如果你的资源有限,如果你养不起数百名软件工程师,请及时放弃软件工程。你必须认识到:软件开发更多地是一项智力的、社会性的工作,而非机械性的工作。认识到这一点之后,你将可以从软件工程中学到有用的东西。


转自:UML软件工程组织

论坛徽章:
0
2 [报告]
发表于 2007-09-27 11:34 |只看该作者
这文章提出了问题,但是问题未解决

而且很明显,大型项目不能靠一个人

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2015-08-06 06:20:00每日论坛发贴之星
日期:2015-08-06 06:20:00
3 [报告]
发表于 2007-09-27 14:06 |只看该作者
此题无解。
软件工程是一个理论的东西,如果完全按理论进行,必须得满足绝对的条件或大部分的条件,但有这种条件的企业有多少?日本这方面做的不错,但他们是在利用廉价的中国劳动力做为其条件的补充,印度好象也不错,但也主要是做人家的外包,看不出他们的前途在哪里。
实际上软件工程所鼓吹的是培养一大批的软件工人,以最低的投入换取最高的回报,根本没有从个人的发展上着想过,也没有为任何一个软件工人想过其职业规划的事。

论坛徽章:
0
4 [报告]
发表于 2007-09-27 14:19 |只看该作者
原帖由 山中无老虎 于 2007-9-27 14:06 发表
实际上软件工程所鼓吹的是培养一大批的软件工人,以最低的投入换取最高的回报,根本没有从个人的发展上着想过,也没有为任何一个软件工人想过其职业规划的事



这个没理解,或者说不至于吧

不过现在有些公司确实是,大项目分工很细,以致于很难从整体把握。类似于一个流水线工,能完成一个工序,但对整个产品无能为力。

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2015-08-06 06:20:00每日论坛发贴之星
日期:2015-08-06 06:20:00
5 [报告]
发表于 2007-09-27 14:37 |只看该作者
原帖由 knighter 于 2007-9-27 14:19 发表



这个没理解,或者说不至于吧

不过现在有些公司确实是,大项目分工很细,以致于很难从整体把握。类似于一个流水线工,能完成一个工序,但对整个产品无能为力。

工业上是可行的,因为是一种体力或机械的劳动。而管理理论的由来就是为了提高生产效率,换句话说就是能得取更高的利益。
软件工程也有按这个方向发展的趋势,把所有的东西完全细化,每个人只知道自己的一部分,那么些人出去后可以说只是一个编程的好手,但根本没有自己的系统思路,那么这是什么?这就是一个软件工人,如果只有少数的这种人,工资当然会高,但如果培养了很多的这种人,工资水平会如何?所以我说软件工程实际上也是为了利益而提出的,可能有些偏激。
至于说没为个人着想,你想,一个项目中,你只了解自己的一部分,对别人的一部分根本不清楚,那你这部分的思维能拿的出去吗?拿不出去的话,你想跳槽会有多大的成功率呢,待遇提高的可能性又有多大呢?对于软件工人,培养的只是开发能力,而不是处理事情的能力,这时候想掌握一些东西只能靠自己,能说他为个人的职业规划着想了吗?

论坛徽章:
0
6 [报告]
发表于 2007-09-27 14:47 |只看该作者
原帖由 山中无老虎 于 2007-9-27 14:37 发表
工业上是可行的,因为是一种体力或机械的劳动。而管理理论的由来就是为了提高生产效率,换句话说就是能得取更高的利益。
软件工程也有按这个方向发展的趋势,把所有的东西完全细化,每个人只知道自己的一部分,那么些人出去后可以说只是一个编程的好手,但根本没有自己的系统思路,那么这是什么?这就是一个软件工人,如果只有少数的这种人,工资当然会高,但如果培养了很多的这种人,工资水平会如何?所以我说软件工程实际上也是为了利益而提出的,可能有些偏激。
至于说没为个人着想,你想,一个项目中,你只了解自己的一部分,对别人的一部分根本不清楚,那你这部分的思维能拿的出去吗?拿不出去的话,你想跳槽会有多大的成功率呢,待遇提高的可能性又有多大呢?对于软件工人,培养的只是开发能力,而不是处理事情的能力,这时候想掌握一些东西只能靠自己,能说他为个人的职业规划着想了吗

确实只能靠自己了

现在一个项目里,能从大局考虑的估计也就项目经理等少数人。要想自身发展,真的要在工作中主动多学习。当然有领导提拔就更好了

机会可遇不可求,修为在自身。

但是我认为,软件工程是有助于培养一个人在软件项目中的大局观的

论坛徽章:
2
综合交流区版块每日发帖之星
日期:2015-08-06 06:20:00每日论坛发贴之星
日期:2015-08-06 06:20:00
7 [报告]
发表于 2007-09-27 15:20 |只看该作者
原帖由 knighter 于 2007-9-27 14:47 发表

确实只能靠自己了

现在一个项目里,能从大局考虑的估计也就项目经理等少数人。要想自身发展,真的要在工作中主动多学习。当然有领导提拔就更好了

机会可遇不可求,修为在自身。

但是我认为,软件工程是有助于培养一个人在软件项目中的大局观的

学习软件工程的时候是这样的,但身在其中,特别是被别人指挥时,按标准的说法就不是了。

论坛徽章:
0
8 [报告]
发表于 2007-09-27 16:01 |只看该作者
原帖由 山中无老虎 于 2007-9-27 14:06 发表
此题无解。
软件工程是一个理论的东西,如果完全按理论进行,必须得满足绝对的条件或大部分的条件,但有这种条件的企业有多少?日本这方面做的不错,但他们是在利用廉价的中国劳动力做为其条件的补充,印度好象 ...

企业毕竟是个盈利机构,没有义务为员工的职业生涯做规划。反过来也差不多,想想又有几个员工会在企业的长远发展上花心思了?
企业与员工之间的关系,本来就是相互利用。企业接来的单需要人去干活;员工依附企业也是为了生存需要。

论坛徽章:
0
9 [报告]
发表于 2007-09-27 16:16 |只看该作者
原帖由 jaffaz 于 2007-9-27 16:01 发表
企业毕竟是个盈利机构,没有义务为员工的职业生涯做规划。反过来也差不多,想想又有几个员工会在企业的长远发展上花心思了?
企业与员工之间的关系,本来就是相互利用。企业接来的单需要人去干活;员工依附企业也是为了生存需要。

这是国内企业的现状,外企一般都会注重员工的职业规划的。

而老虎也是那种为手下兄弟作规划的领导

员工对公司的忠诚很重要,问题是现在企业给的待遇不好,不为员工着想,员工哪来的忠诚可言?

论坛徽章:
0
10 [报告]
发表于 2007-09-27 16:22 |只看该作者
原帖由 knighter 于 2007-9-27 16:16 发表

这是国内企业的现状,外企一般都会注重员工的职业规划的。

而老虎也是那种为手下兄弟作规划的领导

员工对公司的忠诚很重要,问题是现在企业给的待遇不好,不为员工着想,员工哪来的忠诚可言?

老虎的百层大楼我也看过,只能说他手下那位兄弟太走运了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP