摘要:
本文对软件开发质量管理的层次进行了初步的划分,形成了软件开发质量管理层次模型,并对模型中的各个层次内涵做了简要说明。
关键字:
质量管理、软件开发、层次。
正文:
概述
质量:一组固有特性满足要求的程度,指产品或服务满足规定或潜在需要的特征和特性的总和。它既包括有形产品也包括无形产品;既包括产品内在的特性、也包括产品外在的特性。即包括了产品的适用性和符合性的全部内涵。
软件质量:与软件产品满足明确或隐含需求的能力有关的特征和特征的总和。有四个含义:1、能满足给定需要的特性之全体;2、具有所希望的各种属性的组合的程度;3、顾客或用户认为能满足其综合期望的程度;4、软件的组合特性,它确定软件在使用中将满足顾客预期要求的程度。
从用户最感兴趣的的角度来说,软件质量可以从三个不同的角度来看待:如何使用软件、使用效果如何、软件性能如何;从软件开发的团队的角度来说,不仅要生产出满足质量要求的软件,也对中间产品的质量感兴趣,也对如何运用最少的的资源、最快的进度生产出质量最优的产品感兴趣;从软件维护者的角度看,对软件维护方面的特性感兴趣;对企业的管理层来说,注重的是总体效益和长远利益,就是说质量好的软件一般可以帮助企业扩大市场;反之,质量差的软件一般会造成企业市场萎缩。
软件质量特性:根据《GB/T16260-1996(idt ISO/IEC9126:1991)信息技术 软件产品评价 质量特性及其使用指南》软件的质量特性包括功能性、可靠性、易用性、效率、可维护性、可移植性等六个方面,每个方面都包含若干个子特性:
功能性:适合性、准确性、互操作性、依从性、安全性;
可靠性:成熟性、容错性、易恢复性;
易用性:易理解性、易学性、易操作性;
效率:时间特性、资源特性;
可维护性:易分析性、易改变性、稳定性、易测试性;
可移植性:适应性、易安装性、遵循性、易替换性;
质量管理:在质量方面指挥和控制组织的协调的活动,指对确定和达到质量所必须的全总职能和活动的管理,其管理职能主要包括制定质量方针和质量目标以及质量策划、质量控制、质量保证和质量改进。
软件开发质量管理,就是为了开发出符合质量要求的软件产品,贯穿于软件开发生存期过程的质量管理工作。
软件开发质量管理层次初步划分如下:
1、技术层次(数据、编程、文档)
2、方法体系层次(措施、项目、过程)
3、社会因素层次(质量环境、技术标准、业务标准、人员)
软件开发质量管理层次模型如下图:
技术层次
1、数据质量管理层次
多数情况下,软件系统的最终目的是对用户关心的各类数据(信息)完成各种各样静态或者动态的处理或管理任务,为用户创造他们所期望和额外的价值。因此数据质量是用户最为关心的,数据质量也反映了软件系统产品的质量。数据质量是数据抽取、数据转换、数据整合、数据仓库以及管理信息系统开发等项目中质量控制和质量保证必须考虑的主要工作。数据质量管理可分为人工比对、程序比对、统计分析三个层次。
1.1 人工比对
为了检查数据的正确性,测试人员打开相关数据库,对转换前和转换后的数据进行直接的比对,发现其不一致性,通知相关人员进行纠正。
1.2 程序比对
为了自动化地检查数据的质量,更好地进行测试对比,程序员编写查询比对程序给测试人员使用。测试人员使用此程序对转换前和转换后的数据进行比对,发现其不一致性,通知相关人员进行纠正。
1.3 统计分析
为了更加全面地从总体上检查数据的质量,需要通过统计分析的方法,主要通过对新旧数据不同角度、不同视图的统计对数据转换的正确程度进行量化的分析,发现其在某个统计结果的不一致性,通知相关人员进行纠正。
2、编程质量管理层次
软件系统是靠“编”出来的,为了确保软件产品的质量,就必须确保软件程序代码的质量。为了提高编程质量,应检查源码的逻辑、属性、对象命名标准、语言代码布局等内容;代码的编译、链接、集成和构建必须得到验证和确认。编程质量管理层次可分为黑盒测试、灰盒测试、白盒测试、编译检查、编程规范、编程逻辑、编程优化。
2.1 黑盒测试
黑盒测试检验是否符合系统需求,也称功能测试或数据驱动测试。它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。
2.2 灰盒测试
灰盒测试介于白盒与黑盒二者之间,关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。
2.3 白盒测试
白盒测试也称结构测试或逻辑驱动测试,它是在知道产品内部工作过程的情况下,按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能。白盒测试的主要方法有逻辑驱动、基路测试等。
2.4 编译检查
使用开发工具所带的编译功能或专门程序对软件源码进行检查,分析和寻找源码存在的问题。
2.5 编程规范
通过人工源码检查判断源码是否符合企业已经制定的相关编程规范。制定编程规范,在企业内形成一个开发约定和规则,有利于整体风格统一、代码的可读性、可维护性和可扩展性。
2.6 编程逻辑
所编写的源码是否考虑周全,无矛盾或遗漏之处。常见问题如:忘记定义变量就使用、变量没有赋值初就直接使用、输入输出的数据类型与所用格式说明符不一致、没有注意数据的数值范围造成数组越界或数据溢出、输入时数组的组织方式与要求不符、循环语句可能会造成死循环、条件语句只考虑符合的情况而没有考虑例外的情况、读取文件或数据库中的数据没有考虑例外情况,等等。
2.7 编程优化
通过人工或软件检查判断是否可进一步提高源码总体性能和运行可管理性。总体性能如内存管理、数据库组织和内容、非数据库信息、任务并行性、网络多人操作、关键算法、与网络、硬件和其他系统接口对性能的影响等等;运行可管理性如便于控制系统运行、监视系统状态、错误处理;模块间通信的简单性等等。
3、文档质量管理层次
文档(包括模型)是软件开发过程中的中间成果,这些中间结果关系到软件需求的准确性完整性、设计的合理性,对软件系统的最终结果有决定性作用。文档质量管理层次包括文档规范、文档语法、文档语义、文档逻辑、文档美学、文档优化。
3.1 文档规范
文档成果符合企业或业界已经制定的文档模板规范。企业甚至行业应当制定统一的文档规范,形成一个文档约定和规则,以统一文档内容与风格。
3.2 文档语法
文档成果正确使用通用的工具与术语、符合相关行业的技术标准。所有语言都有它的语法,所有质量合格的文档(包括模型)都应该是语法正确的,不正确的语法会影响规格说明和可视化的质量。
3.3 文档语义
文档成果表达正确、无歧义。所有质量合格的文档(包括模型)都代表它期望代表的语义,而且应该在代表这些语义的时候具有一致性。
3.4 文档逻辑
文档成果考虑周全,不矛盾,满足客户的关键要求,特别是要符合相关行业的业务标准。
3.5 文档美学
文档成果是最佳表述,文字、图表是均衡和完整的。就是追求平衡的美,每个组成部分应该不大不小,可解读、可变更、不同时代表太多的元素。
3.6 结果优化
通过检查判断文档成果(如项目计划、需求规格、设计方案)是否还有改进的空间,以尽可能达到最佳方案。任何一项设计,都可以有许多不同的方案,通过“方案优化”选定一种最好的方案。
任何一位设计师在做一项设计的时候总是选择他认为是最好的方案,都有某种程度上的“优化”,因此他可以说他的产品是经过“优化”的。无论何种意义上的优化,都有一个共同的特点,就是相对性。这个相对性有两方面的意义,一是优化是相对某种目标的,目标不同优化的结果不同。另一方面是在大多数的情况下,优化的结果并不是最优的,只能是相对好的。
方法体系层次
1、措施质量管理层次
为提高软件质量企业所采取的相关措施。决定成败的不是目标,而是措施。任何好的规章制度或计划,最终都需要具体措施才能落到实处。措施层次包括质量检查、质量保证、预防不合格品、完美无缺。
1.1 质量检查
保证质量的方式是进行临时性的最后检查,然后消除次品。软件测试是软件质量检查的具体实现环节。把软件测试有效地组织进软件的生产流程,是软件质量控制规划的主要内容。
1.2 质量保证
质量目标仍主要通过生产部门或企业进行生产过程的优化和稳定化来保证质量目标的达成。从软件产业的发展初期到目前的大型软件开发过程,软件质量保证已经成为开发中的一个不可分割的部分。
1.3 预防不合格品
整个软件业项目属于需求分析和软件设计的错误和缺陷约占软件错误的64%,而属于程序代码的错误仅占36%。软件错误具有随着阶段的进展而产生积累与放大效应,因此应当尽早消除错误,否则“差之毫厘,失之千里”。所以在软件开发生命周期的前期就通过对关键过程成果的评审控制来预防不合格品。
1.4 完美无缺
这一级上的企业都有一种内在的质量文化氛围,在此氛围下的方方面面工作都有助于质量的提高。每个员工都意识到质量对企业成功的重要性,都在寻求提高质量的新途径,都在为达到完美无缺而奋斗。同时,企业始终如一地面向外部客户,通过优越的设计质量来满足客户需要,并从供应商到客户形成一个优化的管理流程。
2、项目管理质量层次
软件开发任务一般是以项目的形式完成,项目管理质量包括组织资源、组建团队、设定目标、确定范围、确定优先级、管理风险、建立沟通机制等内容,其层次分为通用术语、通用过程、单一方法、基准比较、持续改进。
科兹纳博士对项目成功的定义,不仅要满足传统的项目时间、费用和性能的三大目标以及满足客户或用户定义的质量标准,还要满足具有最少的或者双方同意的范围变更、没有干扰组织的企业文化或者价值观、没有干扰组织的日常工作进程等条件。
2.1 通用术语
企业了解了项目管理的重要性,并需要进一步了解对项目管理基础知识以及相关的语言和术语。在企业内部普及项目管理基础知识,使用业界通语言和用术语进行沟通,使大家形成对问题的正确理解。
2.2 通用过程
企业认识到自己需要定义和建立通用过程,以便在一个项目上成功之后,还可以将该过程及其成功经验重复地用于其他许多个项目。在这一层次上,还包括理解项目管理原则对公司所用其他方法的应用和支持。
2.3 单一方法
企业尽量通过单一的方法开发,而不是使用多个方法,可以最好地实现协同效应和控制,认识到了把公司所以方法结合成一个单一方法所产生的协同效应,其核心是项目管理。与使用多个方法相比,只用一个方法所产生的协同效应使得程控更加容易。
2.4 基准比较
不断将本企业的管理实践与行业龙头企业比较,以获得信息来帮助自己改善。企业认识到为了保持竞争优势,过程改进是必要的。基准比较必须连续进行。公司必须决定以谁为基准点及需要比较什么。
2.5 持续改进
质量是“没有最好,只有更好”。企业持续在必要时评估基准比较中获得的信息,实施为改进过程所必要的变革。在 ISO9000:2000 中,持续改进不是一个单独的过程或质量体系要素,而是管理质量体系的方法。
企业最重要的问题是“明天这样做的比今天好”企业要永不满足,没有终点,永无休止地努力工作,追求进步和持续改进,为未来努力奋斗。
3、过程质量管理层次
《GB/T8566—2001(idt ISO/IEC12207)信息技术-软件生存周期过程》把软件生存周期的各个过程分为三类,即基本生存周期过程、支持生存周期过程、组织生存周期过程。
对于质量,强调的是对过程的重视,通过保证每个环节的工作质量,来保证最终质量,而不是通过最后的检验测试找出缺陷。它们的质量概念,不仅涵盖产品,还包括企业的整个运营过程,贯穿产业链的各个环节。确保生产出高质量的软件产品,就是遵循一套有质量原则的软件开发过程。目前软件过程改进主要根据能力成熟度模型集成CMMI,其层次分为初始级、可重复级、已定义级、已经管级、优化级。
3.1 初始级
企业的软件过程是无序的,甚至是混乱的。几乎没有什么过程是经过妥善定义的,项目的成功往往依赖于没写个人的技能和经验。
3.2 可重复级
已经建立了基本的项目管理过程规范,项目经理能跟踪成本、进度、和产品功能等,项目能重复以前的成功。企业的过程能力可以概括为“有纪律的”。
3.3 已定义级
已经将管理和开发两个方面的过程文档化,并综合成企业的标准软件过程。所有项目都可以通过裁减企业标准过程而建立适合于本项目的过程规范。此过程能力可以概括成“标准的”和“一致的”,它建立在整个企业对软件过程中的活动、角色、职责的共同理解之上。
3.4 已管理级
对软件过程与产品都有定量的理解和控制,有专门的数据库系统来收集和分析数据。此过程能力可以概括成“定量的”和“可预测的”。
3.5 优化级
能够有效地识别企业过程的优势和薄弱环节,发现并采用最佳的软件工程实践,预先防范过程和产品中的缺陷。整个企业强调持续地改进过程能力。
社会因素层次
1、企业质量环境层次
企业质量环境是有关创建和管理质量环境的管理,包括质量规划、资源组织、提供相关工具等,其层次可分为质量形象、质量制度、质量战略、质量文化、企业文化、全社会质量意识。
1.1 质量形象
企业的良好形象与其产品和服务的高质量密不可分。质量、信誉、品牌、服务等构成企业整体形象的坚实基础,其中质量形象是企业形象的核心。塑造良好的质量形象是企业提高自身核心竞争力的重要手段。
1.2 质量制度
企业建立了完善的质量制度,包括ISO9001质量管理体系、与质量相关的配套管理、教育、激励制度的完善程度,以及对于质量制度的执行力度。
有些企业或部门制定了太多的规章制度,但都流于形式,最终落到实处的不多。再好的规章制度,再伟大的计划,都成了一堆废纸。对企业来说,最重要的不是制定了多少制度多少计划,而是做了多少事情。
企业如果强调质量,就要检查质量,不检查质量就是不重视质量,有制度就必须执行好。
1.3 质量战略
在企业管理中以人为本,以提高质量为中心,一切活动围绕质量行为,将质量管理提高到战略的高度。制定质量方针目标。
1.4 质量文化
企业在长期的质量管理中形成的具有本企业特色的管理思想和精神理念,同时也是企业员工为实现质量方针目标而自觉遵守的一条共同的价值观和信念。
1.5 企业文化
一个企业中各个部门,至少是企业高层管理者们所共同拥有的那些企业价值观念、经营实践、文化现象。它以企业的价值观体系为基础,以企业员工的群体意识形态为反映。
1.6 全社会质量意识
产品质量不完全取决于企业本身,社会环境、顾客的成熟程度对产品质量起到比较重要的作用。顾客盲目压低价格、压缩进度,造成的恶性竞争环境严重影响产品的质量。
2、标准层次
国际竞争有三个层次:第一个层次是价格和质量的竞争、第二个层次是专利技术的竞争、第三个层次是标准和制度的竞争。谁掌握了标准的使用,谁掌握了标准的制定权,谁就可以抢占先机。一流企业卖标准,二流企业卖品牌,三流企业卖产品,四流企业卖企业。我国软件企业要适应更高层次的竞争,就要在标准领域占据一席之地。
标准主要包括技术标准和业务标准两大类(当然还可以其他分类如基础标准、产品标准、质量标准、管理标准、工作标准、安全标准、术语标准等等)。对标准化领域中需要协调统一的技术事项所制定的标准,称为技术标准。技术标准包含两个方面:一是作为软件开发企业的软件行业技术标准,包括知识体系指南、过程标准、建模标准、质量管理标准、程序语言标准、数据库标准;二是软件开发服务对象所在的行业技术标准,如安全保密标准、技术性能标准。业务标准指的是软件开发服务对象所在的组织或行业制定的业务流程标准和业务数据标准等。
运用统一的技术与业务标准是对于质量能够做出重大而且显著贡献的因素之一,有助于减少无效的讨论,有助于不同的产品之间的兼容和衔接。
标准要不断地与时俱进,因此,标准是种动态信息。
2.1 标准作用范围级别
项目标准:项目团队在软件开发周期的早期就确定下来的相互达成一致的标准集合;
企业标准:企业自行制定的规范整个企业架构和所有企业级交付产品的标准集合;
地方标准:由一个国家的地方一级行政机构(省、州或加盟共和国)制定的标准,称为地方标准。它一般由地方所属的各企业与单位执行。同样是一个行业,每个地方可能有不同的业务政策、业务数据标准、业务流程标准;
行业标准(部颁标准):指没有国家标准而又需要在全国某个行业范围内统一的技术要求。行业规定的全国本行业必须遵守的的业务数据标准、业务流程标准,标准编号一般以行业名称的拼音头个字母打头,如环境HJ、电力DL、公安GA;
国家标准:是在全国范围内统一的技术要求。由国家规定的标准,主要是数据标准,行业之间的接口标准,标准编号一般以GB、GB/T、GB/Z打头。
国际标准:涉及到国际上多个国家或地区必须遵守的如金融、电信、财务、贸易等业务标准。国际标准一般由国际标准化组织制定,如ISO、ANSI、IEEE等等,这也是标准编号的打头字母,如ISO9001。
2.2、标准强制程度级别
强制标准:保障人体健康、人身、财产安全的标准和法律、行政法规规定强制执行的标准是强制性标准,其他标准是推荐性标准;如编号以GB、HJ、DL、GA字母开头的标准,一般业务数据标准是强制标准。
推荐标准:推荐性标准又称非强制性标准或自愿性标准。是指生产、交换、使用等方面,通过经济手段或市场调节而自愿采用的一类标准。如GB/T、HJ/T、DL/T、GA/T,一般业务流程标准、工作规范或指南等是推荐标准。
指导性标准:对标准化工作的原则和一些具体做法的统一规定,称为指导性标准。例如:产品型号编制规则、各类标准编制导则等。如GB/Z、HJ/Z、DL/Z、GA/Z编号的标准。
2.3、软件开发常用技术标准
知识体系:软件工程知识体系指南SWEBOK2004、项目管理知识体系指南PMBOK2000(最新的是PMBOK2004) 、组织管理标准等等;
过程标准:CMMI、PSP、TSP、RUP、软件工程规范国家标准;(AP、XP、ASD等开发过程思想好像还不能称其为标准)
建模标准:UML、软件工程规范国家标准;
质量管理标准:ISO9001:2000、TQC、6σ;
程序语言标准:Java、C++、PB、编程规范;
数据库标准:Oracle数据库后台规范。
3、人员质量管理层次
人员质量是所有工作质量的基础。要提高工作质量,就要以人为本,根本的问题是提高人的质量。人员质量就是人员素质,层次分为个人素质、团队素质、组织素质、行业素质、国民素质。
3.1 个人素质
软件开发的个人素质的内涵很广,包含多个方面,包括学习能力、总结能力、学识经验、进取精神、社交能力、责任心、自我控制、成就动机、灵活性、创造性潜力、管理潜力、工作态度、诚实水平等等。关键是根据自身特点发挥自己的特长,同时要有过硬扎实基本功的真才实学,不做表面功夫花架子的花拳绣腿。这一点在做程序员的时候大家都会很注意学习,但在从程序员提升到设计师、分析师、项目经理时,往往存在不注意学习新角色所需知识技能,学了皮毛就觉得什么都会的情况。
3.2 团队素质
软件开发的团队素质的范围涉及到很多团队管理方面的知识经验技巧。关键是能够合理地按照成员的特点分配工作任务,同时计划好各个工作人员的工作接口,鼓励互相补位。团队素质的提高在于团队建设,团队建设活动包括为提高团队运作水平而进行的管理,以及采用的专门的、重要的个别措施。团队精神就是团队的精神,因此要问某个团队有没有团队精神,不问某个成员有没有团队精神。
软件开发团队素质可以学习参考TSP、RUP、SWEBOK、PMBOK、CMMI、ISO9001等要求进行提高,也可以借鉴AP、XP、ASD等开发经验(不管那种都不一定要完全照搬实施)。
3.3 组织素质
软件开发的组织素质内涵涉及到很多组织管理方面的知识经验技巧。组织应当为实现共同的愿景,建立学习型的组织,不断持续改进。企业组织高层领导可以不必需要那么多软件开发的专业知识,最主要是要认识到人是一切活动的核心,是一切活动成功的前提,所以要尊重专业人员使其发挥作用。根据彼得原理,大部分领导因为在某些方面突出而被提拔到他无法胜任的位置,因此有些被提拔上去的领导急于证明自己样样精通是可笑的。领导最重要的是选对人、用对人、激励人、提高人,使每个人都充分发挥应有的作用。
3.4 行业素质
行业素质有两层意思,一是作为软件开发企业的软件行业,另一个是软件开发服务对象所在的行业。行业素质可以从几个方面看,如行业机构的健全程度,行业学术的活跃程度,行业标准制定的完整程度、适用程度、先进程度,行业标准规范的推广力度和程度,行业从业人员的规模及总体水平,行业外贸出口金额,例如,为什么印度的软件外贸出口金额让中国望尘莫及?为什么印度可以拥有那么庞大的软件蓝领队伍?印度软件企业对CMMI是什么态度,中国软件企业对CMMI是什么态度?为什么对于AP、XP、“颠覆软件工程”的片面理解在中国大有市场?
(注意:《软件工艺》实际上是从另一个角度来强调“个人素质”的重要性,实际上是要说明组织性规范性和创造性特色性之间的平衡,就像《软件工艺》自己所说的那样,“软件工艺并非与软件工程或者计算机科学针锋相对,格格不入。与科学和工程学相比,软件工艺是另一种完全不同的教义,但又能与这两者很好地共存,并从中获益,它融合了艺术、科学、工程学三者”。如果因为强调“个人素质”的作用,强调作坊工艺的作用,而否定团队开发、和使用有效地分析设计方法和过程,就是走向了另一个极端。《软件工艺》把软件的缺陷狭隘地定义成“程序员所犯的错误”,所以其结论是“真正决定项目成败的,是作为个体的程序员的技能、知识和经验。”实际上如果在需求、分析或设计上犯了错,或者在项目管理上犯了错,其造成的缺陷比“程序员所犯的错误”的影响不知道要大多少。另外极限编程所需的程序员随时直接与用户交谈的条件也是大多数软件开发项目很难满足的。)
3.5 国民素质
中国的国民素质与其他国家相比,有些地方是高的,有些地方是不足的。我们要发扬我们的优点,同时也要学习别人的优点,弥补自己的缺点。自己过去为什么会被人看不起、会被人侵略?发几句牢骚,喊几句口号起得了什么作用?我们应当从自己和他人两个方面同时查找原因。关键是不断提高自身的整体素质,增强国力。如果我们看看欧美日等国家的企业是如何进行质量管理的,就不难理解他们的产品质量为什么那么好,甚至连印度在软件质量管理等方面也有很多值得我们学习的地方。
结束语
人是一切人类活动的基础,要提高软件开发质量,就必须以人为本,首先提高人的质量。通过标准化、规范化的建设和落实,通过创建良好的社会和企业质量环境,在企业内部不断改进开发过程质量、项目管理质量,改进质量措施。针对具体项目进行良好的分析设计规划,编写出质量优良的系统程序,确保数据(信息)及其管理的质量,为客户、为社会提供满意的产品和服务。