5.5 案例五:设计的质量
阅读以下关于信息系统项目管理过程中项目质量管理方面问题的叙述,回答问题1至问题3。
5.5.1案例场景
中培信息技术有限公司(Z公司 )曾经为K公司开发过一套信息系统,该系统涉及了K公司的所有主要业务。该系统中关于组织机构的业务规则如下:
(1)组织机构树通过部门编码体现层级和隶属关系。即部门0001的下属部门包括00010001、00010002,依次类推,根据代码中包含的层级关系确定某 个部门在组织机构树中的确切位置,该编码由公司统一制定。
(2)任意一条业务数据隶属于某个特定的部门。
(3)部门之间存在友好和互斥的关系。关系为友好的部门可以共享业务数据,关系为互斥的部门互相不能访问对方的业务数据。
后来,K公司需要调整部门的组织结构,因此对系统提出了升级的要求:
(1)系统中的部门编码需要更新为最新的企业标准。
(2)组织机构根据最新的企业标准重新生成。
(3)组织结构调整是不能丢失业务数据。、
(4)系统中可以保留组织机构调整的痕迹,业务数据可以追踪除原属于哪个部门,机构调整后属于哪个部门。
(5)部门间友好和互斥的关系可能会被重新定义。
(6)升级后的系统需要能够适应再次的组织机构调整而不需要再次升级。
项目经理老王接受了这个项目,经过细致的调研和分析,发现原系统存在如下缺陷:
(1)原系统中将企业对部门的标准编码设计为部门主键,修改起来难度很大,容易发生数据不一致的问题。
(2)新的企业标准没有考虑到原有企业标准,同是一个部门老王在原标准中为00010001,在新标准中为00010005,部门的层次也可能发生变化。
(3)业务数据中保存了隶属部门编码,系统已经使用近两年,保存了大量的历史业务数据。
(4)原系统在设计时将部门间的友好与互斥关系硬编码在系统代码中,且涉及面很广,原系统中80%以上的程序存在这样的硬编码。
(5)不少业务逻辑和工作流程是根据特定的部门编码进行判断的,部门编码的变化会造成业务混乱。
(6)原系统在设计时没有考虑到组织机构调整的可能,也没有对保留部门变革历史的功能进行设计。
老王认为,需求已经非常明确,对于这个项目的关键是设计的质量,其中包括解决方案的设计和业务系统的改造两部分。一旦设计出现偏差,返工的工作量会非常巨大,反之,整个项目还是容易控制的。但老王在如何提高设计质量方面却犯了愁。
【问题1】(8分)
试以300字内回答,老王可以采取哪些措施提高设计的质量?
【问题2】(9分)
试以300字内回答,除设计外,老王还需要特别注意哪些工程活动。
【问题3】 (8分)
试以300字内回答,如何提高这些工程活动的质量。
5.5.2案例分析
这是一个开放式的案例分析题,案例中仅粗略地描述了项目背景的目标,针对如何提高项目质量进行发问,难度相对较大,需要仔细的分析。
前面一部分对项目背景和目标的描述无非是为了说明这么几个问题:
(1)这是一个系统改造的项目。
(2)原系统中存在设计缺陷,没有考虑过组织机构改革的可能性。
(3)需要大量更改原系统的程序,消除硬编码。
(4)需要更改已有的业务数据,同时增加部门变革历史的功能。
基于这些问题,案例的后半部分给出了老王的观点:设计质量是项目的关键,需要提高设计的质量。结合案例后的问题,我们不难发现,案例的前半部分是引子,后半部分才是关键,也是该案例的题眼:如何提高项目的质量,显然需要用项目质量管理的知识作答。
质量管理是项目管理中的一个知识域,但在PMBOK中并没有给出具体的质量管理的方法,需要结合软件开发和项目的特点给出特定的质量管理策略和方法。这也正是这个案例的用意所在,考察考生在面对实际的项目问题时需要采取哪些措施解决项目的质量问题。
我们首先从软件工程的角度考虑一下软件质量的问题。软件的质量一直是软件界近几十年致力解决的问题,针对使用软件提高软件质量提出了很多的方法和理论。首先是软件工程的理论,需要使用工程活动的方法进行软件开发,从系统定义与分析开始,经过设计、实现,最终到验证。在软件工程中,人们提出了多种软件开发模式和工程活动方法。在开发模式中,有瀑布模型、螺旋模型、迭代模型、喷泉模型等;在工程活动方法中,有自顶向下、结构化分析、面向对象分析、架构风格,等等。除此之外,还有一系列的软件验证方法,如软件复审与软件测试。纵观这些林林总总的模式与方法,人们无非是想解决两个问题:一是通过恰当的工程活动提高工作产品的质量;二是在工作产品完成后通过恰当的工程活动来保证该产品的质量。因为在软件开发过程中,还有一个很明显的特点,就是在分析、设计、实现和测试这些过程中,每一步都可能引入缺陷,且难以发现,而这些缺陷暴露得越晚,造成的后果就越严重,修改的代价就越高昂。开发活动需要尽量提前发现潜在的缺陷,验证手段必不可少。
题目中问的是如何提高设计的质量,设计是承接分析、指导开发的一个关键环节,在这个环节中很容易引入难以发现的缺陷,而这些缺陷往往又会造成严重的后果。因此提高设计的质量是每个软件项目都会遇到的问题,也是每个项目经理都会思考的问题。提高设计质量包括两个层面的工作:在设计过程中提高设计的质量;在设计完成后对设计结果的质量检查。在答题中需要分别给出相应的策略。
设计工作在分析工作之后,因此,充分的分析是保证设计质量的前提。对于这种改造型项目,原系统的功能、设计和实现的情况直接影响了设计的结果,原系统的情况就是要解决的问题域,’如果对原系统了解不足必然导致设计上的偏差。因此要想提高设计的质量,首先要充分了解原系统。
在设计时还应该选择恰当的设计方法,如有可能可以考虑复用已有的解决案例,如分析模式与设计模式等。不过在这方面,案例中给出的信息甚少,显然不是答题的重点。
根据项目背景的描述,这个设计工作并不简单,需要论证的过程,设计方案的讨论也是必需的。因此老王需要制定出相应的沟通计划,组织必要的会议进行方案讨论,若有必要还需要客户和原系统的开发者参加。
在设计完成后还需要对设计结果进行质量检查,对应这类活动,我们通常采用评审和走查的方式。评审和走查可以比测试更早地找出工作产品中的缺陷,用来检查设计质量非常合适,可以避免缺陷在系统测试阶段才被发现,降低修正缺陷的成本。
除了评审和走查外,对设计过程进行迭代也可以提前暴露设计的缺陷,并将这些缺陷反馈到后续的设计过程中,从总体上减少缺陷数,提高设计的质量。例如在可以将整个项目根据系统模块进行划分,首先升级一个模块,然后把这个过程中发现的问题反馈到后续的迭代过程中。
如果能够做好上述工作,设计就不会产生重大的偏差,保证设计的质量。
对于第二个问题,除设计外,老王还需要特别注意哪些工程活动。
在分析第一个问题是我们已经找到了一部分答案—分析。分析是设计活动的基础,在错误的分析上不可能产生正确的设计。因此充分、细致地分析原系统是保证设计质量的前提。
除此之外,对于系统改造的项目,测试的工作显得非常重要。同原系统开发相比,系统改造的总工作量相对较少,但测试的工作量却应该超过原系统开始时的测试工作量。根据案例中的描述,超过80%的程序都存在硬编码的问题,都需要修改。这些程序在修改后首先需要满足同原系统功能一致,可以通过原系统测试用例的测试;其次还要保证与系统升级的目标一致,能够满足设计的 要求,这就需要开发新的测试用例进行测试。因此,如何规划、组织、展开测试工作,也是老王需要特别注意的方面。
除了分析和测试外,其余的工程活动也是不可或缺的,不过相比之下,分析和测试工作更具特殊性,是老王必须特别注意的。
第三个问题与第二个问题是关联的。有了第二个问题的答案,第三个问题就比较容易了。
如何提高分析活动的质量呢?对于案例中的项目来说,系统要解决的是原系统中的缺陷,原系统本身就是问题域,提高分析活动的质量也就是充分地分析原系统。对原系统的分析可以包括对原有业务功能、原设计方案和原程序的分析。对原系统中业务功能的分析需要同客户一起进行,通过同客户的沟通来把握原系统所实现的业务功能。对原设计方案的分析出了参考设计文档外,最好能够同原系统的开发者进行沟通,这样的沟通往往能获取到文档之外的宝贵信息。例如,通过设计文档仅能了解设计的结果,但与原系统开发者的沟通则可以了解到设计的思路。除了这些方法外,对分析的结果进行评审也是保证分析质量的一种有效的方法。
对于测试工作,上面已经讲了很多,既需要保证修改后的代码仍然与原系统功能一致,又要保证同系统升级的目标一致。
5.5.3参考答案
【问题1】(8分)
老王可以采取以下措施提高设计的质量:
(1)充分分析问题域是保证设计质量前提。(2分)
(2)组织必要的讨论来确定概要设计的方案。(2分)
(3)采用迭代的方法验证设计的正确性,提高设计的质量。(2分)
(4)对设计进行评审或走查。(2分)
【问题2】(9分)
除设计外,老王还需要特别注意以下工程活动:
(1)需要细致分析原有系统。(4分)
(2)对于这样的改造项目,测试的难度和工作量很大,需要把握测试的工作。(5分)
【问题3】(8分)
如何提高这些工程活动的质量:
(1)在分析方面(4分)
①同客户充分沟通,了解原系统的业务需求;
②阅读原系统中的文档和程序,掌握设计和实现的情况;
③如果可能,与原系统的开发者联系,在原开发者的帮助下把握原系统;
④对分析的结果进行评审。
(2)在测试方面(4分)
①使用原系统开发过程中的测试用例进行回归测试;
②针对改造后的系统开发新的测试用例进行测试。