您好,欢迎访问三七文档
第二章软件需求工程过程周立新博士北京大学软件与微电子学院课程提纲1.软件需求基本理论和概念2.软件需求工程过程3.软件需求获取4.软件需求分析5.软件需求规格说明6.软件需求验证7.软件需求管理8.软件需求实现9.软件需求工程新进展10.软件需求开发与需求管理工具内容提要(Agenda)•软件需求工程定义•客户的需求观•需求知识技能获取•定义项目业务需求、视图及范围•需求开发过程–包括需求获取、需求分析、撰写需求规格说明和需求验证•需求管理过程–包括需求变更和风险管理、配置与版本控制、需求跟踪链与需求状态跟踪•需求管理与项目管理•CMMI需求工程过程模型一.软件需求工程•需求工程是指应用已证实有效的技术、方法进行需求分析,确定客户需求,帮助分析人员理解问题并定义目标系统的所有外部特征的一门学科。它通过合适的工具和记号系统地描述待开发系统及其行为特征和相关约束,形成需求文档,并对用户不断变化的需求演进给予支持。•注意,和所有工程学科一样,需求工程并不是以零星偶发的、随机的或无计划的方式进行,而是代之以已证明方法的系统化应用。软件需求工程组成需求工程需求管理需求开发编写规格说明分析问题获取验证包括软件类产品中需求收集、评价、编写文档等所有活动建立并维护在软件工程中同客户达成的契约软件需求工程划分为需求开发和需求管理。需求开发过程•需求开发可进一步分为需求获取(Elicitation)、需求分析(Analysis)、规格说明(Specification)和需求验证(Validation)。•这些子学科涵盖了为软件和软件相关产品收集、评估、和记录需求相关的所有活动。1.需求管理活动需求管理过程基准需求说明分析编写文档评审、商议需求变更过程市场需求客户管理市场客户管理项目环境当前基线需求开发需求管理修正后基线需求变更项目变更需求开发与需求管理之间的界限需求开发与管理之间的界线二.客户的需求观BrainStormingWhoarethepotentialstakeholders(风险承担者)ofasoftwareproject?Showyourthinking……Users(maybeclassifiedintodifferentusers)CustomersDevelopersTestersMarketingteamSeniormanagementteamProductmanagement……KeyStakeholders对一个软件项目最关注的人员•用户(Users)考虑的重点是产品的易使用性,功能•客户(Customers)考虑的重点是产品的功能以及由此能产生的效益•开发人员(Engineers)考虑的重点是产品的可开发性,技术细节用户的特征•从产品可操作性出发思考问题•不一定是受到良好训练的工程师•了解产品操作环境•对产品技术、商务背景、限制不感兴趣客户的特征•是用户的代理人。客户可能是同一组织内的系统工程组、市场组、其他职能部门。多数情况下可能是一个外部客户,如中国移动(CMCC),中国联通(Unicom),ServicesProvider(ISP)•对产品的性能,功能有本能的感觉•集中于产品的商务方面•关心产品合同与合法性等细节•客户不一定是受到良好训练的工程师•对产品的可操作性的知识并不全面开发人员的特征•是受到良好训练的工程师•日常交流更善于使用专业术语•对产品的可操作性的知识并不全面•可能过分服从,也可能过于坚持己见•钟爱于技术完美性,疏忽商务上的作用项目相关人员对项目的影响相关人员成功的目标构成阻碍的因素用户产品易于使用,具有所有期望的功能和操作能力不合理的期望客户在规定时间和投资下向用户递交产品,最大可能满足用户需要不切实际的时间表和预算频繁的需求变更不确定的质量目标开发人员开发满足客户、用户需求的产品。收回投资人员能力不足个人表现欠佳缺乏风险意识接受客户不切实际的要求通过协商获得合理的期望用户-派生原始需求-扩展可选择性-了解开发人员和客户的问题客户开发人员-充足的人员、技术和资本配置-扩展可选择性-了解用户和客户的问题-成本、时间表的合理分派-了解开发人员和用户的问题通过团队合作协商,解决冲突,达成共识用户对系统的期望如何同用户一起构思系统的功能?功能处理流程输入条件期待的输出用户可以理解的构思模块A模块E模块B模块D模块C模块F用户不能理解的构思三.需求知识技能获取•需求过程是必不可少的,所有项目的涉众都应该理解需求工程的概念和方法,这样有利于各方之间的沟通。将各涉众方召集起来利用一天的时间进行软件需求培训,这是打造团队的一种有效方法。三.知识技能获取需求工程的知识技能是系统需求分析人员的基础;本门课程的学习实际上就是奠定这一基础的最好方式。如果缺少了这一领域的知识,唯一的方式通过培训来在一定程度上提高分析员的能力和水平。各位学员完全有可能担当小组培训师的任务:1.培训需求分析人员2.培训软件需求的用户代表和管理人员3.让开发人员了解问题域(应用领域)的基本概念4.编写项目术语汇编三.知识技能获取1.培训需求分析人员所有的开发人员都应接受一个基本的需求工程培训。但那些负责收集、编写文档和分析用户需求的人员应当进行更长时间,更加针对性的培训。把高水平的需求人员组织起来,通过良好的信息交流,了解应用领域并有效地应用需求工程中的成熟技术。三.需求知识技能获取•培训需求分析员----需要几天时间的培训熟练的需求分析员应具备以下特点:耐心思维条理性强有良好的交际和沟通能力理解产品应用领域掌握丰富的需求工程技术三.知识技能获取2.培训软件需求的用户代表和管理人员参与软件开发的用户代表应接受为期一天左右的需求工程培训,开发管理者和客户管理者也应参加。这样的培训将使他们理解强调需求的重要性,以及忽略需求带来的风险。三.需求知识技能获取•对用户代表和管理者进行软件需求培训----一到两天的培训明白重视需求的意义需求工作包括哪些活动要提交什么样的结果忽略需求过程会导致的风险更加体谅软件开发人员三.知识技能获取3.让开发人员了解问题域(应用领域)的基本概念组织一些简短的关于客户业务活动、术语、目标等方面的讨论会帮助开发人员对应用领域有个基本的了解。这能减少误解及工程中的返工。可能的情况下为每位人员或项目小组安排一个用户伙伴以便在项目过程中解释业务术语和概念。产品代表就应该扮演这样的角色。三.需求知识技能获取•对开发人员进行应用领域的相关培训----安排研讨课程减少在开发过程中的混淆、误解和返工在项目开发过程中为每位开发人员配备一位用户伙伴,负责解释行话和业务概念。三.知识技能获取4.编写项目术语汇编为减少沟通方面的问题,编一部术语汇编将项目应用领域的专用词汇给予定义说明,既要包括那些有多种含义与用法的术语,也要包括那些在专用领域的术语解释。术语表中包括同义词、有多种含义的术语、以及既有特定领域的含义又有日常含义的术语。四.建立项目视图和范围•项目视图在高层上描述了产品涉及的各个方面,在期望的环境中所具有的功能。范围是对产品应该包含的部分的界定业务机遇的描述项目的目标产品范围和局限性客户及用户的特点优先级项目成功的标准…业务需求•业务需求(BusinessRequirement)表示组织或客户层次的目标。业务需求通常来自项目的投资人、购买产品的客户、实际用户的管理者、市场营销部门或产品策划部门。•业务需求描述了组织为什么要开发一个系统,即组织希望达到的目标。业务需求•业务需求位于需求链中的最高层,这种需求定义了软件系统的视图(productvision)与范围(projectscope).•用户需求和软件功能需求都必须符合业务需求设定的前景和目标。•业务需求定义不充分的一个迹象是:某些特性先是被添加,然后被删除,之后又被加入。业务需求与用例•业务需求决定了应用的广度与深度。广度(breadth)指应用能完成哪些业务工作(即用例)深度(depth)说明将各项用例实现到何种程度•业务需求会影响到用例及相关功能需求的实现优先级。•业务需求对于需求的实现方式也有很大的影响。产品视图和项目范围•产品视图(productvision)将所有涉众统一到一个方向上。视图描述了产品用来干什么,它最终会是什么样子。•项目范围(projectscope)确定当前的项目要解决产品长远规划中的哪一部分,范围同时定义了项目的限制。产品视图和项目范围•视图关系到整个产品。当产品的战略定位或信息系统的业务目标随时间发生改变时,视图也会随之变化,但这种变化相对缓慢。范围则只与一个特定的项目或实现产品功能下一增量的某次迭代有关。图2产品视图包括了每一个计划产品的版本的范围视图与范围文档•视图与范围文档用于将业务需求收集整理到一个文档中,为后续的开发工作打好基础。•视图与范围文档的所有者是项目的执行主管、投资负责人或其他类似的角色。需求分析员与他们合作编写视图和范围文档。视图与范围文档视图与范围文档的模板•模板为组织中项目团队要编写的文档提供了标准结构,可以对该模板进行修改以适应项目的特定要求。五.需求开发过程•需求获取•需求分析•撰写需求规格说明•需求验证需求开发过程•需求开发是一个迭代的过程,迭代(iteration)是需求开发成功的关键。需求开发过程该过程的相关活动:•确定产品将要面对的各类用户;•从各类用户的代表处收集需求;•了解用户的任务和目标,以及这些任务要实现的业务目标;•分析从用户处得到的信息,将用户的任务目标与功能需求、非功能需求、业务需求、业务规则、解决方案及其他无关信息区分开来;需求开发过程•将顶层的需求分配到系统构架内定义好的软件组件中;•了解各质量需求的相对重要性;•协商需求的实现优先级;•将收集的用户需求表述为书面的需求规格说明和模型;•审阅需求文档。以确保在认识上与用户声明的需求一致。应在开发小组接受需求之前解决所有分歧。需求开发过程—需求获取•需求获取(Elicitation)是需求工程的核心任务,即确定软件系统涉众的需要及限制条件的过程。•需求获取着重于发现用户需求。用户需求包括用户要求系统完成什么任务和用户对性能、易用性和其他质量属性的期望。需求开发过程—需求获取需求获取(acquisition)发生在需求工程过程早期阶段,有时也称为需求收集(gathering)、需求捕获(capture),主要关注以下几个方面:•应当收集什么信息了解问题域的特性,渐进地刻画需求的方向•有哪些信息来源信息来源是多方面的,包括所有项目风险承担者(Stakeholders),相似系统的类同分析等•可能通过什么机制或技术收集需求开发过程—需求获取1.确定需求开发过程2.编写项目视图和范围文档3.将用户群分类并归纳各自特点4.选择每类用户的产品代表5.建立起典型用户的核心队伍6.让用户代表确定用户使用实例7.召开应用程序开发联系会议(JAD)8.分析用户工作流程9.确定质量属性和其它非功能需求10.通过检查当前系统的问题报告来进一步完善需求11.跨项目重用需求需求开发过程—需求获取1.确定需求开发过程确定如何组织需求的收集、分析、细化、核实的步骤并编写成文档;这里也包括该活动的安排和进度计划。需求开发过程—需求获取2.编写项目视图和范围文档项目视图和范围文档应该包括高层的产品业务目标,所有的使用实例和功能需求都必须遵从能达到的业务需求。项目视图说明使所有项目参与者对项目的目标能达成共识。而范围则是作为评估需求或潜在特性的参考。需求开发过程—需求获取3.将用户群分类并归纳各自特点为避免出现疏忽某一用户群需求的情况,要将可能使用产品的客户分成不同组。他们可能在使用频率、使用特性、优先等级或熟练程度等方面都有所差异。详细描述他们的个性特点及任务状况将有助于产品设计。需求开发过程—需求获取4.选择每类用户的产品代表为每类用户至少选择一位能真正代表他们需求的人作为那一类用户的代表并能作出决策。这对于内部信息系统的开发是最易实现的,因为用户就是身边的职员。而对于商业系统开发,就得在主要客户或测试者中建立
本文标题:需求开发过程
链接地址:https://www.777doc.com/doc-3887163 .html