;

研发项目如何进行工作结构分解

发布时间: 作者:系统管理员 访问量:24

   工作分解结构(简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。即:项目→任务→工作→日常活动工作分解结构以可交付成果为导向对项目要素进行的分组,它归纳和定义了项目的整个工作范围,每下降一层代表对项目工作的更详细定义。WBS总是处于计划过程的中心,也是制定进度计划、资源需求、成本预算、风险管理计划和采购计划等的重要基础。那么,在进行研发项目工作分解的时候,一般遵从哪些主要步骤呢?

  1.先明确并识别出项目的各主要组成部分,即明确项目的主要可交付成果。一般来讲,项目的主要组成部分包括项目的可交付成果和项目管理的本身。在进行这一步时需要解答的问题是:要实现项目的目标需要完成哪些主要工作?(一般情况下,项目的主要工作是指贯穿项目始终的工作,它在项目分解结构中主要被列在第二层。)  

  2.第二步的工作是:确定每个可交付成果的详细程度是否已经达到了足以编制恰当的成本和历时估算。“恰当”的含义可能会随着项目的进程而发生一定的变化,因为对于将来产生的一项可交付成果进行分解也许是不大可能的。对每个可交付成果,如果已经足够详细,则进入到第四步,否则接着进入第三步——这意味着不同的可交付成果可能有不同的分解层次。  

  3.确定可交付成果的组成元素。组成元素应当用切实的、可验证的结果来描述,以便于进行绩效测量。与主要元素一样,组成元素的定义应该根据项目工作实际上是如何组织和完成的。切实、可验证的结果既可包括产品,又可包括服务。这一步要解决的问题是:要完成上述各组成部分,有哪些更具体的工作要做。对于各组成部分的更小的构成部分,应该说明需要取得哪些可以核实的结果以及完成这些更小组成部分的先后顺序。  

4.核实分解的正确性。即需要回答下列问题:

(1)最底层项对项目分解来说是否是必需而且充分的呢?如果不是,则必须修改组成元素(添加、删除或重新定义);

(2)每项的定义是否清晰完整?如果不完整,描述则需要修改或扩展;

(3)每项是否都能够恰当地编制进度和预算?是否能够分配到接受职责并能够圆满完成这项工作的具体组织单元(例如部门、项目队伍或个人)?如果不能,需要做必要的修改,以便于提供合适的管理控制。  

  如果大家还能在脑海中清晰地再现在项目范围管理中,我们介绍范围定义的工具——分解时所画的流程图,那么对于工作分解结构的创建步骤就可以了然于胸了。  

  实际操作中注意的问题对于实际的项目,特别是对于较大的项目而言,在进行工作分解的时候,要注意以下几点:  

(1)要清楚地认识到,确定项目的分解结构就是将项目的产品或服务、组织和过程这三种不同的结构综合为项目分解结构的过程。项目经理和项目的工作人员要善于将项目按照产品或服务的结构进行划分、按照项目的阶段划分以及按照项目组织的责任进行划分等有机地结合起来。也就是说,我们应该将项目的WBS、PBS以及OBS组合起来综合运用。  

  WBS、PBS与OBS合在一起,就提供了费用估算的结构,构成费用控制立方体(Cost Control Cube)。其实,任何两个分解结构结合在一起,都可以形成一个矩阵:WBS与OBS形成责任矩阵,OBS与ABS形成帐户代码,WBS与CBS形成费用估算表。  

  OBS,组织分解结构是项目组织结构图的一种特殊形式,描述负责每个项目活动的具体组织单元,WBS是实现组织结构分解的依据。CBS——费用分解结构和ABS——帐目分解结构,都是按照与WBS与OBS相适应的规则将费用进行分解而形成的相应的、便于管理的分解结构。ABS为组织单元承担分项工作而对其费用进行管理的一种工具,可以作为项目费用测定、衡量和控制的基准。  

  (2)实际上,进行逐层分解项目或其主要的可交付成果的过程,也就是给项目的组织人员分派各自角色和任务的过程。  

(3)并非工作分解结构中所有的分支都必须分解到同一水平,各分支中的组织原则可能会不同。任何分支最低层的细目叫做工作包。工作包是完成一项具体工作所要求的一个特定的、可确定的、可交付以及独立的工作单元,需为项目控制提供充分而合适的管理信息。任何项目也并不是只有唯一正确的工作分解结构,例如同一项目按照产品的组成部分或者根据生产过程分解就能作出两种不同的工作分解结构。

(4)对于项目最底层的工作要非常具体,而且要完整无缺地分配给项目内外的不同个人或者是组织,以便于明确各个工作块之间的界面,并保证各工作块的负责人都能够明确自己的具体任务、努力的目标和所承担的责任。同时,工作如果划分得具体,也便于项目的管理人员对项目的执行情况进行监督和业绩考核。  

   (5)对于最底层的工作块,一般要有全面、详细和明确的文字说明。因为,对于项目,特别是较大的项目来说,或许会有许多的工作块,因此,常常需要把所有的工作块的文字说明汇集到一起,编成一个项目工作分解结构词典,工作分解结构词典中一般包含工作包描述以及计划编制信息,如进度计划、成本预算和人员安排,以便于在需要时随时查阅。


    

最新发布

    FreeMarker template error (DEBUG mode; use RETHROW in production!): For "#list" list source: Expected a sequence or collection, but this has evaluated to an extended_hash+string (com.jmis.contentmng.pojo.Content wrapped into f.e.b.StringModel): ==> [in template "jmis/pm/article/detail.html" at line 185, column 13] ---- FTL stack trace ("~" means nesting-related): - Failed at: #list content as chann [in template "jmis/pm/article/detail.html" at line 185, column 6] - Reached through: @cm_content_list count="5" titleLen="... [in template "jmis/pm/article/detail.html" at line 179, column 8] ---- Java stack trace (for programmers): ---- freemarker.core.NonSequenceOrCollectionException: [... Exception message was already printed; see it above ...] at freemarker.core.IteratorBlock$IterationContext.executeNestedContent(IteratorBlock.java:285) at freemarker.core.IteratorBlock$IterationContext.accept(IteratorBlock.java:200) at freemarker.core.Environment.visitIteratorBlock(Environment.java:595) at freemarker.core.IteratorBlock.acceptWithResult(IteratorBlock.java:81) at freemarker.core.IteratorBlock.accept(IteratorBlock.java:67) at freemarker.core.Environment.visit(Environment.java:326) at freemarker.core.Environment.visit(Environment.java:368) at freemarker.core.Environment$NestedElementTemplateDirectiveBody.render(Environment.java:2727) at com.jmis.contentmng.action.directive.abs.TemplateDirectiveUtil.ProcessTemplate(TemplateDirectiveUtil.java:316) at com.jmis.contentmng.action.directive.ContentListDirective.execute(ContentListDirective.java:254) at freemarker.core.Environment.visit(Environment.java:426) at freemarker.core.UnifiedCall.accept(UnifiedCall.java:101) at freemarker.core.Environment.visit(Environment.java:326) at freemarker.core.Environment.visit(Environment.java:332) at freemarker.core.Environment.process(Environment.java:305) at freemarker.template.Template.process(Template.java:384) at com.jmis.contentmng.common.web.springmvc.SimpleFreeMarkerView.renderMergedTemplateModel(SimpleFreeMarkerView.java:153) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:167) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:303) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1286) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1041) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:984) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) at javax.servlet.http.HttpServlet.service(HttpServlet.java:622) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:209) at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.frame.core.cache.PageEhCacheFilter.doFilter(PageEhCacheFilter.java:102) at net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.frame.core.web.filter.XssFilter.doFilter(XssFilter.java:20) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1526) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1482) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748)