项目管理的质量保证计划
项目管理的保证
??项目管理的主要目标是保证项目在规定时间内高质量的完成项目。项目管理包括了项目组开发各阶段的人员结构的配置,质量控制的实施方略,内部文档和产品文档的组织编写等各项工作。
??开发项目按照规范化软件的生产方式进行生产,在生产流程上采用ISO9000的标准进行。项目开发参与的角色有项目经理,项目负责人,领域专家,系统分析员,程序员,测试组,技术支持部,质量监督组,文档组。下面就各个角色一一说明其主要职责。
??项目经理
??主要负责该项目开发商在开发和维护的过程中同客户的商务接洽和开发配合方面的事物,包括:项目合同的签定;提交开发计划给客户; 组织客户与分析人员进行需求确定; 组织客户阶段性验收; 协调客户提供测试环境; 监督项目进度与质量; 提供开发人员所需的各种人力物力资源; 负责项目开发过程中客户、开发项目组、质量监督部,文档组等相关部门的联络与沟通。
?? 项目的开发采用项目负责人责任制。项目的开发由项目负责人全权负责,负责的范围包括: 项目开发计划的制定; 开发方法的确定; 技术规范的编制; 项目各阶段的人员配给与人员之间的配合; 各阶段文档的生成和版本编号。
?? 领域专家
??主要责任是协同系统分析员认清领域边界,确定领域内容。领域专家可以由客户抽调技术骨干担任,也可以由开发商聘请担任。领域专家在开发过程中主要参与的阶段是系统需求分析,在明确了系统将来要完成的主要任务之后,领域专家的职责转向系统用户界面的确定上。开发出的系统能被客户接受的两个重要指标一个是系统正确性,即系统是否正确的完成了用户希望它完成的任务;第二就是系统操作的便捷性。便捷主要受到使用系统的客户的操作习惯的制约。领域专家往往是多年从事该项工作的人员,他们的使用习惯会对系统的易用性非常有帮助。领域专家参与的开发阶段受到开发方式的影响。
??系统分析员
??系统分析员是系统开发方法的贯彻者和系统实现的指导者。分析人员主要参与开发阶段的需求分析和系统设计两个阶段(这两个阶段并不是截然分开的,由开发方式的不同,可能会贯穿整个开发工期)。
??首先系统分析员和领域专家一起对领域进行分析,确定领域边界和领域内容。在完成这项任务后,系统分析员应当提交《系统需求报告》。《系统需求报告》由领域专家确认之后交给质量监督组进行复审,复审完毕由文档组进行文档规范化,进行存档和版本编号,与此同时,规范化的《系统需求报告》由项目经理转交给客户进行复审(项目经理对《系统需求报告》的内容格式等有审查的义务)。
??客户复审完毕之后通过项目负责人转交给系统分析员进行更新修正,并对版本进行升级。之后再经质量监督组和文档组等环节进行流转,直到该报告无须进行再流转为止。 接下来系统分析员的一项主要任务是对领域进行分析和映射,构造系统构架,即进行体系结构的设计。
??参与的系统分析员在不止一个时,首先由分析员委员会进行体系结构设计,当体系结构基本确定之后,定义分组和分组之间的接口,特别对将来需要密切接口的部分要进行详细定义,包括彼此间的"通讯协议",时间及方式等等。完成该项工作后必须产生《体系结构设计说明》。《体系结构设计说明》生成后由项目负责人提交给质量监督组进行复审,复审通过之后,由文档组进行格式化和版本编号并存档。《体系结构设计说明》的完整流转过程在开发商内部,客户并不介入。
程序员
??为了有效的利用领域专家的资源,在体系结构设计的同时,可以由系统分析员的指导之下,由程序员进行界面原形的开发。界面原形由领域专家进行评审。评审通过后由客户进行复审。界面原形跳过质量监督由文档组进行格式化和存档。质量监督有了解和监督界面原形变化的责任。 程序员参与系统详细设计,主要负责系统的实现工作,并对测试组提供相应的测试资源。由于详细设计的详细程度不易把握,有程序员参与的情况下,系统分析人员与程序员的交流会有助于系统开发进度。在项目代码生产的后期,程序员要进行相应的白盒测试。之后,可执行体提交到测试组进行测试。《系统详细设计说明》由分析员和程序员共同完成。通过项目负责人转交质量监督组进行复审,复审通过后,由文档组进行格式化和版本编号,并存档。
? 测试组
??主要进行软件的测试工作。上面提到程序员在交给测试人员之前是进行过一定的白盒测试的。测试人员根据详细设计的文档对软件要实现的功能进行一一测试,保证软件的执行体正确的实现设计要求,在此也只证明了软件正确的反映了设计思想,但是否真正反映了用户的需求仍需要进一步的测试。在正确性测试完成之后,需要测试的是软件的性能,软件的性能在本项目中占有重要的地位,性能要求有可能改变软件的设计,为避免造成软件的后期返工,测试在性能上需要较大的侧重。
??同样,测试在不同的阶段需要不同的"输入"与"输出"。在正确性测试阶段,不需要太详细的测试计划和测试策略的设计。而在性能测试时,需要分析人员提出测试策略和测试用例,质量监督组同样会提出他们认为必要的测试策略和测试用例,后者提出的测试策略和测试用例被认为是对前者的抽样调查。无论是前者还是后者提出的测试策略和测试用例,都由测试组组织实施。
??质量监督组
??保证软件透明开发的主要环节。在项目开发的过程中几乎所有的部门都与质量监督组有关。质量监督组对项目经理提供项目进度与项目真正开发时的差异报告,提出差异原因和改进方法。在项目进度被延滞或质量监督组认为某阶段开发质量有问题时,提请项目经理、项目负责人等必要的相关人员举行质量会议。解决当前存在的和潜在的问题。质量监督是建立在文档的复审基础之上,因而文档版本的控制,特别是软件配置管理,直接影响软件质量监督的影响力和力度。文档组则是保证软件质量监督的得以实施的重要保证。
??质量监督组的监督范围包括: 系统分析人员是否正确的反映了用户的需求; 软件执行体是否正确的实现了分析人员的设计思想; 测试人员是否进行了较为彻底的和全面的测试; 文档组是否对文档的规范化进行的比较彻底,版本控制是否有效;
??文档组
??是保证项目开发完毕的同时,内部文档和外部文档都同时完成。内部文档的及时产生和规范,是保证项目开发各小组能够更好的接口和沟通的重要前提,从另一个方面讲,也是保证工程不被某个关键路径所阻塞而延滞的前提。如上所述,文档组还是保证质量监督组得以发挥作用的基础。
??文档组的主要职责包括: 完善各个部门发送需要存档和进行版本控制的文档; 对文档进行单向出入的控制; 对所有存档的文档进行版本控制; 书写文档规范,并传达到开发组中; 书写部分外部文档。
技术支持部?
??技术支持部的存在是保证软件在用户使用的过程中,为用户提供最及时的技术服务,也为项目开发人员抽身进行新版本软件开发保证。技术支持部的人员能够作到对软件的使用人员进行软件的安装、配置、正确使用进行培训。能够解决由于软件的不当使用产生的各种问题。技术支持部的人员也有对软件系统分析监督的作用。技术支持人员是软件开发过程中的虚拟用户,也就是说在软件未正式提交用户之前,技术支持人员充当用户的角色。
合作伙伴提供的保证
??软件的开发我们选用微软公司的Windows平台和Visual Studio为主要开发工具。 我公司是微软(Microsoft)在中国最大的技术方案提供商,在软件开发方面能够直接从微软公司获得最快最全面的技术支持。另一方面,公司能最快速的获得微软最新的企业解决方案的培训和咨询。同时我公司还是微软出版社中国唯一总代理,公司拥有微软最全面的书面资讯。
项目进度的保证
??项目进度是项目进行是否顺利的最直观表现。显然在项目开始之前,项目开发计划是必须的。如果项目开发计划的制定的是完全合理的,那项目进度也就真正表达了项目与最终的交付使用之间的距离,然而要制定完全合理的项目开发计划几乎不太可能。可见要保证项目进度,首先要保证项目开发计划尽可能合理。
?? 项目计划的合理程度与项目计划制定者从事类似规模和类似业务的项目的经验有直接关系,通过经验往往能够预见潜在的阻碍,从而制定较为合理的项目开发计划。本公司已经开发过铁道部的结算系统,开发中的子项目多达六个,历时十五个月,目前多数项目已经开发完毕,有些系统已经投入运营五个月,项目金额数千万元。在这样的项目中,从管理者到开发人员到测试人员都积累了较为丰富的经验,特别是项目开发计划的制定,和项目进度的控制。
??项目计划以里程碑为界限,将整个开发周期划分为若干阶段。根据里程碑的完成情况,适当的调整每一个较小的阶段的任务量和完成的任务时间,这种方式非常有利于整个项目计划的动态调整。也利于项目质量的监督。
??里程碑就是对项目在开发过程中完成的较大成果的定义,比如需求分析完毕、代码生产完毕、正确性测试完毕,都被定义为一个里程碑,每一个里程碑都需要对完成的界定方式进行定义。比如需求分析完毕为一里程碑,这一里程碑完成的定义是:《系统需求说明》必须经过客户的确认,并在文档组进行了相应的归档工作。当然把完成需求分析作为里程碑不一定恰当,因为系统开发往往伴随着需求的不断变化和新需求的不断产生。 如此又引出新的问题,即如何定义恰当的里程碑,如何界定里程碑的完成。 里程碑将项目分成若干个较小的段,通过保证每一个段的顺利完成,来保证整个项目顺利完成,同时通过每个段的完成质量,可以测度整个项目质量。同时里程碑保证各个阶段的产品的依赖关系尽可能的小,并以完备的文档作为里程碑完成的重要标志之一。在里程碑和完备文档的控制之下,项目已完成的阶段是受到保护的,在任何时间,人员变动,甚至是开发商的变动,都不至于造成特别重大的损失,通过完备的文档,原有的成果能够被延续进行开发。
项目开发方法对项目质量的保证
??项目的开发方法对项目的质量和按时完成也有较大的影响。
??面向对象的开发方法有利于对问题领域的深入理解,也有利于将问题空间向解空间映射从而得到更加理想和完整的系统模型。同时面向对象的开发方法和实现方法也有利于系统错误被局限在较小的范围内,不会出现骨牌效应。面向对象的开发方法也有不利的方面。开发人员对它的熟悉程度不如传统的结构化的开发方法。对面向对象中新出现的名词需要重新在开发队伍中进行定义,以便在开发的过程中彼此交流时表达的更加准确,从而减少开发队伍之间的通讯量。通讯量的降低意味着效率的提高,减少了占用开发时间讨论一个彼此立场根本一致的"问题"的时间。软件构架定义了该领域中特定对象必然发生关系的发生方式,这种发生方式以构架中抽象类之间定义的关系被固化在构件中,开发人员在开发应用系统时不必再为定义这种相互作用方式而书写代码,这为将来系统的维护奠定了坚实的基础,也为将来新版本软件的透明升级并保持兼容性和正确性提供了有利保证。通过面向对象的继承特性,可以在不伤害原有系统的情况下,任意替换功能模块,从而以效率更高的模块代替原有模块,从另一角度讲,也实现了软件模块的配置功能。要实现真正的软件模块的即插即用,还需要利用面向对象的另一优势--组件。
??面向对象使得面向对象的类或对象可以以与语言无关的二进制方式被存储和调用。这就是COM技术。显然软件构架实现的基础是COM组件。由于COM是二进制的方式被存储,因而它可以被任何语言编写的软件所调用。组件与系统分离,只是在发生系统调用时才被调入内存执行,这就保证了系统更高层次的即插即用。
??鉴于如此多的好处,采用面向对象的技术进行该项目的开发是值得的。
??对于上面提到的面向对象的不利因素采用如下方法进行克服:第一,在系统开发之前,首先定义技术术语,然后定义领域术语,这样保证了开发过程中开发人员用同种"语言"进行交流,避免了文不对题的讨论或争论。第二,指定技术规范。在殊途同归的情况下,我们只允许那些在技术规范之内的技术来实现。技术规范定义了若干种对象技术,这些技术规范在整个开发小组中进行统一认识方面的学习。
??开发策略是针对不同开发技术和问题领域而作出的策略性的考虑。显然开发策略与所用的开发方法、实现技术以及问题领域的特征密切相关。一般来讲,鉴于面向对象的"无缝"特性,采用原形法比较恰当,而开发过程则采用螺旋式开发方法。螺旋式开发方法提高了人员的利用率,使得软件开发的局部阶段相互重叠,在整体上形成多道流水线重叠并行。显然这又缩短了开发的总周期。
项目开发各阶段的质量保证
??需求分析
??需求分析是开发人员对系统需要做什么和如何做的定义过程。从系统分析的经验来看,这个过程往往是个循序渐进的过程,一次性对系统形成完整的认识是困难的。只有不断地和客户领域专家进行交流确认,方能逐步明了用户的需求。从系统开发的过程得知,系统分析时犯下的错误,会在接下来的阶段被成倍的放大,越是在开发的后期,纠正分析时犯下的错误所花费的代价越是昂贵,也越发影响系统的工期和系统的质量。同时,想在某个时间点上宣布需求分析已经完毕,不再需要进行进一步的需求分析,这也是不现实的。经验告诉我们,往往在测试过程中会发现,用户真正想要的并非您脑海中的设想,另一方面用户往往知道自己肯定不需要什么,而无法明确告知他们需要的是什么。面对这些事实,我们无法期望改变用户;比如提高用户同分析人员的"沟通"能力,让他们说出的话更能被分析人员理解。唯一的做法是采用一定的方式方法,诱导用户尽可能早地将需求表达出来,表达得完整。
??在某个项目中我们的做法有两个方面:一是请领域专家参与到系统开发的早期阶段;二是开发系统原形,原形包括功能性的原形和用户界面性的原形,也可以是二者混合的原形,用这些原形确认用户的需求。让领域专家参与开发的早期阶段,是保证分析人员有充足的时间和领域专家进行充分的交流和确认。在这个阶段,原形可能在提交到用户之前,首先被领域专家确认,这样保证了原形被认可的程度和认可过程耗费的时间尽可能的短,从而在提高效率的同时保证了质量。
??在开发方内部还有三项保证措施: 系统分析委员会保证系统分析集思广益; 质量监督组对分析工作的监督; 技术支持人员参与需求调研。
??分析委员会的意义在于任何分析人员在提交其所分析部分的分析说明书前,必须通过委员会的共同审议,委员会的成员根据各自的分析经验和自身所分析的部分对他人的分析报告提出质疑。如此审议过后保证了各部分间相互关联的部分被明确定义,避免了由于"疏忽"造成系统在后期进行整合时出现较严重的系统鸿沟或系统重叠。
??质量监督组在项目的任何阶段都要提出监督计划。按照监督计划分配相应的资源来保证某阶段的开发质量。分析阶段的监督计划会在分析任务之前被项目经理,项目负责人、系统分析员以及技术支持所了解。为保证分析工作高质量进行,同时分析工作又不被过分打扰,质量监督组则主要针对《系统分析报告》进行复审,只在认为确实有必要的情况下才召开质量复审会议。质量复审会议的主要参与者是项目经理、项目负责人、分析人员和质量监督组组长。会议的主要议题是提出质量质疑,给出改进建议即可。具体是否存在质量问题,是否需要改进,不在会议中进行讨论。以此保证了会议参与的人数较少,会议的时间尽可能的短。
??通过技术支持的职责可以发现,技术支持参与分析调研有利于对分析工作的监督,在获得用户需求的口头表达之后,能帮助技术支持更好地扮演开发阶段"用户"的角色。技术支持具有相当的计算机技术背景,在接下来的开发过程中就能较好的起到监督的作用,也为将来维护和为用户提供更好的服务奠定基础。
系统设计
??优良的体系结构应当具备可扩展性和可配置性,这两方面因素的实现是通过Windows DNA的应用完成的,正如建议书中所述,在此不再赘述。
??实现
??实现也就是代码的生产过程。从设计的结构图中可以看出,生产的类别有类的生产,组件的生产,构件的生产,应用系统的整合,以及各种测试用例的生产。为了能够提高生产的质量,我们将生产的程序人员按职能分成两组,测试用例的生产和测试用例生产,也就是说如果某个程序员生产了某个组件,则其测试用例不能再由该程序员来生产,但他可以生产其他组件的测试用例。这样交叉生产更容易发现组件的存在的问题。测试人员按照测试用例来测试组件的各项指标提出测试报告。
??随生产的不断深入,组件的生产日趋减少,构件的生产的量开始逐步增加,生产构件的过程又是对组件的考验过程。因此描述组件实现的文档是非常重要的,它将有可能成为阻碍进一步生产的瓶颈。文档组在生产过程中的重要工作是对各类部件的文档进行丰富和规范,同时进行版本的控制。文档的完备与否,在开发的后期,对项目进度有至关重要的影响。文档是共享前期开发成果的唯一手段。根据上一节描述的应用系统体系结构来看,整个开发环节丝丝相扣,每一步都受到上一步的制约。
??为了控制系统开发过程中的往复,不至于产生重大过失和往复的泛滥。文档组和质量监督组协同完成软件开发的配置管理。
??软件配置管理的目的在于控制软件开发过程中的"变化",这种变化可能是外部引起的,如需求的变化。也可能是来自于内部的变化,如早期设计的某个部件不够完备,需要修改等。为了控制这些变化,把变化引起的波动尽可能的控制在有限的范围内。
??配置项是指需要进行控制的任何文档单元,它可能是需求说明报告,也可能是需求说明报告的某个点。在本项目中需要控制的内部配置项包括需求报告,设计报告,组件代码,组件接口文档,构件及构件相关文档;外部配置项包括项目计划书,使用手册,系统安装说明和系统配置说明等。
??从图中可以看出在文档没有被提交出开发组以前,文档可以在开发组内部"任意"地被修改,但一旦文档被提交,则相关的部门就会被调动,来维护文档的质量。因此为了保证工作效率,开发组提交文档之前必须慎重,以免引起不必要的工作量的增加。从另一角度来看,开发部受到严密的监督,从而保证了开发的各个环节对于开发的全过程保持透明,避免了因为个人的原因造成整个开发的瘫痪或受阻。项目经理通过质监报告可以了项目开发的进度和质量情况,为调整开发计划提供有利的依据。
??显然开发部的内部流程在配置管理的过程中受到的监管是非常有限的。配置管理所能起的作用完全是建立在文档之上。当项目进度非常紧张时,开发部可能书写文档的时间会非常少,在此情况之下质量监督组和文档组就肩负将开发部提供的文档进行丰富和完善的工作,从而减少开发部书写文档的时间,当然这是增加质量监督组与开发部的口头交流为代价的。
??测试
??测试组的工作被分成若干阶段,不同阶段的划分是以保证软件质量的不同指标为目标的。
??测试的软件指标分别包括: 软件的正确性:正确性测试主要是测试软件的功能是否被正确的实现。 测试的方式主要是按照功能的要求按照给定的输入,看是否有给定的输出。在非标称输入时,输出是否异常等。一方面测试软件的功能是否实现,同时是否实现的完整。
??性能指标:该项目对性能的要求非同一般的软件项目。性能测试往往包含了压力测试、攻击性测试等测试,软件所能承受的极限是多少,一般来将软件的极限应当高出用户要求的性能,各种指标也应当为用户所了解。
??易用性:软件的使用界面在设计实现的时候应当设法使之与功能的实现相脱离。脱离的原因在于易用性是通过友好的界面实现的。然而让开发人员以使用者的角度来确定软件是否易用是件非常困难的事情,在确定使用界面时往往需要多次的反复修改,甚至只能在软件的最后交付之前或用户使用一段时间之后才被提出来。鉴于这种特点,软件在开发的不同阶段都作了相应的保证措施,比如在软件需求界定的时候请领域专家参与,在软件设计阶段,让功能的实现尽可能地包含在软件的组件之中,也就是没有界面要求的底层实现。界面的实现仅仅依赖于一个数据接口,界面仅仅负责将用户输入的数据送到指定的数据块中,用于显示的数据也在指定的数据块中提取,只要保证数据块被互斥的访问就可以了。有了这样的设计结构,软件的易用性也就相当容易保证了。当测试中发现易用性的问题时,软件不会伤到筋骨,皮毛的修改总是非常容易的。
??测试人员的角色也是逐步的由开发向用户方向转移。
??测试存在两个非常重要的问题,一是保证测试的结果真正是反映了软件的质量。一般来讲,如果测试测出的错误数是收敛的情况,基本认为测试本身应当是比较全面的和足够深入的。二是测试结果的反馈。测试报告是测试结果的正式书面反馈形式。测试报需要经过质量监督组的复审,并进行统计,再形成质量监督报告的一部分,提交到项目经理和项目开发组组长处。同时,测试组产生的测试报告和测试统计报告也要进行归档,以便跟踪软件的质量进展。这也是软件进行版本编号的一个重要依据。
??文档维护
??文档维护主要是文档组的工作。文档从用途上分主要分为内部文档和外部文档。
??内部文档包括: 项目开发计划; 需求分析; 体系结构设计说明; 详细设计说明; 构件索引; 构件成分说明; 构件接口及调用说明; 组件索引; 组件接口及调用说明; 类索引; 类属性及方法说明; 测试报告; 测试统计报告; 质量监督报告; 源代码; 文档分类版本索引; 软件安装打包文件。
??外部文档主要包括: 软件安装手册; 软件操作手册; 在线帮助; 系统性能指标报告; 系统操作索引。
文档的重要性在前面的章节中已经多次提到。如何保证文档的全面性,使其真正为项目的进度提供保证,又不因为文档的写作而耽误项目的进度,这仍然是一个比较难解决的问题。解决此问题,其核心仍然是个"度"的问题。在本项目的开发中,文档组的一个非常重要的任务还是书写文档规范和文档模板。当有文档模板后需要书写文档的人员只剩下"填空"的工作,从某种意义上讲,书写文档的速度会加快。如果书写文档的人员认为文档的更细致的部分可以由他人帮助完成,则该文档即交由他人完成,但此时文档并不算被正式提交,当他人书写完毕之后,必须由文档的初写者进行复审,复审通过后方可以正式提交,进入软件配置管理的循环中。
??文档组真正核心的工作是对文档的组织管理。根据文档的不同,文档的来源也不同,有些是通过质量监督组经过复审之后转交给文档组,有些则会直接从文档的出处到达文档组。文档的管理是一个非常烦琐的工作,但是长远来看它不仅使项目的开发对单个主要人员的依赖减少,从而减少人员流动给项目的带来的风险,更重要的是在项目进行到后百分之十的时候起到拉动项目的作用。从以往做大项目的经验来看,写作文档在项目开发的早期可能会使项目的进度比起不写文档要稍慢,但随着项目的进展,各个部门需要配合越来越多,开发者越来越需要知道其他人员的开发思路和开发过程,才能使自己的开发向前推进。一个明显的例子就是系统整合,或者某些环节是建立在其他环节完成的基础之上时,就更显现出文档交流的准确性和高效性。
系统维护保证
??对于该项目,软件维护主要由公司的技术支持部来完成。技术支持在本公司的角色在第一章中已经有所描述。在这里需要重申的是,在本公司,技术支持的任务一方面是保证对项目客户的跟踪服务,另一方面是把该项目的开发人员从项目中尽快的解脱出来以便投入到下一个项目的开发中,因此要求技术支持人员在项目开始的时候就介入其中,并在开发的过程中不断跟踪项目,特别是开发中同客户的交流,他们必须参加。不仅如此,软件的代码编写,他们也需要有所了解,并对非核心代码能够进行一定的修改,最起码能够准确定位错误,以便提请公司以最快的速度修正错误。对于一般性的错误,如操作不当等引起的问题,全部由技术支持部来解决。
??技术支持部的人员基本上是按项目跟进的。当一个项目刚刚交付用户时,在技术支持部会有较多的人员进行跟进,随软件的稳定,跟进的人逐步减少,并转移到其它项目中去。