提起如今的IT项目,软件工程倍受关注。而软件的质量更是众人关注的焦点,因为目前还没有一套完善的评估标准。甚至有人提出,现在的软件开发根本提不上是“工程”,因为它太稚嫩了,还没有一套成熟的标准来比照;因而软件项目极易出现失败或失误。大量实践证实,软件工程项目的成败,通常是因为治理问题(协同工作的能力),而不是技术上的问题。要想做一盘“完美”的软件大餐,质量治理的作用是不言而喻的。
在实际的项目质量治理中,质量治理总是围绕着质量保证(QualityAssurance)过程和质量控制(QualityControl)过程两方面。这两个过程相互作用,在实际应用中还可能会发生交叉。正如引言所述,关于软件的质量,很难下一个非常明确的定义。本文主要针对软件工程中的质量治理来进行讨论。
做软件“大餐”的工序
软件质量保证(SoftwareQualityAssurance,以下简称SQA)的目的是验证在软件开发过程中是否遵循了合适的过程和标准。软件质量保证过程一般包含以下几项活动:
首先是建立SQA组;其次是选择和确定SQA活动,即选择SQA组所要进行的质量保证活动,这些SQA活动将作为SQA计划的输入;然后是制定和维护SQA计划,这个计划明确了SQA活动与整个软件开发生命周期中各个阶段的关系;还有执行SQA计划、对相关人员进行培训、选择与整个软件工程环境相适应的质量保证工具;最后是不断完善质量保证过程活动中存在的不足,改进项目的质量保证过程。
独立的SQA组是衡量软件开发活动优劣与否的尺度之一。SQA组的这一独立性,使其享有一项要害权利——“越级上报”。当SQA组发现产品质量出现危机时,它有权向项目组的上级机构直接报告这一危机。这无疑对项目组起到相当的“威慑”作用,也可以看成是促使项目组重视软件开发质量的一种激励。这一形式使许多问题在组内得以解决,提高了软件开发的质量和效率。
选择和确定SQA活动这一过程的目的是策划在整个项目开发过程中所需要进行的质量保证活动。质量保证活动应与整个项目的开发计划和配置治理计划相一致。一般把该活动分为以下五类:
1)评审软件产品、工具与设施
软件产品常被称为“无形”的产品。评审时难度更大。在此要注重的一点是:在评审时不能只对最终的软件代码进行评审,还要对软件开发计划、标准、过程、软件需求、软件设计、数据库、手册以及测试信息等进行评审。评估软件工具主要是为了保证项目组采用合适的技术和工具。评估项目设施的目的是保证项目组有充足设备和资源进行软件开发工作。这也为规划今后软件项目的设备购置、资源扩充、资源共享等提供依据。
2)SQA活动审查的软件开发过程
SQA活动审查的软件开发过程主要有:软件产品的评审过程、项目的计划和跟踪过程、软件需求分析过程、软件设计过程、软件实现和单元测试过程、集成和系统测试过程、项目交付过程、子承包商控制过程、配置治理过程。非凡要强调的是,为保证软件质量,应赋予SQA阻止交付某些不符合项目需求和标准产品的权利。
3)参与技术和治理评审
参与技术和治理评审的目的是为了保证此类评审满足项目要求,便于监督问题的解决。
4)做SQA报告
SQA活动的一个重要内容就是报告对软件产品或软件过程评估的结果,并提出改进建议。SQA应将其评估的结果文档化
5)做SQA度量
SQA度量是记录花费在SQA活动上时间、人力等数据。通过大量数据的积累、分析,可以使企业领导对质量治理的重要性有定量的熟悉,利于质量治理活动的进一步开展。
要说明的是,并不是每个项目的质量保证过程都必须包含上述这些活动或仅限于这些活动,要根据项目的具体情况来定。
SQA计划中必须明确定义在软件开发的各个阶段是如何进行质量保证活动的。它通常包含以下内容:质量目标;定义每个开发阶段的开始和结束边界;具体策划要进行的质量保证活动;明确质量活动的职责;SQA组的职责和权限;SQA组的资源需求,包括人员、工具和设施;定义由SQA组执行的评估;定义由SQA组负责组织的评审;SQA组进行评审和检查时所参见的项目标准和过程;需由SQA组产生的文档。
选择合适的SQA工具并不是试图通过选择SQA工具来保证软件产品的质量,而是用以支持SQA的活动。选定SQA工具时,首先需要明确质量保证目标。根据目标制定选择SQA工具的需求并文档化,包括对平台、操作系统以及SQA工具与软件工程平台接口的要求等。
如何使白壁“无瑕”
按工序去做也不一定能得到一盘完美的“大餐”,因为火侯等因素实在很难把握。万一把握不好怎么办?软件质量控制主要就是发现和消除软件产品的缺陷。对于高质量的软件来讲,最终产品应该尽可能达到零缺陷。而软件开发是一个以人为中心的活动,所以出现缺陷是不可避免的。因此,要想交付一个高质量的软件,消除缺陷的活动就变得很重要。缺陷消除是通过“评审”和“测试”这类质量控制活动来实现的。
缺陷在软件开发的任何阶段都可能会被引入。项目质量治理过程包含了许多可以识别缺陷、消除缺陷的过程。“识别缺陷”和“消除缺陷”本来是两个不同的过程,但在这里为了简便统一用“消除”来代表它们。潜在的缺陷越大,用来消除它所花的费用越高。因此成熟的软件开发过程在每一个可能会引入潜在缺陷的阶段完成之后都会开展质量控制活动。这些为了消除缺陷的活动包括:需求评审、设计评审、代码走查、单元测试、集成测试、系统测试以及验收测试等。
质量控制的任务就是策划可行的质量治理活动,然后正确地执行和控制这些活动以保证绝大多数的缺陷可以在开发过程中被发现。
正如前面提到的,在进行评审和测试时可检测到缺陷。
评审是面向人的过程,测试是运行软件(或部分软件)以便发现缺陷。在一个项目里,评审和测试活动是预先策划好的(计划书中确定执行哪些质量控制活动和何时执行这些活动)。在执行过程中,根据已定义好的过程来执行这些活动。通过执行这些活动来识别缺陷,然后消除这些缺陷。例如,系统测试过程一般包括制定测试计划,测试计划中应列出在测试执行过程中所有的测试用例,评审测试计划,并且最终执行测试计划。