Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

《快速开发》—— Steve McConnell #65

Open
thzt opened this issue Nov 23, 2021 · 0 comments
Open

《快速开发》—— Steve McConnell #65

thzt opened this issue Nov 23, 2021 · 0 comments

Comments

@thzt
Copy link
Owner

thzt commented Nov 23, 2021

开发人员分两种:

  • 一种是没有空余时间深入了解和学习快速开发的
  • 另一种是真正掌握快速开发精髓后才有了富余时间的

软件开发人员基本上处于进退两难的境地,一方面他们为解决开发中所碰到的各种问题殚精竭虑,几乎没有时间去钻研有效的实用技术;另一方面,如果不学习掌握软件快速开发方法,他们永远不会有足够的时间。
摆在他们面前的问题是,在 “尽快交工” 计划的压力下,如何在开发进度与软件质量之间达到最理想的平衡。

软件开发实践的问题普遍存在。
一些调查表明,2/3 的项目超出了估算的时间。
大型项目平均超出交付时间的 20% ~ 50%,项目越大,超出计划的时间越长。

一直以来,开发速度的问题都是软件行业必须解决的首要问题。
虽然软件开发速度缓慢的现象普遍存在,但有些组织还是在进行快速的开发。
调查人员发现,同一行业的两家公司生产效率的差别有可能达到 10:1,甚至更大。

快速开发的成功取决于以下两个要素:

  • 选择有效的实践而不是无效实践
  • 选择有利于完成项目进度目标的实践

如果将 100 位世界级的音乐家组成一个乐队而没有指挥,简直无法想象这个世界级的乐队会演奏出怎样的音乐。
木管与铜管乐器的定音可能很难匹配,让这些音乐家发挥他们的最佳水平不如让他们知道何时应该大声以及何时应该轻柔来的重要,这样组合起来的乐队简直是在浪费人才。

然而,这样的人才浪费在软件开发方面也很常见,优秀的团队、专业的开发人员以及采用最新的开发实践,仍然无法达成项目计划。
想实现快速开发,人们容易掉入的一个诱人的陷阱就是国语关注个体的开发实践细节。

快速开发的总体策略:

  • 避免典型错误
  • 打好开发基础
  • 管理风险,以避免灾难的发生
  • 采用面向进度的实践

快速产品开发不是快速整合出一个产品使其尽快推向市场(也许已经晚了),而是一种从基础开始建立的战略能力。

开发速度的四个维度:

  • 人员:人件比其他因素对软件性能与软件质量的影响更大
  • 过程:避免返工、质量保证、开发基础、风险管理、资源目标、生命周期计划、面向客户的开发
  • 产品:对产品规模和产品特性的关注,意味着巨大的缩短计划进度的机会。
  • 技术:从使用低效工具转为使用高效工具也是你提高开发速度的快捷方法。

目标设定

人的激励是增加生产力的最重要因素,目标设定正是利用了这一规律。
在设定目标时,产品经理或客户只是简单的告诉开发人员他们想要得到什么。
目标设定有利于增强士气,开发人员们通常会为了达到 “最短的进度”(或进度风险最小的目标,或进展过程可见的目标等)而格外努力工作。
不愿意把项目划分为一系列小而清晰的目标,是项目成功的一个主要障碍。


小型里程碑

小型里程碑是一种进行项目跟踪和控制的好方法,它能很好的提供项目状态的可见性。
它实际上是通过消除不可控制的风险和不能发觉的进度滞后来获得快速开发效果的。
它能应用于业务项目、封装商品软件和系统软件项目,它能在整个开发周期之内使用。
成功应用的关键包括克服管理人员的抵触情绪和使用这项活动真正保持 “小型” 的特征。


高效开发环境

软件开发是一种高强度的智力活动,需要长时间的专注。高效开发环境为开发人员提供了一个远离噪音和干扰的环境,让他们能有效的工作。
高效开发环境对任何类型和项目(业务系统、封装系统和系统软件)都有好处
一些公司在建立了高效开发环境后,不仅提高了生产率,还提高了公司人员的士气和稳定率。


