<% if session("name")<>"" then response.write("当前用户:"&session("name")) response.write("  注销") response.write("  修改资料") else if request.cookies("name")<>"" then response.write("当前用户:"&request.cookies("name")) response.write("  注销") response.write("  修改资料") end if end if %>
首页 > 铸锐论坛>软件工程 >"软件工程"中的分工有效吗?

应用性能管理

 
  • 在服务器端进行数据库审计的优势
  • 服务器端审计工具与所谓非侵入性审计工具的比较
  • 如何提升运维管理
  • ITIL提升中国电信运维管理系统建设
  • 提高Java性能的几个高效用法
  • 提高J2SE性能的代码技巧(上)
  • 提高J2SE性能的代码技巧(下)
  • 应用管理的概念和流程
  • 应用管理的运营和优化
  • 开源时代:Navicat实现从MS SQL到MySQL的数据迁移
  • 使用Navicat导入数据到MySQL
  • 单元测试中贯彻持续性能管理
  • 单元测试性能分析报告
  • 利用Hyperic HQ管理WebLogic
  • Hyperic HQ监测Linux系统10条最佳成功经验
  • 什么是服务等级管理
  • 服务等级管理的步骤
  • 服务等级管理中的关键控制要素
  • 服务等级管理中需要注意的几个问题
  • 什么是容量管理
  • 容量管理的几个重要环节
  • 容量管理中的关键控制要素
  • 容量管理中需要注意的几个问题
  • 持续性能管理的先决条件
  • SQL Server调优的五个步骤(上)
  • SQL Server调优的五个步骤(下)
  • J2EE性能问题的分析
  • J2EE性能问题的诊断
  • J2EE性能问题的诊断示例
  • 应用性能管理-从操作系统做起
  • SQL Server常见性能问题的优化
  • 应用性能管理(APM)的价值分析
  • Bea WebLogic Portal的性能监测和诊断
  • 数据库性能基准的五个问题
  • Portal的性能挑战
  • 在多种数据库环境下管理业务需求(下)
  • Oracle DBA如何管理DB2(下)
  • 在多种数据库环境下管理业务需求(上)
  • Oracle DBA如何管理DB2(上)
  • SQLServerSQL调优技巧
  • 诊断应用数据库的性能瓶颈
  • Oracle优化的五个方面
  • Microsoft的优化SQL方法
  • 理解SQL Server的SQL查询计划
  • 自动化性能测试
  • 优化应用质量和性能,支持和推动业务发展
  • 从PMO到CIO办公室—PMO的发展趋势
  • 实施自动化功能测试的解决方案
  • 软件自动化测试流程
  • 测试自动化的成功经验
  • 无计划的变化导致的IT风险
  • 降低无计划的变化导致的IT风险
  • 应用性能管理中的价值链分析
  • 应用系统"亚健康"的严重性
  • 应用系统"亚健康"现象和原因
  • 性能测试的准备
  • 性能测试的六个阶段
  • 性能测试的容量评估
  • 优化DB2数据库的十个最佳实践
  • 优化DB2数据库的十个最佳实践(续)
  • 在生产中监测和优化J2EE应用性能
  • 改善J2EE性能和用户体验的管理变革
  • 跟踪数据库性能变化
  • 优化ERP应用
  • 在生产中测量J2EE应用性能
  • Oracle SQL性能优化技巧1
  • Oracle9i查询优化工具初探
  • APM的方法和技术实现
  • J2EE性能问题的症状和优化
  • 构造高性能J2EE应用10个技巧
  • 软件工程与知识管理

     
  • 采用CASE工具管理多个并行应用软件开发项目
  • "软件工程"中的分工有效吗?
  • 实施知识管理软件的几个细节
  • 拯救知识管理
  • 知识管理与知识管理软件
  • IT培训师指要
  • 推荐产品的使用

     
  • Toad快速入门
  • PerformaSure J2EE性能诊断
  • PerformaSure J2EE健康检查示例
  • Spotlight实时诊断WebSphere Server实践
  • Spotlight实时诊断WebLogic Server实践
  • JProbe实践之"性能瓶颈"
  • JProbe实践之"短期对象循环"
  • JProbe实践之"内存泄露"
  • JProbe实践之"代码覆盖"
  • Quest Jprobe最佳实践(上)
  • Quest Jprobe最佳实践(下)
  • Foglight-APM与SLA的有力武器





  • "软件工程"中的分工有效吗?
               www.InnovateDigital.com 整理

         "软件工程"是指我们在学校中学习的那些理论,经过多年的开发实践和技术交流中,我们不断在对传统的软件工程理论进行反思。

      问题的提出

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

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

         答案是否定的。

      问题的分析

    1.忽略了沟通的成本

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

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

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

    2.导致混乱

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

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

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

    3.缺乏科学量化的手段

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

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

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

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

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

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

      忠告

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


    (北京铸锐数码科技有限公司 www.InnovateDigital.com)

     
    北京铸锐数码科技有限公司 版权所有 © 2008
    中国·北京市海淀区大钟寺13号华杰大厦8A9-2室
    邮编 100098 电话 010-62139280 传真 010-62135268    京ICP备05019494