● 摘要
在新的知识经济环境下,软件产业正在迅速成为国家支柱产业和新的经济增长点,但是软件产业始终受到所谓的“软件危机”的影响,如何妥善解决这个问题是软件工程研究的最根本目标。消除“软件危机”的最直接要求就是提升软件质量。软件质量包括软件产品质量和软件过程质量两方面。软件产品质量的研究已经比较成熟,常见的是ISO/IEC 9126标准,该标准规定软件产品质量可以从六个方面进行判断,也就是六类质量属性(功能性、易用性、可靠性、效率、可维护性,以及可移植性)。这个标准已经成为软件产品质量的最基本评估准则。过程控制技术在其他领域的成功应用受到计算机行业专业人士的高度关注,如何在人为因素影响较大的软件行业,通过改善软件过程质量来改善最终产品的质量,有关软件过程的研究和实践逐渐升温。现在软件过程研究还偏重于软件产品质量,对软件过程本身的特性,以及软件过程对产品质量的促进作用等等的相关研究工作还不足。诸如下面一些问题,什么样的软件过程算作完善的过程?软件过程的质量如何定义和度量,应该使用什么标准来衡量软件过程质量?提升哪些软件过程特性,提升到何种程度,可以提升软件产品的特定质量属性?等都没有很好的答案。作为软件过程研究的重要成果,诸如CMM(Capability Maturity Model,能力成熟度模型)、CMMI(Capability Maturity Model Integration,能力成熟度模型集成)、ISO 9001:2000、SPICE(Software Process Improvement and Capability Determination,软件过程改进和能力测定),以及ISO/IEC 15504等模型和标准,通常认为改善组织整体的过程成熟度就自然而然地提高最终软件产品的质量,但是对软件产品质量和过程质量关系到底如何,没有进行进一步研究。现在一些研究成果也发现光关注最终产品质量或者过程质量是难以最终实现软件质量快速提升目标的。“质量”是个模糊的概念,质量管理能力提升到统计控制阶段,必须要使用定量技术,使用数据来证明。现在软件过程基本上使用文本描述性的,使用成熟度等级等比较粗犷的方式评判过程质量的好坏程度,这是远远不够的,我们是否能够建立类似于ISO/IEC 9126软件产品质量模型的规范化过程质量模型呢?如果对软件过程质量和相关的质量属性有良好和规范的定义,并且明确产品质量和过程质量之间的必然关系,当进行产品管理和过程改进时,我们会更加明确过程改进的重点,着重改善质量级别比较高,或者对产品质量影响最大的软件过程或者软件过程某方面属性,这样对明确不同部门的改进重点也有指导意义。任何一个软件组织都有大量开发和管理过程,不同过程之间的关系错综复杂。CMM/CMMI等过程改进模型关注企业的整体过程成熟度,关注全部软件过程的整体表现结果,对单个过程的质量改善并没有关注。CMMI连续式表示、Bootstrap,以及ISO/IEC 15504等注重对典型过程的过程能力评估,设定6个过程能力等级,以此标识特定过程的成熟度和改进步骤。所采用思路与CMM/CMMI阶段式表示很类似,也是关注组织/过程成熟度,没有对软件过程质量提供定量支持,无法区分不同软件过程之间的影响,也就无法实现对特定软件过程的孤立定量分析。为标识软件过程之间的相互影响,作者使用统计过程控制技术SPC(Statistical Process Control)实现对单个软件过程质量的独立分析。在分析Shewhart控制图的缺陷之后,作者对异常因素进行细分,进一步细分为内部异常因素和外部异常因素;接着给出软件过程质量的两种定义,分别是全过程总质量和软件过程分质量;最后提出判断全过程总质量异常和软件过程分质量异常的过程质量诊断表,有利于明确过程质量异常的发生源是软件过程自身,还是其他软件过程。在此基础上,参照ISO/IEC 9126标准和PROFES(Product Focused Software Process Improvement)方法,作者提出软件过程质量通用模型和过程质量属性集,把软件过程质量细化为六类质量属性(功能性、可靠性、易用性、效率、可维护性、支持完备性),每类质量属性又细化为多个子质量属性。这种模型非常有利于使用G-Q-M(Goal- Question- Metric)度量方法建立对特定软件过程的度量计划,最终实现对特定软件过程的纵向和横向定量分析。这个模型也着重解决软件产品质量属性和软件过程质量属性之间的对应关系,有利于进一步明确特定过程的改进目标,有利于PROFES方法和CMMI模型等常见过程改进策略的实施。对于每种软件过程质量属性而言,需要提供相应的度量和分析手段。在本论文中,作者着重研究“依从性”、“可追溯性”和“知识管理程度”等三个子质量属性的度量和分析手段。 “依从性”子质量属性指的是过程执行行为和事先定义的过程规范之间的一致性程度。作者使用事件来表示过程模型规范行为和实际的过程执行行为,使用两个事件树来表示过程模型事件和过程执行事件;在此基础上,作者使用事件树间距离来表示过程模型和过程执行之间的偏差程度,并提供两者之间的最优化转换算法。相对于常见的字符串匹配方法,基于事件树的方法可以支持更多操作,而且支持并行、循环等更多事件逻辑。“可追溯性”子质量属性指的是从过程质量故障表征反向推理,找到导致该故障的故障源。作者使用模糊Petri网来模拟软件过程故障产生和传播过程,使用产生式规则表示故障知识和故障概率,提出一个反向推理机制,实现从软件过程质量故障到故障源的分析判断。“知识管理程度”是支持完备性属性类的一个子质量属性,指的是组织为了保障软件产品质量和过程改进效果,对知识资源全生命周期的管理程度。作者分析过程改进的知识管理特点,CMMI等过程改进模型与知识管理之间关系,基于CMMI和SPICE(Software Process Improvement and Capability dEtermination)模型,定义一种知识管理成熟度模型,以及知识管理程度度量元。最后,作者总结面向软件企业和过程改进组织的知识管理系统化实施方法,包含9个步骤,涉及咨询、调研、技术支撑等不同方面。国内小型软件企业在过程改进过程中遇到很多问题,其中,目前的庞大复杂的过程改进模型不适合,没有合适的自动化支撑工具是主要的障碍。作者分析中国小型软件企业实施CMM/CMMI式过程改进碰到的问题,提出对CMM/CMMI模型、角色和过程域等进行剪裁的系统化实施新思路,以适应小型企业需求。基于上述剪裁原则和系统实现思路,作者把软件企业的管理流程分为三类过程集合(项目管理过程、项目研发过程,以及组织支持过程),其中大多数过程对应到CMMI 2级和3级的一个或者多个过程域。最后,作者把上述成果集成到自主开发的软件过程改进支撑系统iManager中,这个系统还实现知识管理、协作机制、消息机制、项目管理等众多机制。借助这个系统,用户可以根据项目特点定制特定项目的管理流程,实现过程改进活动的工程化和信息化,解决小型软件企业过程改进实施难,项目管理复杂,难以工程化等问题。