紫金技术如何写需求申和平2013年11月软件工程,从需求开始。紫金技术1.需求知识概述1.1软件需求的重要性1.2软件需求基本概念1.3优秀需求应具备特征1.4需求开发的主要困难1.5需求分析员应备能力2.软件需求开发2.1需求获取2.2需求分析2.3需求规格说明2.4需求验证3.软件需求管理3.1需求版本控制3.2需求变更控制3.3需求跟踪控制目录紫金技术典型的软件开发紫金技术软件需求的重要性中国有句谚语:“好的开始就等于成功的一半”。项目遇困几大原因①需求是制定项目计划的基础。②需求规格说明是软件设计和软件实现的基础。③需求规格说明是测试工作和用户验收的依据。④需求规格说明是软件维护工作的依据。河的源头被污染,那么整条河也就被污染了。①缺乏用户的参与。(13%)②不完整规格说明。(12%)③不断变更的需求。(12%)需求错误的代价需求工程设计编码测试发布版本维护紫金技术•我们往往并不清楚究竟该做什么,却一直忙碌不停的开发。•需求不清楚就进入编码阶段,期望以后修改,更多的情况下是编写边修改。•软件调节和改变是很灵活的,任何需求的变更都可以很容易的在软件中反应出来。你是如此吗?这些认识多来自极小项目的开发经验,当你面对一个中大型项目时?紫金技术软件需求的定义IEEE软件工程标准词汇表(1977)中的需求定义:①用户解决问题或达到目标所需的条件或权能。②系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或权能。③一种反应上述所描述的条件或权能的文档说明。通俗地讲,需求来源于用户的一些需要,这些需要被分析、确认后形成完成的文档,该文档详细的说明了产品必须或应当做什么。紫金技术需求工程的定义所有与需求直接相关的活动通称为需求工程。其可大致分为需求开发和需求管理两个阶段。其中需求开发主要产生需求规格说明,需求管理主要是根据需求的变化对需求规格说明的内容及版本进行管理。需求工程需求管理需求开发需求验证需求规格说明需求分析需求获取需求跟踪控制需求变更控制需求版本控制软件需求规格说明(SRS)紫金技术软件需求的层次(1)紫金技术软件需求的层次(2)业务需求•表示组织机构或客户对系统或产品高层次的目标。•它们在项目视图与范围文档中予以说明。•描述组织为什么要开发一个系统。用户需求•描述用户的目标,或用户要求系统必须完成的任务。•用例、场景描述都是表达用户需求的有效途径。•描述用户使用系统能做什么。功能需求•定义了开发人员必须要实现的软件功能,使得用户能完成他们的任务,从而满足业务需求。非功能需求•描述了系统完成功能实现的补充约束条件。如系统必须遵从的标准、规范、合约、性能要求、设计或实现的约束条件及质量属性。紫金技术软件需求的质量属性(1)外部质量,对用户很重要。正确性软件按照需求正确执行任务的能力。正确性无疑是第一重要的质量属性。健壮性是指在异常情况下软件能够正常运行的能力。健壮性有两层含义,一是容错能力,二是恢复能力。可靠性是指在一定的环境下和给定的时间内,软件不发生故障正常运行的概率。性能是指软件的响应能力。既要经过多长时间才能对某个事件做出响应,或者在某段时间内软件所能处理事件的个数。安全性是指防止软件被非法入侵的能力。既属于技术问题又属于管理问题。易用性是指用户使用软件的容易程度。兼容性是指不同产品或者新老产品相互交换信息的能力。紫金技术软件需求的质量属性(2)内部质量,对开发者很重要。易理解性是指开发人员理解软件产品的能力。意味着所有的工作成果要易读易懂,可以提高团队开发效率,降低维护成本。开发人员只有在自己思路清晰的时候才可能写出让别人易读易懂的程序和文档。可理解的东西通常是简洁的。可测试性是指测试软件组件或集成产品时查找缺陷的简易程度,又称为可验证性。可维护性是指在软件中纠正一个缺陷或做一次更改的简易程度。可扩展性是指软件适应变化的能力。可移植性是指软件不经修改或稍加修改就可以运行于不同软硬件环境的能力。主要体现为代码的可移植性。可复用性是指一个软件的组成部分可以在同一个项目的不同地方甚至在不同的项目中重复使用的能力。有时不可避免地要对一些特定的属性进行取舍。紫金技术优秀需求应具备的特征完整性每项需求都必须将所要实现的功能描述清楚。正确性每一项需求都必须准确地陈述其要开发的功能,符合需求来源。可行性每项需求在已知环境的权能和限制下可实施。可多方人员参与。必要性每项需求都能回溯至某项用户需求。划分优先级给每项需求分配一个实施优先级以指明它在产品中的重要程度。无二义性对所有需求说明的读者都只能有一个明确统一的解释。可验证性每项需求能够被验证。验证方法如测试用例、正规审查等。与实现无关性需求关注系统做什么,而不是怎么做。紫金技术需求开发的主要困难与对策(1)用户说不清楚需求问题:有些用户不知道需求是什么,或对需求只有朦胧的感觉,他当然说不清楚需求。还有些用户虽然心里明白想要什么,但却表达不清楚。策略:需求分析员不能以用户说不清楚需求为借口而草率地对待需求开发,无论是什么原因导致用户说不清楚需求,需求分析员必须设法搞清楚用户真正的需求,这是需求分析员的职责,也是职业的挑战。紫金技术需求开发的主要困难与对策(2)态度问题问题:很多开发人员习惯于被动地对待需求开发。每当遇到麻烦、挫折时,他们会找一堆用户的毛病,认为需求是用户的事情,不是我们的事情。策略:用户说不清楚需求或者需求发生变更都是常见的问题,我们可以设法解决的。开发人员不应该把这些问题当成借口。需求分析员的职责就是在有限的时间内获取准确而细致的用户需求,如果做不到就是失职,不要找借口。紫金技术需求开发的主要困难与对策(3)知识技能欠缺问题:需求分析员缺乏应用域知识,应用域的知识是无边无际的,任何人都不可能是万事通。需求分析员可能是某一领域的专家,当他接手陌生的业务时,他可能是个无知者。策略:要勇于实践,不要逃避。还应当赶紧补习应用域知识,不论是通过自学还是培训的方式。可能的话,最好请既懂软件又懂应用域知识的行家来帮忙。紫金技术需求开发的主要困难与对策(4)双方误解需求问题:人们在交流的时候,经常会发生问非所求、答非所问的事情。有时用户会把开发人员的建议或答复想歪了,而用户表达的需求,不同的开发人员可能有不同的理解。策略:如果需求分析员误解了需求,那会导致后续的开发人员将错就错、白忙活。不论是复杂的项目还是简单的项目,需求分析员和用户都有可能误解需求,所以应当做好需求确认工作。紫金技术需求开发的主要困难与对策(5)开发人员写不好需求文档问题:需求调查工作不充分,获取的需求信息太少或者太乱,以至于写不成需求文档。或者开发人员的写作能力比较差,虽然在调查过程中已经获得了不少需求信息,却写不出好的需求文档来。策略:把需求调查工作做好,提高开发人员的写作能力,多练习写文档。另外,企业提供合适的文档模板以及比较好的示例文档,也可有效降低写作难度。紫金技术需求开发的主要困难与对策(6)用户需求变更频繁问题:在项目开发的初始阶段,开发人员和用户没有搞清楚需求或者搞错了需求,到了项目开发后期才将需求纠正过来,导致产品的部分内容需要重新开发。或者由于市场变化而导致产品需求发生变更。策略:做好需求变更控制。需求变更通常会对项目的进度、人力资源、经费产生很大的影响。需求变更并不可怕,可怕的是需求变更失去控制,导致项目混乱。紫金技术需求开发的主要困难与对策(7)合作关系问题:需求分析员不能与用户建立良好的合作关系。对于一些竞标项目,在合同未签订之前的需求开发工作尤为困难。用户未必会买你的产品,他不会投入很多精力来协助你。策略:出色的需求分析员不仅要有过硬的专业知识,还要具备较强的交流和沟通能力。对于重大复杂的项目,不能完全期望双方能够自发地建立起良好地合作关系。要使用户明白需求的重要性以及忽视需求的危害性,从而促使他们积极友善地参加需求工程中的各项活动。紫金技术需求分析员应备能力行业知识熟悉相关行业和领域的知识及产品。沟通能力善于双向交流,知道如何有效倾听和表达。分析能力能够以不同的角度和方式思考问题。组织能力需要处理获取和分析过程中收集到的大量杂乱的信息。写作能力需求开发的最终产物是需求规格说明文档。专业技术需要掌握如数据流图、用例图、实体关系图等建模分析工具。提问技巧很多需求是通过面谈和讨论得到。观察能力能够从不经意的闲谈或观察中发现重要信息。紫金技术2软件需求开发2.1需求获取2.2需求分析2.3需求规格说明2.4需求验证紫金技术需求获取需求获取就是进行需求收集的一个过程或者活动。它从人员、资料和环境中得到系统开发所需要的相关信息。我将从以下几个方面来讲述。1.需求常见来源2.需求获取内容3.需求获取常用方法4.需求获取常见困难5.需求获取实践经验紫金技术需求常见来源用户提交的需求文档。与用户进行探讨。现有系统的问题报告和改进要求。观察或体验用户工作。市场调查和用户问卷调查。对同类产品或竞品进行分析。对用户的工作情景进行分析。行业专家的建议紫金技术需求获取的内容明确业务需求明确项目范围明确业务流程和业务规则明确数据定义明确软件功能明确质量属性明确系统接口明确设计和实现约束紫金技术需求获取常用方法需求获取方法很多。每种方法有其各自优缺点,适用于不同的场合。需求获取人员需要了解各种方法的使用场景及优缺点,以便在不同的场合采取不同的方法开展需求获取工作。1、用户访谈2、原型法3、观察法4、文档分析5、需求专题讨论6、用户问卷调查紫金技术用户访谈用户访谈是实践当中应用最为广泛的需求获取方法之一。优点:简单、直接、形式灵活、交流比较深入。缺点:占用时间长,信息存在片面性。应用场景:用户访谈在所有的需求获取中都被开发者广泛使用,需要注意的是访谈的目标和话题根据用户的不同而有所侧重。紫金技术用户访谈---话题类型(1)开放式话题封闭式话题被会见者对答复的选择是开放和不受限制的,他们可能答复两个词,也可能答复两段话。在希望得到丰富,具有一定深度和广度的信息时,开放式问题比较合适。答案有基本的形式,被会见者的回答是受到限制的,如选择题、判断题等。例如:1、你对屌丝一词有什么看法?例如:1、呼叫中心一月平均接到多少个电话?2、下列哪个信息对你最有用?紫金技术用户访谈---话题类型(2)开放式话题封闭式话题优点•被会谈者感觉更自在和感兴趣;•可获得丰富的细节;•允许更多的自发性;•可以收集被会谈者使用的词汇;•对没采用的进一步的提问有启迪作用;•可以在没有太多准备的情况下进行;•节省时间;•切中要点;•保持对面谈的控制;•快速探讨大范围问题;•得到贴切的数据;缺点•可能产生太多不相干的细节;•面谈可能失控;•会花费大量时间才能获得有用的信息量;•可能使会谈者看上去没有准备;•会谈者比较厌烦;•得不到丰富的细节;•不利于建立友好关系;紫金技术用户访谈---话题类型(3)开放式话题对比项封闭式话题低数据的可靠性高低使用的时间效率高低数据的精度高广数据的广度和深度窄多需要的面谈技能少难分析的难易度易紫金技术用户访谈---时间安排阶段任务占用时间备注开场白陈述预先对问题的考虑和理解5-15分钟聚焦本次访谈的话题,明确访谈的范围和层次预先计划问题寻找问题的答案25-30分钟主体工作,关键部分即兴问题扩大需求信息量20-30分钟注意导向,不要跑题太远总结总结访谈内容5-10分钟访谈者向被访谈者复述主要问题的答案用户访谈尽量选择相对封闭的环境,一次访谈的时间一般不要超过1小时。下面是很多书籍中提供的一个参考时间安排。紫金技术用户访谈---记录工作用户访谈期间将会产生大量的信息,免不了记录的工作。下面是很多经典的案例为我们提供了可参考的记录方式。记录方式优点缺点建议自己做笔记直接、简单、灵活容易走神记重点要点,并确认专人做笔记精力集中在访谈上容易产生记录偏差访谈结束时让记录人员向双方做简要陈述录音免受记录工作影响信息易失真记录大纲和关键信息录像免受记录工作影响难以操作紫金技术用户访谈---沟通技巧多数情况下,应该事先制作访谈问卷发给被访谈者,罗列出要问的主要问题。被访