快速开发语言

快速开发语言,泛指比传统的第三代语言更快实现的语言。第三代语言主要有 C/C++,Pascal 和 Fortran。
快速开发语言是通过减少构建一个产品所需要的工作量来节省时间的。
尽管在构建过程中已经体会到它能节省时间,但缩短构建期的能力也隐含在整个项目生命周期中。比较短的构建期形成增量式的生命周期,如渐进原型法的实现。
由于快速开发语言缺乏一流的性能、灵活性差以及只局限于特定类型的问题,所以通常适合开发公司内部商务软件和其发行量少于封装软件和系统软件的客户软件。


重用

重用是一家公司建立常用部件库的长远策略,它使新的程序可以很快的使用这些已有的部件来集成。
由于有公司管理层长期策略的支持,重用比其他任何快速开发方法更节省时间和工作量。
不仅如此,它还能被成功的应用于各类公司的软件开发。
重用也可以作为一种短期实践,在适当的时候得以实现,具体做法是将现有程序中的代码移植到新程序。
这种短期的应用也能产生明显的时间和工作量的节约,但是,其节约的潜力明显小于有计划的重用。


阶段性交付

阶段性交付是一种生命周期模型,在该模型中软件分阶段进行开发,通常先开发最重要的功能。
阶段性交付并不能减少软件产品研制所需要的时间,但是它能充分降低软件研制中的风险,而且它能提供切实的、客户可见的以及管理者评价项目状态时所需的标记。
它成功应用的关键在于确保产品体系结构的稳固性,同时又可精心确定产品交付的阶段。
阶段性交付能提高代码的整体质量,降低项目被取消的风险,而且对贴近项目预算(build-to-budget)有帮助。


W 理论管理

通常一个软件项目涉及很多带有各自利益的干系人,包括老板、开发人员、最终用户、客户、维护者等。
W 理论提供了一种与各自利益和谐一致的项目管理框架。
它的基础:开诚布公的了解干系人各自的利益,他们需要什么,并对干系人的要求所产生的的冲突进行协商,然后组织项目,让所有干系人实现各自的要求。
W 理论通过提高协调工作的效率、改善进度可视性以及降低风险来节约时间。

软件项目 W 理论管理认为,在一个软件开发的过程中,让所有的干系人都成为获胜者,是软件项目成功的必要和充分条件。
以 赢-输(win-lose)或者 输-输(lose-lose)模式开展的项目最终都不会成功。

W 理论管理通过将所有干系人放在谈判桌同一侧的办法来支持快速开发。
在这些部门或成员之间的冲突是大多数软件项目管理问题的根源,而且这将影响到你设定目标、确定交付日期、优先级别的分配和适应变化的能力。

让所有人成为赢家:

  • 确定共同获胜的前提:了解人们希望如何获胜;建立合理的预期;将大家的任务与他们的获胜条件相匹配;营造一个支持项目目标实现的环境
  • 建立一个共赢的软件开发过程:做一个现实的计划;用计划来控制项目;辨认并管理一方获胜一方失败或者双方失败的风险;让大家都参与进来
  • 构建一种共赢的软件产品

工具组

工具组方法,是指在公司内建立一个小组专门负责收集、评估、协调使用及传播介绍各种新开发工具。
这样可以减少尝试和犯错误的次数,任何一个需要同时开发两个以上系统的单位都可以建立一个工具组,尽管有时所谓的 “小组” 其实只有一位非全职工作的人员。


构建用户界面原型

构建用户界面原型就是快速开发一个用户界面来探究用户界面设计和系统的需求。
有时采用一种专门的原型语言来构建用户界面;有时也直接用目标语言来构建原型。
用户界面原型要么是被舍弃掉,要么就直接发展为最终产品。舍弃或者逐渐展开的决策是成功的关键。
其他一些成功的关键因素包括最终用户的适时参与,让最初实践的原型尽可能简单,并且使用有经验的开发人员。

  • 减少风险
  • 缩小系统
  • 简化复杂系统
  • 减少需求的变化
  • 提高可见性
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant