`
hideto
  • 浏览: 2683003 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《快速软件开发》笔记三,最佳实践

阅读更多
变更委员会
变更委员会是控制软件产品变更的一种措施
通过提高性能变更的可视性、减少项目中难以控制的变更数目等方法,可以对项目产生快速开发的效果
主要风险:批准的变更太少或太多

日创建和冒烟测试
使用日创建和冒烟测试的关键:
1,每天进行创建
2,每天进行冒烟测试
3,冒烟测试随着产品的增长而增长
4,应把一个良好的创建放在最重要的地位
5,制定的工作步骤应确保失败的创建只是个例外,而不是惯例
6,在压力下不要放弃这个过程
主要风险:有过于频繁发布程序中间版本的压力

变更设计
基于变更设计方法成功的关键:
1,识别最有可能发生的变更
2,使用信息隐藏将系统与可能发生变更所产生的影响分离开来
3,定义程序族而非一次只考虑一个程序
5,不要信赖只要使用面向对象的编程语言就能自动完成设计工作
主要风险:过度依赖编程语言来解决设计的问题,而不是采用面向变更设计的方法

渐进交付
成功运用渐进交付法的关键:
1,确信产品框架能够支持你所想象的各种未来的系统发展方向
2,仔细地定义系统核心
3,根据你对客户需求改变的适应程度,来确定是向渐进原型还是向阶段交付倾斜
4,假定随着版本的增加,修改会越来越多,那么在最初的版本中你应当按照从“最确定”到“最不确定”的顺序来安排各项系统功能
5,处理好用户期望与项目进度、预算以及结果之间的关系
6,考虑一下纯粹的阶段交付法或纯粹渐进原型法是否更适合于你的项目
主要风险:
1,目标偏移(feature creep)
2,减弱了对项目的控制
3,不切实际的项目进度和资金预算
4,在开发过程中开发者对开发时间的低效率使用

渐进原型
成功使用渐进原型法的关键:
1,在一开始就决定要开发的原型是要保留下来的还是要被丢弃的
2,明确控制客户及最终用户的期望与项目进度、财政预算以及产品性能之间的关系
3,限制最终用户与原型间的交流以便控制项目不受影响
4,使用有经验的开发人员,避免使用入门级的开发者
5,在每个阶段都使用设计检查列表以确保原型系统的质量
6,在每个阶段都使用代码质量检查列表以确保原型代码的可维护性
7,及早考虑产品性能
8,小心的控制原型开发本身
9,考虑渐进原型是否能为项目带来最大的益处?渐进交付或阶段交付是否会更好一些?
主要风险:
1,不切实际的进度与财政预算
2,建立原型的时间(prototyping time)没有被充分利用
3,不切实际的质量期望
4,设计不佳
5,缺乏可维护性

目标设定
目标设定有利于提高士气,开发者们通常会为了达到“最近的目标”而格外努力地工作
不愿意把项目划分为一系列小而清晰的目标,是项目成功的一个主要障碍
主要风险:如果目标产生变化,将会大大影响士气

检查
检查时一种正式的技术性回顾
这种正式的检查,比运行测试更有助于发现错误
它们带来快速开发的好处是因为能够在开发过程中及早发现错误,这样避免了昂贵的重建工作

联合应用开发(Joint Application Development, JAD)
JAD意味着开发者、最终用户以及其他有关人员集中在一起对产品进行设计
成功使用JAD的关键:
1,在JAD讨论中使用有经验的JAD主席
2,确保执行赞助商参与JAD过程
3,确保关键人员全职地参与到JAD讨论中
4,在非办公场合进行讨论,确保没有电话和外界打扰
5,精心对参与人员做好准备工作,确保他们理解JAD以及JAD讨论所要达到的目标
6,在JAD设计结束后,帮助最终用户建立现实的期望
7,在JAD设计完成后,使用一种增量生命周期模型来开发系统
主要风险:
1,由JAD会议产生的不切实际的效率期望
2,由JAD会议产生的对剩余工作的过早的、不精确的估计

生命期模型的选择
产品开发风格随不同类型的项目变化很大,不同的风格要求完成不同的任务而且对任务的先后顺序也作不同的安排
主要风险:选择一个生命期模型本身不含任何风险,但对某个具体的生命期模型可能会包含附带的风险

测量
测量不仅有激励员工的短期效益,也有在成本、质量和进度方面的长期效益
应用测量成功的关键因素:
1,建立一个测量小组,这个小组负责确定有用的测量指标和帮助对各项指标进行测试
2,在一个合适的数据粒度(Granularity)下跟踪计算时间的数据
3,开始时采用少量的测量,根据目标、问题和测量标准来选择你想测量什么
4,不要仅仅收集数据,要分析数据且把他们反馈给测量数据相关的人员
主要风险:
1,对某个测量指标过度优化
2,在对员工评估中误用测量方法
3,从LOC(代码行)测量中获得误导信息

小型里程碑
小型里程碑式一种进行项目跟踪和控制的好方法,它能很好地提供项目状态的可视性
它实际上是通过消除不可控制的风险和不能发觉的进度滞后来获得快速开发的效果
成功应用小型里程碑的关键:
1,在合适的时候启动使用小型里程碑,可在项目的早期或者要对危机做出反应的时候
2,里程碑要小,一般间距控制在一到两天内
3,确保里程碑是详细的
4,准备地报告里程碑的进展情况
4,定期地评价进度并且在它们脱离里程碑进度时进行调整或者重新计划

外包
外包就是把软件开发承包给第三方厂商而不是在公司内部开发
成功应用外包的关键:
1,仔细选择外包承包商
2,与外包承包商仔细签订合同
3,至少要像自行开发项目那样来管理好外包软件项目
4,把与承包商交流放到优先位置(电子方式及面谈方式)
5,至少要像自行开发项目那样明确需求(除非需求说明是承包商的强项)
6,确保外包快速开发项目是公司的长期兴趣
主要风险:
1,把专业知识扩到其公司去
2,失去对进一步开发的控制
3,泄露机密信息
4,丢失进度可视性和对进度的控制

原则性谈判
原则性谈判时一种基于改善沟通和创造双赢的策略,而不是单方获利的谈判技巧
它可应用于需求分析、进度计划制定、性能修改讨论以及项目的其他阶段
要使原则谈判获得效果必须注意:讨论是对事不对人,讨论集中在项目获益而不在乎个人所处位置,要争创互利及坚持客观标准

高效开发环境
软件开发是一种高强度智力活动,它需要长时间地不间断地集中思想
高效开发环境为开发人员提供了一个远离噪音和干扰的环境以便他们能有效地工作
主要风险:
1,以装饰为目标的办公环境会导致生产率下降
2,搬迁造成停工
3,由于软件开发人员的优越待遇会产生各种反应

快速开发语言(RDLs)
快速开发语言是指那些比传统第三代语言能更快实施的语言
快速开发语言是通过减少开发工作量来获得时间的节省
成功应用快速开发语言的关键:
1,除语言本身外,要做的其他工作都是相同的
2,应用选择标准来选择快速开发语言
3,应用指导原则来应用快速开发语言
4,保守地估计快速开发语言能给开发工作带来时间的节省
5,在开发大型项目时要谨慎应用快速开发语言
6,在应用快速开发语言时,应该在设计和制定编码标准时多花时间
7,当采用快速开发语言时,可以考虑采用新的生命期模型,这样可以缩短对客户的反应时间
主要风险:
1,带来银弹错误和过高估计时间的节省
2,不能扩大到大型项目
3,鼓励鲁莽的编程

需求修正
需求修正就是对产品说明进行仔细检查,如发现不必要或者过分复杂的需求就去掉
主要风险:删除一些必要的需求

重用
重用是一个公司建立常用部件库的长远策略,它使新的程序可以很快地用这些已有的部件来集成
随机重用的成功因素:
1,充分利用新旧项目间开发人员的延续性
2,对资源和时间的节约不要过高估计
计划性重用的成功因素:
1,对重用项目确保是长期的且有高水准的管理层的支持
2,确保重用是开发过程中的一个组成部分
3,建立独立的重用小组,他们的任务是确定候选的可重用部件,创建支持重用的标准以及将与重用部件相关的信息介绍给潜在的客户
4,重点关注小型的、精巧的、针对于专门领域的部件
5,将设计的重点集中于信息隐藏和封装
6,通过良好的文档支持和尽可能少的错误,将可重用部件的质量保持在产品层的水平上
主要风险:如果为重用所准备的部件不仔细挑选,将有可能造成资源的浪费

签约雇佣
签约是一种能产生额外激励的方法,它使得签约的小组成员对未来的远景有清晰的认识,加上对项目有力地监控,可以确保签约小组所开发的产品能被接受
签约成功应用的关键:
1,一定要描绘出项目的远景,以便使得小组成员感觉值得签约
2,以自愿为原则实施签约
3,给小组足够的授权,以便小组成功地战胜对小组起到激励作用的挑战
4,对由于苦干而不是巧干所造成的效率降低要有充分的思想准备
主要风险:
1,增加无效性
2,降低对状况的可见性与控制能力
3,个人潜能发挥的可能性较少
4,撕毁约定(Burnout)

螺旋型生命期模型
螺旋型生命期模型关注的重点在于发现和降低项目的风险
用增加对计划的要求和实施的追踪,换来进展可视性的改善和大幅度降低风险

阶段性交付
阶段性交付并不能减少软件产品研制所需要的时间,但是它能充分地降低软件研制中的风险
阶段性交付成功应用的关键:
1,确保产品的结构对你所能想象到的、软件的未来可能的发展方向有足够的支持
2,确定第一个交付阶段,以便你能够尽早地将其交付
3,用主题来定义交付阶段,同时确保开发者能够参与定义主题和确定主题具体内容的活动
4,按照重要程度的顺序交付各个主题版本
5,考虑纯粹的阶段交付是否能够提供最大的好处,还是渐进交付或者渐进原型能提供更多的好处。认真考虑如何控制用户需求的变更。
主要风险:目标偏移

W理论管理
W理论管理成功应用的关键:
1,了解人们希望如何获胜
2,为全体干系者建立合理的期望
3,将大家的任务与他们的获胜条件相匹配
4,营造一个支持项目目标实现的环境
5,做一个现实的计划
6,用计划来控制项目的进展
7,监督并管理一方获胜一方失败或者双方失败的风险
8,让大家都参与进来
9,将产品与最终用户的获胜条件与维护者的获胜条件相匹配

舍弃型原型法
所谓舍弃型原型法,是指代码是为探究系统成功的关键性的因素而开发的,然后这些代码就被舍弃了
舍弃型原型法成功的关键:
1,选择开发原型的语言或环境时,主要看它生成舍弃代码的速度多快
2,一定要管理人员和技术人员都同意将舍弃型原型丢弃
3,将原型的工作重点放在那些不熟悉的领域
4,把原型法当作是科学实验来进行,而且要认真地对其进行监控
主要风险:
1,保留一个舍弃型的原型
2,没有有效利用建立原型的时间
3,不现实的进度和预算

限时开发
限时开发是确定时间的活动,它能够帮助开发团队提高紧迫感,也有助于把项目的重点放在产品的性能上
1,只对可以规定期限内完成的项目使用限时开发
2,确保最终用户和管理层对系统的核心功能已达成一致,而开发小组相信能够在规定时间内完成
3,确保限时开发小组的成员为项目进行签约
4,在限时开发的全过程中保证质量
5,如果需要的话,宁可减少功能也要保证进度,绝不延长工期
主要风险:
1,将限时开发应用于不适宜的工作产品中
2,为了保持特性的数量而不顾质量

工具组
工具组方法是指专门在公司内建立一个小组专门负责收集、评估、协调使用及传播介绍各种新开发工具

十大风险清单
十大风险清单是一种能够帮助我们监控软件项目风险的简单的工具
该清单中包括十个划分为等级1~10的最严重的风险并对各个风险所制定的预防计划
每周对清单进行更新和回顾,能够提高大家的风险意识,同时能提醒大家尽快找到解决方法

构建用户界面原型
构建用户界面原型就是快速开发一个用户界面来探究用户界面设计和系统的需求
成功应用用户界面原型的关键:
1,在项目开始时决定是渐进原型还是舍弃型原型
2,不管你采用舍弃型原型还是渐进原型,尽量为原型建立一个漂亮的外观
3,让用户参与,积极征求他们的反馈意见并且限制他们与原型的交互活动,避免引发不现实的期望
主要风险:
1,不断装饰原型
2,继续发展原型或者舍弃原型的风险取决于用户界面原型是继续开发还是被舍弃

自愿加班
自愿加班为开发人员提供了有意义的工作实践,也为管理人员提供了激励内部工作人员的机会,因而工作人员愿意超时工作
适当的自愿加班实际上可适用于任何环境,但是由于自愿加班和过度的强迫加班被广泛采用,实际上使得它的效果受到了一定限制
成功应用自愿加班的关键:
1,采用开发人员自愿加班方法而不要用领导者强迫的方法
2,激励开发人员的积极性,如成就感、成长的机会、工作本身的意义、个人生活受到尊重和技术领导的机会等,使得喜欢工作的开发人员会自愿增加工作时间
3,根据他们实际可能确定加班小时数
4,不论什么理由,不让开发人员过多地加班
主要风险:
1,由于过分的进度压力和过度的加班,反而影响进度
2,降低了响应需要紧急加班的应变能力
分享到:
评论
2 楼 夜鸣猪 2009-03-19  
不愧大佬级的
敬仰一下
1 楼 ym227316 2009-02-12  

相关推荐

    笔记:个人软件开发笔记

    【标题】:“笔记:个人软件开发笔记” 在个人软件开发过程中,笔记的记录至关重要,它可以帮助开发者系统地整理思路,回顾技术细节,以及追踪项目的进展。这个“笔记:个人软件开发笔记”很可能是某位开发者关于...

    软件开发课程小笔记(很有用的)

    12. **学习与成长**:软件开发领域日新月异,持续学习新技术和最佳实践是保持竞争力的关键。例如,学习新的编程语言、框架、云计算技术等。 这些笔记虽然以压缩包的形式呈现为“技术文档技术汇总.exe”文件,但它们...

    软件测试笔记一

    6. **测试领域首席专家**:负责研究新技术、同步最佳实践等。 从管理角度来看,可以进一步划分为: 1. **测试工程师(TE)** 2. **测试项目组长(TPL)**:负责项目级别的测试计划编制、任务分配和进度控制。 3. *...

    嵌入式开发笔记.pdf

    此外,笔记可能还会讨论嵌入式软件设计模式和最佳实践,以确保代码的可维护性和可扩展性。 在实际应用部分,笔记可能包括一些案例研究,比如智能家居设备的开发、自动驾驶汽车的传感器融合或者工业自动化系统的设计...

    软件工程师学习笔记大全(C++ JAVA)

    这份压缩包包含了多个不同主题的笔记文档,旨在帮助学习者深入理解和掌握软件开发的核心技能。 Oracle.pdf: 这份文档可能详细介绍了Oracle数据库系统,包括SQL语法、数据模型、表的创建与管理、索引、存储过程、...

    全网最全Android开发笔记.zip

    【Android开发笔记】是一部全面覆盖Android开发核心技术与实践的综合资料,旨在帮助开发者从零基础到精通,深入了解Android系统的工作原理以及应用开发的各种技巧。笔记包含了大量的实例代码、技术解析和实战经验,...

    金蝶EAS_BOS开发学习笔记

    9. **培训与实践**:金蝶EAS_BOS的学习笔记通常会涵盖以上知识点,并通过实例讲解和实战练习帮助读者掌握开发技巧和最佳实践。 通过深入学习“金蝶EAS_BOS开发学习笔记”,开发者不仅能理解EAS_BOS的基本概念和原理...

    软件工程知识复习笔记.rar

    《软件工程知识复习笔记》是针对软件开发过程中的核心理论与实践进行系统梳理的资料集。这份RAR压缩包包含了一张名为"软件工程知识.gif"的图像文件,很可能以图文并茂的方式呈现了软件工程的关键概念。下面我们将...

    软件工程实践(思维导图)学习笔记

    它致力于结合技术、管理和人员,通过合理的方法学指导和实践,来解决软件开发中遇到的问题。无论是生命周期方法学还是面向对象方法学,它们都是软件工程师应对复杂性和变化,提升软件质量和开发效率的有力工具。在...

    java超强笔记

    最后,笔记可能还会涉及一些设计模式,如单例模式、工厂模式、观察者模式等,这些都是软件设计中常用的最佳实践。 总的来说,"Java超强笔记"是一份全面覆盖Java基础知识的教程,无论你是零基础的新手还是想要巩固...

    Delphi 许多软件源码 笔记

    这部分可能是作者在学习过程中对源码的理解和心得,包含了对某些技术难点的解析,或者是对最佳实践的总结,对于初学者来说极具参考价值。 通过分析和学习这些源码,不仅可以提升Delphi编程技能,还能了解到软件...

    达内 软件工程师 java软件工程师 笔记 全套笔记

    总的来说,"达内 软件工程师 java软件工程师 笔记 全套笔记"提供了一个全面的学习路径,涵盖了Java软件开发的关键技术和最佳实践。无论是初学者还是有一定经验的开发者,都能从中受益,提升自己的专业技能。通过深入...

    《Android应用开发揭秘》读书笔记

    通过分析Android SDK中的示例项目,如NotePad,可以深入了解框架的内部工作原理和最佳实践,有助于提升开发技能和解决问题的能力。 ### 多媒体 - **音乐播放**:集成音乐播放功能,涉及音频文件的加载、播放控制等...

    笔记管理软件

    同时,这样的工具也可能包含一些实用技巧和最佳实践,有助于他们在.NET开发领域中不断提升。 总的来说,笔记管理软件是个人知识管理的重要组成部分,而针对.NET的笔记则可以帮助开发者深入理解这个广泛使用的开发...

    (考研复试)软件工程笔记.pdf

    RUP包含了一系列软件开发的最佳实践和方法,这些都可以按照项目的具体需求和团队能力进行调整,以确保项目的成功交付。 在学习和实践中,理解并灵活运用不同的软件开发模型和过程对于软件工程师而言至关重要。这些...

    软件工程复习笔记.docx

    原型在软件开发中起到验证需求和概念的作用,而敏捷开发则强调快速响应变化,以客户满意度为核心,推动迭代和团队合作。 总的来说,软件工程是一个多目标、多层次的学科,它既要保证软件质量,也要提升开发和维护...

    前端开发笔记

    通过这份前端开发笔记,开发者们可以了解到前端开发的全貌,包括但不限于基础的HTML、CSS和JavaScript知识,以及前端开发的工程化方法和最佳实践。在学习过程中,可以通过动手实践每个技术点,并进行适当的拓展来...

    编程开发学习宝典 MarkDown笔记

    此外,这些笔记可能还会涉及其他编程相关的主题,如版本控制系统Git的使用,软件工程的最佳实践,或者开发环境的搭建与配置。通过这样的Markdown笔记,学习者可以逐步建立起自己的知识体系,提高编程技能,并且能够...

    软件设计师软考笔记.zip

    接着,关于“设计模式”,这是软件设计中的一套经过实践验证的最佳实践。设计模式总结了在特定场景下解决常见问题的经验,为软件开发提供了通用的解决方案。博主整理的设计模式表格可能包括了常见的23种设计模式,...

    c#,java,html,sqlsever记笔记软件

    学习Java时,笔记可能涵盖这些主题的实例和最佳实践。 HTML(超文本标记语言)是网页制作的基础,用于描述网页结构。HTML5是当前的标准,新增了音频、视频、画布等元素,使得网页更具交互性。学习HTML时,笔记可能...

Global site tag (gtag.js) - Google Analytics