深度探索c对象模型:软件Software质量保证(SQA)深度探索疯狂代码ĵ:http:/CrazyCoder.cn/SoftwareTesting/Article35200.html软件Software质量保证(SQA)是建立套有计划有系统思路方法来向管理层保证拟定出标准、步骤、实战和思路方法能够正确地被所有项目所采用软件Software质量保证目是使软件Software过程对于管理人员来说是可见它通过对软件Software产品和活动进行评审和审计来验证软件Software是合乎标准软件Software质量保证组在项目开始时就起参和建立计划、标准和过程这些将使软件Software项目满足机构方针要求、基本目标目标1:软件Software质量保证工作是有计划进行目标2:客观地验证软件Software项目产品和工作是否遵循恰当标准、步骤和需求目标3:将软件Software质量保证工作及结果通知给相关组别和个人目标4:高级管理层接触到在项目内部不能解决不符合类问题2、QA由来我们知道国外很多大公司QA职责就是测试(主要是系统测试)比如IBM、CA、PeopleSoft等其实在最初几乎所有公司都是这样后来由于缺乏有效项目计划和项目管理(projectmanagement)留给系统测试时间很少(注:我以前做个项目项目经理(projectmanager)就明确告诉我系统测试就1天没得商量)另外需求变化太快没有完整需求文档测试人员就只能根据自己想象来测试这样来测试就很难保障产品质量事先预防QA职能就应运而生事先预防其实是借鉴了TQM思想而且也符合软件Software工程“缺陷越早发现越早修改越经济”原则这些思想渊源还可以追溯到中国古代典故中比如曲突徙薪、扁鹊论医术等特别是扁鹊论医术这个典故我偶然在国外篇文章中看到了(后来在林锐文章中也看到了)常感叹我们国人连祖先思想文化遗产都丢差不多了3、QA现在目前实施CMM企业越来越多了CMM模型就要求建立QA角色这里QA类似于过程警察主要职责是检查开发和管理活动是否和已定过程策略、标准和流程致检查工作产品是否遵循模板规定内容和格式在这些企业中般还要求QA独立于项目组以保障评价客观性从国内来看多数QA没有技术背景检查出偏差多为鸡毛蒜皮再加上自己没有令人信服背景领导也不支持当然做起来就很困难了缺乏信任和支持只是个方面QA工作本身就很具挑战性它要求QA具有软件Software工程知识、软件Software开发知识、行业背景知识、数理统计知识、项目管理(projectmanagement)知识、质量管理知识等等我们常常遇到这样问题改进到定程度就很难突破感觉心有余而力不足了就开始郁闷了后来通过学习、培训、交流思想和技能得到升华又发现了木桶中最短那块然后又开始改进然后又遇到了玻璃天花板然后……就这样处于郁闷循环中假使我们掌握了所有知识能突破所有玻璃天花板那是不是QA就可以帆风顺了答案是否定QA角色定义本身就有很大局限性QA充当是过程警察角色无论是否有意义都专横地强制过程执行容易在项目组中造成敌对关系受到排挤而且这种警察姿态也破坏了团队(Team)精神如此来QA工作还需要是人际关系技能就如我以前写质量平衡和QA应该独立于项目组吗?样艺术化地处理这种关系4、QA未来从某种程度上说独立QA审查机制是瀑布模型产物随着现代软件Software开发技术演变螺旋模型和迭代模型兴起QA机制正在悄然发生变化这种变化就是从独立专职QA向贯穿过程兼职QA演变在CMMI模型中这种兼职QA也是被允许为什么会发生这种改变呢?无论是XP、RUP还是其它先进思路方法论都是先产生架构然后再增量开发直到完成这种模式中需求和设计缺陷在各个迭代周期被所尽早发现和修复质量也内建于架构和过程中项目成本和进度也得到保障到那时是不是独立QA就不复存在了呢?有些成熟度较低企业还是需要主要是保证过程执行有效性和评价客观性5、SQA理论探索1、过程认识我们都知道个项目主要内容是:成本、进度、质量;良好项目管理(projectmanagement)就是综合3方面原因平衡3方面目标最终依照目标完成任务项目这3个方面是相互制约和影响有时对这3方面平衡策略甚至成为个企业级要求决定了企业行为我们知道IBM软件Software是以质量为最重要目标而微软“足够好软件Software”策略更是耳熟能详这些质量目标其实立足于企业战略目标所以用于进行质量保证SQA工作也应当立足于企业战略目标从这个角度研究SQA形成对SQA理论认识软件Software界已经达成共识:影响软件Software项目进度、成本、质量原因主要是“人、过程、技术”首先要明确是这3个原因中人是第位现在许多实施CMM人员沉溺于CMM理论过于强调“过程”这是很危险倾向这个思想倾向在国外受到了猛烈抨击从某种意义上各种敏捷过程思路方法提出就是对强调过程种反思“XP”中个思想“人比过程更重要”是值得我们研究我个人意见在进行过程改进中坚持“以人为本”强调过程和人和谐根据现代软件Software工程对众多失败项目调查发现管理是项目失败主要原因这个事实重要性在于介绍说明了“要保证项目不失败我们应当更加关注管理”注意这个事实没有介绍说明另外个问题“良好管理可以保证项目成功”现在很多人基于种粗糙逻辑从个事实反推到这个结论在逻辑上是这种形成了更加做法这点在SQA理解上是体现较深如果我们考证下历史沿革应当更加容易理解CMM本质CMM首先是作为个“评估标准”出现主要评估是美国国防部供应商保证质量能力CMM关注软件Software生产有如下特点:(1)质量重要(2)规模较大这是CMM产生原因它引入了“全面质量管理”思想尤其侧重了“全面质量管理”中“过程思路方法”并且引入了“统计过程控制”思路方法可以说这两个思想是CMM背后基础上面这些内容形成了我对软件Software过程地位、价值基本理解;在这个基础上我们可以引申讨论SQA2、生产线隐喻如果将个软件Software生产类比于个工厂生产那么生产线就是过程产品按照生产线规定过程进行生产SQA职责就是保证过程执行也就是保证生产线正常执行抽象出管理体系模型如下这个模型介绍说明了个过程体系至少应当包含“决策、执行、反馈”3个重要方面QA职责就是确保过程有效执行监督项目按照过程进行项目活动;它不负责监管产品质量不负责向管理层提供项目情况不负责代表管理层进行管理只是代表管理层来保证过程执行3、SQA和其他工作组合在很多企业中将SQA工作和QC、SEPG、组织级项目管理(projectmanagement)者工作混合在起了有时甚至更加注重其他方面工作而没有做好SQA本职工作根据hjhza意见“中国现在基本有3种QA(按照工作重点区别来分):是过程改进型是配置管理型是测试型”我个人认为是SQA工作和其他区别工作组合在起形成下面根据本人经验对它们的间关系进行个介绍说明4、QA和QC两者基本职责QC:检验产品质量保证产品符合客户需求;是产品质量检查者;QA:审计过程质量保证过程被正确执行;是过程质量审计者注意区别检查和审计区别检查:就是我们常说找茬是挑毛病;审计:来确认项目按照要求进行证据;仔细看看CMM中各个KPA中SQA检查采用术语大量用到了“证实”审计内容主要是过程;对照CMM看下项目经理(projectmanager)和高级管理者审查内容他们更加关注具体内容对照上面管理体系模型QC进行质量控制向管理层反馈质量信息;QA则确保QC按照过程进行质量控制活动按照过程将检查结果向管理层汇报这就是QA和QC工作关系在这样分工原则下QA只要检查项目按照过程进行了某项活动没有产出了某个产品没有;而QC来检查产品是否符合质量要求如果企业原来具有QC人员并且QA人员配备不足可以先确定由QC兼任QA工作但是只能是暂时独立QA人员应当具备QC工作也是要遵循过程要求也是要被审计过程这种混合情况难以保证QC工作过程质量5、QA和SEPG两者基本职责SEPG:制定过程实施过程改进;QA:确保过程被正确执行SEPG应当提供过程上指导帮助项目组制定项目过程帮助项目组进行策划;从而帮助项目组有效工作有效执行过程如果项目和QA对过程理解发生争持SEPG作为最终仲裁者为了进行有效过程改进SEPG必须分析项目数据QA本也要进行过程规范标准那么所有QA中最有经验、最有能力QA可以参加SEPG但是要注意这两者区别如果企业SEPG人员具有较为深厚开发背景可以兼任SQA工作这样利于过程不断改进;但是由于立法、执法集于身也容易造成SQA过于强势影响项目独立性管理过程比较成熟企业企业文化和管理机制已经健全SQA职责范围工作较少往往只是针对具体项目制定明确重点SQA计划这样SQA审计工作会大大减少从而可以同时审计较多项目另方面由于分工细致化管理体系复杂化往往需要专职SEPG人员这些人员要求了解企业所有管理过程和运作情况在这个基础上才能统筹全局进行过程改进这时了解全局SQA人员就是专职SEPG主要人选;这些SQA人员将逐渐转化为SEPG人员并且更加了解管理知识而SQA工作渐渐成为他们兼职工作这种情况在许多CMM5企业比较多见往往有时看不见SQA人员在项目组出现或者很少出现这种SEPG和SQA融合特别有利于组织过程改进工作SEPG确定过程改进内容SQA计划重点反映这些改进内容从保证有效改进特别有利于达到CMM5要求从这个角度国外SQA人员为什么高薪就不难理解了也决定了当前中国SQA人员比较被轻视原因;管理过程还不完善我们SQA人员还没有产生这么大价值嘛!6、QA和组织级监督管理有企业为了更好监督管理项目建立了个角色我取名为“组织级监督管理者”他们职责是对所有项目进行统跟踪、监督、适当管理来保证管理层对所有项目可视性、可管理性为了有效管理项目“组织级监督管理者”必须分析项目数据他们职责对照上图模型就是执行“反馈”职能QA本身不进行反馈工作最多对过程执行情况信息进行反馈SQA职责最好不要和“组织级项目管理(projectmanagement)者”职责混合在起否则容易出现SAQ困境:方面SQA不能准确定位自己工作另方面过程执行者对SQA人员抱有较大戒心如果建立了较好管理过程那么就会增强项目可视性从而保证企业对所有项目较好管理;而QA来确保这个管理过程运行6、SQA工作内容和工作思路方法1、计划针对具体项目制定SQA计划确保项目组正确执行过程制定SQA计划应当注意如下几点:有重点:依据企业目标以及项目情况确定审计重点明确审计内容:明确审计哪些活动那些产品明确审计方式:确定怎样进行审计明确审计结果报告规则:审计结果报告给谁2、审计/证实依据SQA计划进行SQA审计工作按照规则发布审计结果报告注意审计定要有项目组人员陪同不能搞突然袭击双方要开诚布公坦诚相对审计内容:是否按照过程要求执行了相应活动是否按照过程要求产生了相应产品3、问题跟踪对审计中发现问题要求项目组改进并跟进直到解决7、SQA素质过程为中心:应当站在过程角度来考虑问题只要保证了过程QA就尽到了责任服务精神:为项目组服务帮助项目组确保正确执行过程了解过程:深刻了解企业工程并具有定过程管理理论知识了解开发:对开发工作基本情况了解能够理解项目活动沟通窍门技巧:善于沟通能够营造良好气氛避免审计活动成为种找茬活动8、SQA活动软件Software质量保证(SQA)是种应用于整个软件Software过程活动它包含:1、种质量管理思路方法2、有效软件Software工程技术(思路方法和工具)3、在整个软件Software过程中采用正式技术评审4、种多层次测试策略5、对软件Software文档及其修改控制6、保证软件Software遵从软件Software开发标准7、度量和报告机制SQA和两种区别参和者相关——做技术工作软件Software工程师和负责质量保证计划、监督、记录、分析及报告工作SQA小组软件Software工程师通过采用可靠技术思路方法和措施进行正式技术评审执行计划周密软件Software测试来考虑质量问题并完成软件Software质量保证和质量控制活