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