课程收益 速度和质量越来越成为软件开发制胜的关键,然而管理人员和开发人员长期为以下问题所困扰,通过本课程的学习,将发现问题产生的根源以及行之有效的解决措施。 ①.项目延期最本质的原因是什么? 项目进度紧张,开发人员常常没日没夜地加班,然而项目进度总是一延再延期。 ②.如何有限的工期交付高质量的产品? 客户对软件产品质量要求高,而开发工期却很短,很多项目在面临这种情况,往往采用“先做完再说”的策略,其代价是客户对质量的抱怨和大量的研发人力陷于救火之中。那么正确的策略又是什么呢? ③.如何做好需求分析并写出高质量的需求文档? 软件需求规格的质量极大程度上影响了最终软件产品的质量和项目开发效率,然而国内的工程师很少掌握需求分析方法,更不会写需求文档。 ④.设计文档该写什么?怎样写? 开发人员通常也不知设计文档该写什么,分不清哪些内容属于需求哪些内容属于设计,设计文档细化到什么程度?良好的设计文档提升开发效率,劣质的设计文档浪费开发时间。 ⑤.如何有效开展评审? 评审是提升文档和代码质量的有效手段,然而为何评审效果总是不佳呢?没人愿意参加评审,评审发现的往往是文字错误这样肤浅的问题,评审活动流于形式。 ⑥.如何有效测试? 某些项目要求做单元测试,结果花费不少精力,可是没有发现多少问题。问题出在哪里?单元测试到底值不值得做?测试工作给测试人员带来的挑战是如何在有限的时间内尽可能多的发现软件缺陷,如何面对这样的挑战? ⑦.进度非常紧张的项目应该走流程吗? 某些企业有完善的流程体系,可是很多项目都不愿意按照流程做,最有说服力的理由是流程降低了开发效率。流程的本质到底是什么?进度非常紧张的项目到底该不该走流程? ⑧.如何解决QA和项目经理的冲突问题? QA总是抱怨项目经理不走流程,项目经理总是抱怨QA不为项目做实事,反倒常常“骚扰”。有没有方法扭转这样的局面? ⑨.…… 培训特色 思想性:凝聚质量管理大师的思想,结合软件工程实践方法,揭示软件开发规律,透过案例分析深刻地理解效率与质量相统一的质量管理理念。 实践性:本课程累计了十年来业界知名公司的大量成功案例、失败教训开发出来的,完全不同于通常的教科书或培训所传授的很难操作的理论,具有非常强的实践性和可操作性。 针对性:针对国内项目经理和开发工程师的特点,针对国内软件项目开发过程普遍存在的问题,有重点地进行剖析问题的本质,并给出经过实践验证的、行之有效的措施。 课程大纲 1.软件质量管理的概述 本单元学习目标:掌握质量管理的一些重要的理念和主要概念,认识到通过有效的质量管理才能获得开发的高效率 1.1.质量管理发展里程 1.1.1.研讨:质量与效率关系 通过研讨,让学员体会到:效率和质量是孪生兄弟,是一体的两面,遵循软件开发规律和质量管理规律,在项目前期注入质量要素,才可能获得项目开发整体上的高效率 1.1.2.介绍质量管理发展历程 ——质量靠个人保证 ——质量靠测试保证 ——质量靠设计保证 ——质量靠流程保证 1.1.3.案例分析:质量管理对日本工业和印度软件业发展所起到的推动作用 实例来说明质量管理给企业带来的是高效率,而不是效率的阻碍 1.2.从质量成本要效率、要质量 1.2.1.质量成本的定义 1.2.2.质量成本分类:预防成本、评估成本和失效成本 1.2.3.加强预防成本的投入,可从过程重用和技术重用两方面提升效率和质量,变失效成本为利润 1.2.4.从救火文化到预防文化的转变 1.2.5.“一次把事情做对”的对提升开发效率的重要作用 1.2.6.十乘十乘十法则介绍,说明缺陷预防和把缺陷消灭在前期才能使项目获得高效率 1.2.7.从软件开发的缺陷分布来说明需求分析的质量如何影响整体开发效率的 1.2.8.案例分析:A公司有一个紧急项目,应该怎样做? 面对紧急项目,多数管理者都会自乱阵脚,需求还没有讨论清楚,开发人员匆匆编码,结果是返工、不断地大量返工,项目进度被大大拖延了。 2.高质量的软件需求挖掘、分析和文档化 本单元学习目标:掌握需求分析方法和需求文档的写作方法,从源头上把控好项目的质量,减少返工,提高效率 2.1.需求的重要性 2.1.1.需求对项目的进度和质量影响 2.1.2.需求对测试活动和其它相关组的影响 2.2.需求开发典型问题 2.3.案例分析:请分析某项目的需求文档有什么问题,如何改进 通过案例,说明什么是好的需求文档,进一步体会需求问题为项目带来的后果。 2.4.造成需求开发典型问题的原因 2.5.软件需求过程介绍,需求开发介绍,包括需求挖掘、分析、文档化、评审确认等 2.6.软件需求挖掘和分析过程 2.6.1.需求层次:needs,feature和requirement 2.6.2.需求来源和获取方法,如客户访谈、竞争对手产品分析等 2.6.3.需求分析方法和工具,如用例图 2.7.高质量需求文档的标准 2.7.1.好的需求文档特点 2.7.2.需求文档中避免出现的一些词汇 2.7.3.演练:写出一功能需求的输出部分 2.8.总结:如何制定出高质量的需求文档 3.高效率的软件设计 本单元学习目标:剖析软件设计常犯的错误,如何避免这些错误,写出高质量的设计文档 3.1.研讨:我们做设计时,都常犯哪些错误 3.2.设计过程 3.3.设计基本原理和基本概念 3.3.1.基本分解问题、简化问题的原理 3.3.2.抽象概念 3.3.3.层次化概念 3.3.4.模块化概念 3.3.5.信息隐蔽概念 3.4.模块分解 3.4.1.从开发总成本看模块分解 3.4.2.模块数据的合适数量 3.4.3.模块分解的基本原则 3.5.概要设计要点 3.6.详细设计要点 3.7.问题1:需求和设计界限不清 3.7.1.什么是需求,什么是设计,二者区别在哪里 3.7.2.接口描述在需求中还是在设计中 3.7.3.设计中数据描述和需求中数据描述有何不同 3.8.问题2:设计的层次和详细程度问题 3.8.1.需要几个层次的设计文档合适 3.8.2.设计文档的内容结构和不同层次文档的内容衔接 3.8.3.详细设计要详细到什么程度 3.8.4.设计的层级和颗粒度的原则:使得开发效率最大化并满足维护需要 3.8.5.示例:展示某嵌入式软件概要设计文档和详细设计文档,说明好的设计文档是如何提高开发效率的 3.9.问题3:设计文档的内容冗余问题 3.9.1.使用的数据设计工具时,文档中的数据设计部分怎样写 3.9.2.使用设计建模工具时,设计文档又怎样写 3.10.设计要考虑的其它因素 3.10.1.设计方案要进行重用和购买分析 3.10.2.设计要遵循高内聚、低耦合原则 4.有效评审 本单元学习目标:技术评审是质量控制非常高效的手段,通过本单元学习掌握技术评审有效过程和方法 4.1.评审的意义 4.1.1.尽早发现产品缺陷,减少返工代价 4.1.2.通过评审熟悉整个系统 4.1.3.促进参与人员之间的技术交流和相互学习 4.1.4.增进团队交流,增加团队凝聚力 4.1.5.使作者能高质量地完成工作产品 4.2.案例分析:剖析某项目的技术评审 4.2.1.案例中的评审过程存在哪些问题 4.2.2.在贵公司中,技术评审又存在哪些问题 4.2.3.对评审存在的问题有什么解决方法 4.3.评审的过程 4.3.1.计划评审活动,正确地选择评审专家 4.3.2.介绍会议,为有效评审做好准备 4.3.3.预评审是发现问题的关键阶段 4.3.4.评审会议的目的确认问题而不是做技术交流 4.3.5.评审问题解决跟踪确保问题全部得到正确解决 4.3.6.评审结果分析 4.4.技术评审FAQ 4.4.1.作者不愿意别人提出问题,评审人员为了顾及面子不愿意提出问题怎么办? 4.4.2.评审人员把评审当成额外的工作,不愿意参加评审怎么? 4.4.3.评审人员的技能不足怎么办? ——交叉工作模式介绍 ——简介敏捷开发的结对编程方法 4.4.4.评审人员只与评审对象部分内容部分相关,对他的评审又什么要求? 4.4.5.评审对象充满了低级错误,或者有些技术问题作者还没有考虑清楚,如何面对这种情况? 4.4.6.如何使评审检查表效能最大化?什么时机使用? 5.有效测试 本单元学习目标:软件测试工作在许多企业中都比较薄弱,存在众多问题,通过本单元学习掌握克服这些问题方法,有效开展测试活动 5.1.研讨:阻碍项目进行有效测试有哪些因素? 5.2.测试概述 5.2.1.测试的常见误区 5.2.2.测试的心理学问题:测试的目的为了发现问题,不是为了证明程序是对的 5.2.3.测试的经济学问题:如何在有限的时间尽可能发现更多的缺陷 5.3.测试分类 5.3.1.静态测试vs动态测试 5.3.2.黑盒测试vs白盒测试 5.3.3.手工测试vs自动化测试 5.3.4.按阶段分类:UT/IT/ST/Alpha测试/AT/Beta测试 5.4.测试过程 5.4.1.测试过程介绍,包括制定测试策划和计划、设计测试用例和测试环境准备、测试执行、测试分析 5.4.2.测试活动在开发活动中的位置 5.4.3.如何制定测试策略 5.4.4.演练:分别为两个项目制定测试策略 5.5.测试用例设计方法 5.5.1.什么是测试用例,用例的输入和输出通常有哪些 5.5.2.什么是黑盒方法 5.5.3.介绍等价类划分方法 5.5.4.演练:用等价类划分方法设计测试用例 5.5.5.介绍边界值分析方法 5.5.6.演练:用边界值分析方法设计测试用例 5.5.7.介绍判定表方法 5.5.8.介绍因果图方法 5.5.9.介绍正交阵列方法 5.5.10.什么是白盒方法 5.5.11.介绍各逻辑覆盖,如语句覆盖、分支覆盖、条件覆盖、路径覆盖等 5.6.单元测试和集成测试 5.6.1.什么是单元测试 5.6.2.单元测试的投入产出比高吗?剖析是否值得做单元测试 5.6.3.演练:如何针对给定的函数进行单元测试 5.6.4.单元测试基本概念(桩、驱动)介绍 5.6.5.高效单元测试过程 ——用例如何写 ——怎样打桩 ——怎样利用单元测试工具 ——有效单元有哪些原则和注意事项 5.6.6.集成测试介绍 5.7.系统测试 5.7.1.功能测试介绍 5.7.2.性能测试介绍 5.7.3.安全性测试介绍 5.7.4.可恢复性测试介绍 5.7.5.兼容性测试介绍 5.7.6.界面测试介绍 5.7.7.演练:如何对测震仪产品进行测试 5.8.测试自动化 5.8.1.为何要自动化测试,自动化测试能带来哪些价值 5.8.2.三种不同级别的自动化 ——静态脚本录制 ——哑猴测试,随机的自动化测试 ——智能测试自动化,通过建模动态生成测试用例 5.8.3.测试自动化工作建设的一些建议 5.9.测试工具介绍 5.9.1.白盒测试工具介绍,包括静态白盒工具和动态白盒工具 5.9.2.黑盒测试工具介绍 5.9.3.性能测试工具介绍 5.9.4.测试管理工具介绍 5.10.有效测试管理 5.10.1.测试人员技能规划 5.10.2.测试人员职业发展规划 5.10.3.测试过程资产库和测试用例库建设 6.缺陷管理和质量度量 本单元学习目标:掌握软件缺陷管理过程和方法,通过缺陷管理、质量的度量评估和和改进项目开发过程 6.1.缺陷管理 6.1.1.缺陷管理的三个层次 ——单个缺陷的生命周期管理 ——项目级缺陷管理 ——组织级缺陷管理 6.1.2.缺陷管理意义 ——确保每个缺陷被有效解决 ——从缺陷数据来看,如何改进开发和测试过程 ——利用缺陷库有效地预防缺陷和解决缺陷 6.2.缺陷度量和分析工具 6.2.1.ODC分类法介绍 ——ODC背景介绍 ——ODC分类简介 ——举例说明如何用ODC缺陷分类分析改进开发和测试工作 6.2.2.缺陷密度介绍 ——缺陷密度的定义 ——如何用缺陷密度评估质量控制效果和交付产品交的质量 ——如何用缺陷密度改进开发过程 6.2.3.缺陷剔除率介绍 ——缺陷剔除率的定义 ——如何用缺陷剔除率评估质量控制效果,并改善高质量控制方法 ——如何用缺陷剔除率改进开发和测试过程 6.2.4.缺陷分析工具:柏拉图、控制图 ——使用柏拉图找重要问题 ——使用控制图找异因,从过程着手做改进 6.2.5.缺陷动态预测模型:Rayleigh曲线 7.质量保证和过程质量 本单元学习目标:了解过程的重要性,剖析流程不被执行的原因,如何通过QA保证流程有效在项目中实施 7.1.质量保质和质量控制 7.1.1.区分质量保证和质量控制 ——质量控制关注产品,被动的,去发现缺陷 ——质量保证关注过程,主动的,去预防缺陷 7.1.2.从质量铁三角看过程的重要性,仅仅是牛人和工具是无法保证项目成功的 7.1.3.流程本质是什么 ——流程是最佳实践的固化,不应是降低效率的官僚体系 ——关注过程的项目和不关注过程的项目效率对比 7.2.产品质量和过程质量 7.2.1.软件产品质量的定义 ——开发者的质量观:满足规格 ——客户的质量观:适用 7.2.2.McCall软件质量模型,从三个方面对软件质量进行系统全面地分类说明 ——产品运行方面:正确性、可靠性、可使用性、效率、完整性 ——产品修正方面:可维护性、测试性、灵活性 ——产品转移方面:互联性、可移植性、复用性 7.2.3.什么是过程质量,从三个方面说明 ——组织级流程定义质量 研讨:从“不拉马的士兵”看到什么? 剖析为何许多项目不愿意走流程,或者走了流程效率反而会下降。 CMMI模型和敏捷方法的介绍与对比。 ——项目级流程裁剪质量 ——过程执行的质量 7.2.4.过程质量定义以及过程质量和产品质量的关系 ——好的过程体现了产品质量要求 ——过程质量决定了产品质量 7.2.5.演练:如何在项目计划中体现质量要素 7.3.QA的角色和职责 7.3.1.研讨:在项目中,QA的目标和项目经理的目标是否相同? ——剖析QA和项目经理常常发生冲突的根源 ——国内QA普遍的角色错位 7.3.2.QA的律师角色 7.3.3.QA的教练角色 7.3.4.QA的医生角色 7.3.5.QA的警察角色 7.3.6.QA的牧师角色 7.4.过程引导 7.4.1.过程引导的必要性:仅有培训不足以让流程执行者具备执行流程的能力 7.4.2.QA进行过程引导的方法 7.4.3.演练:针对项目的某些场景如何进行流程的引导 7.5.审计工作 7.5.1.过程审计的必要性:发现过程问题,及时纠正 7.5.2.几种错误的审计方式介绍 7.5.3.正确的审计方式和过程 7.5.4.如何正确地写审计报告 8.研讨与总结 8.1.学员提出有针对性的问题,进行研讨 8.2.学员对课程的收获进行总结 8.3.讲师对课程做总结
课程主讲 周志龙:资深讲师,资深咨询顾问 原QAI资深咨询顾问 中国软件行业协会授予的十大咨询师 专业背景:哈尔滨工业大学工学硕士,具备14年产品研发、研发管理、质量管理及研发过程改进咨询经验。曾在华为公司北研所和华为3COM公司任职7年,历任研发工程师、研发经理、质量总监等职位,对IPD和CMMI有深入的研究和丰富的实践,是华为最早按照研发流程体系成功完成项目的首批项目经理;主导了华为和华为3COM研发流程体系建设、推行和改进工作,在华为3COM的软件开发过程的变革获得巨大成功,使得华为3COM软件开发远远领先于业界。 咨询背景:有6年的咨询经验,曾在全球著名的咨询公司QAI任资深咨询师,为三十多家高科技企业做过咨询服务,涉及领域包括金融、邮电、电力、汽车、电子政务、税务、手机等,包括世界500强企业、上市公司。主要咨询客户有:台湾晨星半导体,南京埃斯顿、长春一汽,北京伟创力(中国),埃斯顿自动化,北京软脑软件,北京华胜天成,北京天碁科技(T3G),中星电子,北京中科恒业,奥德思电器,江苏大唐,航天信息,公众信息,中科院西北星,中兴通讯,成都天府软件园,山东农信社等等。专业、敬业的咨询作风深受客户赞扬,应得非常好的口碑,被中国软件行业协会授予十大咨询师。 培训背景:在华为公司和华为3COM公司,为研发人员提供大量培训,就多次被评为公司优秀讲师。在咨询服务过程中,为客户提供研发管理、质量管理、项目管理、软件工程等培训,此外,还为广东核电站、上海中科深江、珠海高凌信息、深圳市文鼎创数据科技、奥维通信、深圳市科陆电子、理邦精密仪器、南京科远、广利核、横河电机、冶自欧博、中星电子等公司提供培训服务,在北京、上海、深圳、大连、成都、南京等地举办过公开课。
|