`
wuhuajun
  • 浏览: 93898 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

项目管理

 
阅读更多

-------------------------------------------------- 
风险 概率 影响 
-------------------------------------------------- 
规模估计过低 60% 严重的 
交付期限太紧张 50% 严重的 
用户需求变化频繁 75% 严重的 
技术达不到预期效果 30% 轻微的 
质量保证体系的措施实施不利 60% 严重的 
软件体系结构设计不合理 40% 灾难性的 
人员流动 30% 严重的

 

 

Agile——敏捷开发,作为CMM神话崩溃后被引入的一套新的软件开发模式,这几年来被广泛引起关注,并被寄予厚望。敏捷开发在其他业界的应用是否理想不得而知,但以下总结了我所在公司的敏捷开发试验,希望可以达到管中窥豹的目的。

敏捷开发宣言——
个体和交互 胜过 过程和工具
可以工作的软件 胜过 面面俱到的文档
客户合作 胜过 合同谈判
响应变化 胜过 遵循计划
虽然右项也有价值,但是我们认为左项具有更大的价值。

以上的宣言比较抽象,基于该理念,以下是ThoughtsWork咨询公司的推崇的n个敏捷开发实践:
Iteration
迭代开发。可以工作的软件胜过面面俱到的文档。因此,敏捷开发提倡将一个完整的软件版本划分为多个迭代,每个迭代实现不同的特性。重大的、优先级高的特性优先实现,风险高的特性优先实现。在项目的早期就将软件的原型开发出来,并基于这个原型在后续的迭代不断晚上。迭代开发的好处是:尽早编码,尽早暴露项目的技术风险。尽早使客户见到可运行的软件,并提出优化意见。可以分阶段提早向不同的客户交付可用的版本。
IterationPlanningMeeting
迭代计划会议。每个迭代启动时,召集整个开发团队,召开迭代计划会议,所有的团队成员畅所欲言,明确迭代的开发任务,解答疑惑。
Story Card/Story Wall/Feature List
在每个迭代中,架构师负责将所有的特性分解成多个Story Card。每个Story可以视为一个独立的特性。每个Story应该可以在最多1个星期内完成开发,交付提前测试(Pre-Test)。当一个迭代中的所有Story开发完毕以后,测试组再进行完整的测试。在整个测试过程中(pre-test,test),基于Daily build,测试组永远都是每天从配置库上取下最新编译的版本进行测试,开发人员也随时修改测试人员提交的问题单,并合入配置库。
敏捷开发的一个特点是开放式办公,充分沟通,包括测试人员也和开发人员一起办公。基于Story Card的开发方式,团队会在开放式办公区域放置一块白板,上面粘贴着所有的Story Card,按当前的开发状态贴在4个区域中,分别是:未开发,开发中,预测试中,测试中。Story Card的开发人员和测试人员根据开发进度在Story Wall上移动Story Card,更新Story Card的状态。这种方式可以对项目开发进度有一个非常直观的了解。
在开发人员开始开发一个Story时,ta需要找来对应的测试人员讲解Story功能,以便测试人员有一致的理解,同时开始自动化系统测试脚本的开发。
Standup Meeting
站立会议。每天早上,所有的团队成员围在Story Wall周围,开一个高效率的会议,通常不超过15分钟,汇报开发进展,提出问题,但不浪费所有人的时间立刻解决问题,而是会后个别沟通解决。
Pair Programming
结对编程是指两个开发人员结对编码。结对编程的好处是:经过两个人讨论后编写的代码比一个人独立完成会更加的完善,一些大的方向不至于出现偏差,一些细节也可以被充分考虑到。一个有经验的开发人员和一个新手结对编程,可以促进新手的成长,保证软件开发的质量。
CI/Daily Build
持续集成和每日构建能力是否足够强大是迭代开发是否成功的一个重要基础。基于每日构建。开发人员每天将编写/修改的代码及时的更新到配置库中,自动化编译程序每天至少一次自动从配置库上取下代码,执行自动化代码静态检查(如PCLint),单元测试,编译版本,安装,系统测试,动态检查(如Purify)。以上这些自动化任务执行完毕后,会输出报告,自动发送邮件给团队成员。如果其中存在着任何的问题,相关责任人应该及时的修改。
可以看到,整个开发组频繁的更新代码,出现一些问题不可避免。通过测试部又在不停地基于最新的代码进行测试。新增的问题是否能够被及时发现并消灭掉,取决于自动化单元测试和系统测试能力是否足够强大,特别是自动化系统测试能力。如果自动化测试只能验证最简单的操作,则新合入代码的隐患将很难被发现,并遗留到项目后期,形成大的风险。而实际上,提升自动化测试的覆盖率是最困难的。
Retrospect
总结和反思。每个迭代结束以后,项目组成员召开总结会议,总结好的实践和教训,并落实到后续的开发中。
ShowCase
演示。每个Story开发完成以后,开发人员叫上测试人员,演示软件功能,以便测试人员充分理解软件功能。
Refactoring
重构。因为迭代开发模式在项目早期就开发出可运行的软件原型,一开始开发出来的代码和架构不可能是最优的、面面俱到的,因此在后续的Story开发中,需要对代码和架构进行持续的重构。迭代开发对架构师要求很高。因为架构师要将一个完整的版本拆分成多个迭代,每个跌倒由拆分成很多Story,从架构的角度看,这些Story必须在是有很强的继承性,是可以不断叠加的,不至于后续开发的Story完全推翻了早期开发的代码和架构,同时也不可避免的需要对代码进行不断完善,不断重构。
TDD
测试驱动开发。正如上面讲的,迭代开发的特点是频繁合入代码,频繁发布版本。测试驱动开发是保证合入代码正常运行且不会在后期被破坏的重要手段。这里的测试主要指单元测试。

敏捷方法反思:
自己参与的敏捷开发项目总的来说不是很成功,这可能也是业界遇到的通病:
1、对于全新的软件,在项目早期测试人员就参与并实现自动化测试脚本,但实际上软件的界面等非常不稳定,导致测试人员返工的工作量很大。
2、对于全新的软件,资料人员过早参与,后期返工工作量大,原因同第一点。
3、自动化系统测试工作量大,测试人员投入大量的精力在使测试自动化起来,而没有足够的精力放在真正的测试软件的功能是否正常。即便是这样,自动化系统测试脚本也多流于形式,测不出深层次的问题。
4、代码动态检查工具执行不理想,流于形式。没有人对Purify有深刻的理解和应用经验,报告中查出来很多告警,但不知如何消除。
5、由于快速搭建原型,没有在架构上进行严谨的设计,导致后期一直堆砌代码。
6、异地开发模式下无法实现快速构建、快速交付,团队普遍感觉很疲惫。
7、敏捷开发不提倡加班,但实际上不管是CMM还是Agile哪一种开发模式跟是否加班都没有必然联系。

 

 

 

 

 

瀑布模型的过程已经在大量软件实践中被证明是不可行的,但在实际开发工作中,仍然被大量的使用。我认真思考这个问题,可能有一个因素导致了这种落后的方法仍在继续,那就是老板的因素。

 

这个原因就是瀑布模型太简单。

       瀑布模型有多简单,只要一个接触过软件开发的人能说完整个过程:

       需求分析-->概要设计->详细设计->编码实现->测试

       这个过程是完全按找软件的各个工作内容来划分开发阶段的。

       这个模型的告诉大家,当软件测试完了,软件就开发完了。最爱听这句话的人是谁?当然是老板了。老板要的是什么?老板要的是管理,要的是成本控制,按照瀑布模型做东西,老板好理解,目标可以看的见,他觉得比较省心。

 

        实际上这里忽略了一个最大的问题,需求的不确定性和软件本身的复杂性。没有一个构架师或系统分析师能在一开始把软件的过程中的所有问题都想清楚的。软件过程中产生的问题是在软件开发的推进过程中发现并解决的,而且软件本身的有些设计也是在软件开发的过程中验证的。所以确定了软件的开发过程中需要适时作出调整,这个调整就是敏捷开发中说的适应变化。

             瀑布模型的结症在这里,无法适应变化,当软件发展过程中,发现需求要变更,就需要重新评估一下设计,然后更改已经实现的代码,当然还要通知测试需求测试用例,这样一来需求变化的过程才处理完成,这个过程没有错,只要产生的变化,任何软件的开发方法都是这么做的。问题是这么一来就打乱了我们原定的计划,打乱了我们看似美好的瀑布过程,甚至有的软件根本不知道该怎样该才好,本来觉得良好地设计变成了垃圾。错在哪里?错不在变化,错不在需求,错在计划,错在瀑布模型,瀑布模型是管理者心中的乌托邦,渴望而不可及。

      因为你总是想在事情开始的时候把一切都考虑到,结过最后的结果是什么都有问题。

      于是人们提出了不同于瀑布的开发方法,其中很好的一种实践就是敏捷方法。其实敏捷根本不是什么系统的一套过程规范,敏捷是一种思路,是一种解决问题的思路。在我理解敏捷的思维有一下几条:

       1、整体思维,不拘泥于细节,就是最需求和做设计的时候,追求一个整体的结果,而不是设计界面元素,通信细节这些琐碎的内容。所以敏捷方法的整体需求文档和设计文档都比较简练,有时候思维结果还很抽象。不过早的进入细节,是这里边最重要的思想。这个思维活动的结果是整体关系,如果探讨细节那一定是在验证整体。

       2、小版本计划,大家都说小版本迭代,其实过程的开始时一个小版本计划,在一次迭代过程中,项目还是瀑布模型的。当然这就不可避免的又产生了开头想不清楚,中间产生了变化的问题,但项目计划比较小。所以也更可控。

       3、构架师的作用,这个方法中,构架师的整体把控能力及其重要,一切都在变,没有一个优秀的构架师敏捷就变成了混乱。

 

       4、最郁闷的人:敏捷方法中,最郁闷的就是老板了,因为他要花更多的时间来跟踪项目。

分享到:
评论

相关推荐

    项目管理工具箱(第2版).doc

    项目管理人员考核表是项目管理的重要工具,用于记录项目的项目管理人员考核信息,包括项目的项目管理人员考核结果、项目的项目管理人员考核标准和项目的项目管理人员考核建议等方面的内容。 项目人员考核评分表是...

    IT项目管理的146个表格

    IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理的146个表格IT项目管理...

    成功的项目管理(第5版).pdf

    作为一种新的工作方法论,项目管理不仅是一系列的计划与控制技术,而且是一系列的工作理念,以及一种独特的管理哲学。本书以通俗易懂的语言、理论和案例相结合的方式,详细讨论项目管理方法论;在介绍项目管理基本...

    软件项目管理规范

    "软件项目管理规范" 软件项目管理是软件工程和项目管理的交叉学科,涵盖了管理软件产品开发所必须的知识、技术及工具。软件项目管理的概念可以定义为:在软件项目活动中运用一系列知识、技能、工具和技术,以满足...

    1.4项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系.pdf

    项目管理是一个宽泛的领域,它涵盖了从单个项目管理到组织级项目管理的广泛实践和方法。了解项目组合管理、项目集管理、项目管理和组织级项目管理之间的关系对于深入理解项目管理的复杂性至关重要。 项目管理...

    PMP项目管理模板(全套157个文档)

    PMP项目管理模板(全套157个文档),包含全套157个项目管理文档。。。。。。 PMP项目管理模板(全套157个文档),包含全套157个项目管理文档。。。。。。PMP项目管理模板(全套157个文档),包含全套157个项目管理...

    软件项目管理.pdf

    软件项目管理概述、软件项目管理的主要问题及解决方法、软件项目风险管理问题及解决办法、沟通管理问题及其解决方法、团队管理问题及解决方法 软件项目管理概述 软件项目管理是为了使软件项目能够按照预定的成本、...

    南开大学项目管理学教材(工商管理必修课).pdf

    ### 项目管理学知识点概述 #### 一、项目与项目管理的基本概念 1. **项目的定义**: - 项目是一种独特的、一次性的任务或工作,旨在创造特定的产品或服务。 - 它通常受到时间、人员和其他资源的限制,并且具有...

    IT项目管理课后答案

    IT项目管理是信息技术领域中一个至关重要的组成部分,它涉及到项目的规划、执行、监控以及收尾,确保技术解决方案得以高效、按期且符合预算地完成。本资料包包含的"IT项目管理答案"提供了课程的PPT,课后习题及课外...

    软件项目管理第4版课后题及答案.docx

    软件项目管理第4版课后题及答案.docx 本文档提供了软件项目管理的知识点,涵盖项目管理知识体系(PMBOK)的10个知识领域,包括项目集成管理、项目范围管理、项目时间管理、项目成本管理、项目质量管理、项目人力...

    项目管理手册.pdf (产品开发流程)

    项目管理手册(产品开发流程) 项目管理手册是项目管理的核心参考文件,它提供了项目管理的总体架构、项目运作指南、项目团队的组织结构和职责、项目业务汇报关系等重要信息。以下是项目管理手册中提到的关键知识点...

    项目管理概论网课习题答案.zip

    《项目管理概论》是项目管理领域的一门基础课程,主要涵盖了项目管理的各个核心环节。这份"项目管理概论网课习题答案.zip"压缩文件,针对的是南开大学提供的网课学习资源,其中包含了课程的期末习题解答,为学习者...

    华为项目管理金种子初级培训教材.pdf

    华为项目管理金种子初级培训教材涉及的知识点非常丰富,涵盖了项目管理的基本流程、常用知识、实际应用、华为项目管理特定工具介绍以及项目管理的常见误区等多个方面。 首先,项目管理的基本流程包括项目的启动、...

    北邮IT项目管理案例课件

    从给定的文件信息来看,该课件主要探讨了IT项目管理的重要性和实施方法,以及在实际企业中的应用。以下是对这些知识点的详细说明: ### IT项目管理的重要性 IT项目管理是确保信息技术项目的成功实施的关键。它涉及...

    IT项目管理视频教程(28集)

    教程名称:IT项目管理视频教程(28集)课程目录:【】IT项目管理视频教程01~02【】IT项目管理视频教程03~04【】IT项目管理视频教程05~06【】IT项目管理视频教程07~09【】IT项目管理视频教程10~12【】IT项目管理视频...

    信息系统项目管理师9大管理总结

    项目管理师分为项目管理员、助理项目管理师、项目管理师和高级项目管理师四级。所需技能涵盖德行、见识、能力、知识与体质五大方面,包括高尚品德、创新思维、组织管理能力、广博知识与健康体魄。 #### 五、项目...

    软件项目管理案例教程课后习题.docx

    "软件项目管理案例教程课后习题" 软件项目管理是指对软件项目的计划、组织、指导和控制,以确保项目的目标和要求得到满足。软件项目管理涉及到项目的整个生命周期,从项目的启动到项目的结束,包括项目的计划、执行...

    埃森哲项目管理方法体系

    **埃森哲项目管理方法体系概述** 埃森哲是一家全球知名的管理咨询公司,其项目管理方法体系是业界广泛认可的专业框架,旨在确保项目的高效、有序和成功执行。该方法论结合了理论与实践经验,旨在帮助项目经理和团队...

    信息系统项目管理师第三版-项目管理知识体系整理.pdf

    信息系统项目管理师在项目管理领域的专业知识体系是相当完备的。根据给定文件的内容,我们可以从中提炼出项目整体管理、项目范围管理和项目进度管理等关键领域的知识点。 项目整体管理是项目管理中的核心组成部分,...

Global site tag (gtag.js) - Google Analytics