质量属性包括了正确、可用等功能性属性,也包括了性能,安全,易用,可维护等非功能性属性。各质量属性间本身也存 在正负相互作用力,提高某个质量属性会导致其它质量属性受影响,也会使项目进度成本等其它要素受到影响。项目进度成本有限,不可能满足所有的质量要求,因 此必须系统的确定各质量属性满足的优先级,满足的度。这里面有QFD系统的方法,也可以参考KANO模型真正找到我们投入不多的时间和成本就能大幅增加客户满足度的易用性需求。
因此质量目标应该包含两方面的内容,一方面是功能性的质量目标,主要以产品的无故障运行时间和产品的现场故障密度 来定义。另一方面则是非功能性的质量目标,应该根据非功能性需求中对应的质量属性来定义。只有明确的定义了质量目标才能够去计划和安排质量相关的活动。质 量成本分为COQ好质量成本和COPQ坏质量成本,质量是设计出来的而不是检验出来的,有了质量成本指标可以很好的衡量项目总体的生产率和效率,衡量项目进行中的质量水平。
为了提高和保证软件质量,在项目执行过程中会采取一系列的质量活动,比如评审,培训,测试,代码走查等。这些活动的安排时间点和安排工作量应该和项目质量目标一致。当为了预防质量问题投入的好质量成本小于返工等引起的坏质量成本的时候,都是值得安排的质量活动,质量活动的价值就在于提前发现质量问题,或者通过前期的培训减少质量问题的发生。因此对各活动安排的参考意见为:
需求和总体设计类文档一般要求评审,防止前期的缺陷泄露。另外一个重要的原则就是你认为当前任务执行人无法很好的保证产出物的质量的时候都需要进行评审。我们一再强调评审不是解决成员责任心的问题,评审最重要的作用是要发现潜在的问题,并挖掘遗漏。
对于测试首先需要确定测试的方法论,如果测试方法论没有很好的和生命周期模型配合,则会出现测试和开发工作脱节并 出现较大干扰。因此测试方法论对功能性质量保证会产生很多的影响,确定了测试方法论后再考虑测试的一些计划和策略,这里面包括了对功能性需求和非功能需求 的测试计划和策略。测试是整个产品的最后一道防线,但仍然需要注意到软件质量不是测试出来的,而是设计和开发出来的,测试发现太多的问题只能说明整个团队技能水平不足,我们的过程和规范不成熟,测试是驱动项目和组织去改进质量水平。
项目进行中各阶段工作产品的质量水平可能由项目成员的责任心态度引起,也可能由于项目成员本身的技能水平引起。而 恰好我们的评审都在评审这两方面的问题,当然评审不会起到很关键的效果。对于责任心和态度问题要加强团队建设和项目规则制定,而对于技能的问题则需要前期 在人力资源计划中对项目成员的技能进行评估,发现技能缺陷后要及时组织培训。项目的培训投入是最有益的质量成本投入,将对整个项目的长远期都产生积极的影响。
对于质量计划应该包括的内容为:
1.项目的质量目标(包括功能性属性和非功能性属性的质量要求)
2.各质量属性相互约束分析,满足的优先级和成本效益分析(KANO,QFD)
3.潜在的质量问题和应对分析(评审,培训,代码走查)
4.各阶段的质量目标分解(QFD)
5.项目的质量控制策略(评审安排,覆盖率,培训,测试安排)
6.非功能性质量需求对软件生命周期各阶段的影响,对测试的影响
7.质量属性满足的优先级和成本效益分析
8.质量保证计划