软件需求分析方法总结--如何进行软件需求分析(二)
作者:网络转载 发布时间:[ 2011/12/9 16:02:28 ] 推荐标签:
6.需求分析人员和用户的合作关系的软件产品是建立在的需求基础之上的。而高质量的需求来源于客户与开发人员之间有效的交流与合作。通常,开发人员与客户或客户代理人,如市场人员间的关系反而会成为一种对立关系。双方的管理者都只想自己的利益而搁置用户提供的需求从而产生摩擦,在这种情况下,不会给双方带来一点益处。只有当双方参与者都明白要成功自己需要什么,同时也应知道要成功合作方需要什么时,才能建立起一种合作关系。由于项目压力与日渐增,所有风险承担者有着一个共同的目标这一点容易被遗忘。其实大家都想开发出一个既能实现商业价值,又能满足用户需要,还能使开发者感到满足的软件产品。软件客户需求权利书列出了十条关于客户在项目需求工程实施中与分析人员、开发人员交流时的合法要求。每一项权利都对应着软件开发人员、分析人员的义务。而软件客户需求义务书也列出了十条关于客户在需求过程中应承担的义务。如果愿意,可以将其作为开发人员的权利书。客户有如下权利:
1:要求分析人员使用符合客户语言习惯的表达需求讨论应集中于业务需要和任务,故要使用业务术语,你应将其教给分析人员,而你 不一定要懂得计算机的行业术语。
2:要求分析人员了解客户的业务及目标通过与用户交流来获取用户需求、分析人员才能更好地了解你的业务任务和怎样才能使产品更好地满足你的需要。这将有助于开发人员设计出真正满足你的需要并达到你期望的软件。为帮助开发人员和分析人员,可以考虑邀请他们观察你或你的同事是怎样工作的。如果新开发系统是用来替代已有的系统,那么开发人员应使用一下目前的系统,这将有利于他们明白目前系统是怎样工作的,其工作流程的情况,以及可供改进之处。
3:要求分析人员编写软件需求规格说明分析人员要把从你和其他客户那里获得的所有信息进行整理,以区分开业务需求及规范、功能需求、质量目标、解决方法和其它信息。通过这些分析能得到一份软件需求规格说明。而这份软件需求规格说明便在开发人员和客户之间针对要开发的产品内容达成了协议。软件需求规格说明书可以用一种你认为易于翻阅和理解的方式组织编写。要评审编写出的规格说明以确保它们准确而完整地表达了你的需求。一份高质量的软件需求规格说明能有助于开发人员开发出真正需要的产品。
4:要求得到需求工作结果的解释说明分析人员可能采用了多种图表作为文字性软件需求规格说明的补充。因为如工作流程图那样的图表能很清楚地描述出系统行为的某些方面。所以需求说明中的各种图表有着极高的价值。虽然它们不太难于理解,但是你很可能对此并不熟悉。因此可以要求分析人员解释说明每张图表的作用或其它的需求开发工作结果和符号的意义,及怎样检查图表有无错误及不一致等。
5:要求开发人员尊重你的意见如果用户与开发人员之间不能相互理解,那关于需求的讨论将会有障碍,共同合作能使大家“兼听则明”。参与需求开发过程的客户有权要求开发人员尊重他们并珍惜他们为项目成功所付出的时间。同样,客户也应对开发人员为项目成功这一共同目标所作出的努力表示尊重与感激。
6:要求开发人员对需求及产品实施提供建议,拿出主意通常,客户所说的“需求”已是一种实际可能的实施解决方案,分析人员将尽力从这些解决方法中了解真正的业务及其需求,同时还应找出已有系统不适合当前业务之处,以确保产品不会无效或低效。在彻底弄清业务领域内的事情后,分析人员有时能提出相当好的改进方法。有经验且富有创造力的分析人员还能提出增加一些用户并未发现的很有价值的系统特性。
7:描述产品易使用的特性你可以要求分析人员在实现功能需求的同时还要注重软件的易用性。因为这些易用特性或质量属性能使你更准确、高效地完成任务。例如,客户有时要求产品要“用户友好”或“健壮”或“高效率”,但这对于开发人员来说,太主观了并无实用价值。正确的应是:分析人员通过询问和调查了解客户所要的友好、健壮、高效所包含的具体特性。
8:调整需求,允许重用已有的软件组件需求通常要有一定的灵活性。分析人员可能发现已有的某个软件组件与你描述的需求很相符。在这种情况下,分析人员应提供一些修改需求的选择以便开发人员能够在新系统开发中重用一些已有的软件。如果有可重用的机会出现,同时你又能调整你的需求说明,那能降低成本和节省时间,而不必严格按原有的需求说明开发。所以说,如果想在产品中使用一些已有的商业常用组件,而它们并不完全适合你所需的特性,这时一定程度上的需求灵活性显得极为重要了。
9:获得满足客户功能和质量要求的系统每个人都希望项目获得成功。但这不仅要求你要清晰地告知开发人员关于系统“做什么”所需的所有信息,而且还要求开发人员能通过交流了解清楚取舍与限制。
一定要明确说明你的假设和潜在的期望。否则,开发人员开发出的产品很可能无法让你满意。
客户有下列义务:
1:给分析人员讲解你的业务分析人员要依靠你给他们讲解的业务概念及术语。但你不能指望分析人员会成为该领域的专家,而只能让他们真正明白你的问题和目标。不要期望分析人员能把握你们业务的细微与潜在之处,他们很可能并不知道那些对于你和你的同事来说理所当然的“常识”。 2:抽出时间清楚地说明并完善需求客户很忙,经常在忙的时候还得参与需求开发。但无论如何,你有义务抽出时间参与“头脑风暴”会议的讨论,接受采访或其它获取需求的活动。有时分析人员可能先以为明白了你的观点,而过后发现还需要你的讲解。这时,请耐心一些对待需求和需求的精化工作过程中的反复,因为它是人们交流中的很自然的现象,何况这对软件产品的成功极为重要。 3:准确而详细地说明需求编写一份清晰、准确的需求文档是很困难的。由于处理细节问题不但烦人而且又耗时,故很容易留下模糊不清的需求。但是,在开发过程中,必须得解决这种模糊性和不准确性。而你恰是为解决这些问题作出决定的佳人选。不然的话,你只好靠开发人员去正确猜测了。在需求规格说明中暂时加上待定(to be determined, TBD也可采用汉语拼音略写“DQD:待确定”)的标志是个不错的办法。用该标志可指明了哪些需要进一步探讨、分析或增加信息的地方。不过,有时也可能因为某个特殊需求难以解决或没有人愿意处理它而注上TBD标志。尽量将每项需求的内容都阐述清楚,以便分析人员能准确的将其写进软件需求规格说明中。如果你一时不能准确表述,那得允许获取必要的准确信息这样一个过程。通常使用所谓的原型技术。通过开发的原型,你可以同开发人员一起反复修改,不断完善需求定义。
4:及时地作出决定正如一位建筑师为你修建房屋,分析人员将要求你做出一些选择和决定。这些决定包括来自多个用户提出的处理方法或在质量特性冲突和信息准确度中选择折衷方案等。有权做出决定的客户必须积极地对待这一切,尽快做处理、做决定。因为开发人员通常只有等你做出了决定才能行动,而这种等待会延误项目的进展。
5:尊重开发人员的需求可行性及成本评估所有的软件功能都有其成本价格,开发人员适合预算这些成本(尽管许多开发人员并不擅长评估预测)。你所希望的某些产品特性可能在技术上行不通,或者实现它要付出极为高昂的代价。而某些需求试图在操作环境中要求不可能达到的性能或试图得到一些根本得不到的数据,开发人员会对此作出负面的评价意见,你应该尊重他们的意见。有时,你可以重新给出一个在技术上可行、实现上便宜的需求,例如,要求某个行为在“瞬间”发生是不可行的,但换种更具体的时间需求说法(“在50ms以内”,但若没有准确的技术分析不能轻易下结论),这可以实现了。
6: 划分需求优先级别大多数项目没有足够的时间或资源来实现功能性的每个细节。决定哪些特性是必要的,哪些是重要的,哪些是好的,是需求开发的主要部分。只能由你来负责设定需求优先级,因为开发者并不可能按你的观点决定需求优先级。开发者将为你确定优先级提供有关每个需求的花费和风险的信息。当你设定优先级时,你帮助开发者确保在适当的时间内用小的开支取得好的效果。在时间和资源限制下,关于所需特性能否完成或完成多少应该尊重开发人员的意见。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对这种现实的。业务决策有时不得不依据优先级来缩小项目范围或延长工期,或增加资源,或在质量上寻找折衷。
7:评审需求文档和原型正如我们将在第1 4章讨论的,无论是正式的还是非正式的方式,对需求文档进行评审都会对软件质量提高有所帮助。让客户参与评审才能真正鉴别需求文档是否的确完整、正确说明了期望的必要特性。评审也给客户代表提供一个机会,给需求分析人员带来反馈信息以改进他们的工作。如果你认为编写的需求文档不够准确,有义务尽早告诉分析人员并为改进提供建议。通过阅读需求规格说明,很难想象实际的软件是什么样子的。更好的方法是先为产品开发一个原型。这样你能提供更有价值的反馈信息给开发人员,帮助他们更好地理解你的需求。必须认识到:原型并非是一个实际产品,但开发人员能将其转变、扩充成功能齐全的系统。
8:需求出现变更要马上联系不断的需求变更会给在预定计划内完成高质量产品带来严重的负面影响。变更是不可避免的,但在开发周期中变更越在晚期出现,其影响越大。变更不仅会导致代价极高的返工,而且工期也会被迫延误,特别是在大体结构已完成后又需要增加新特性时。所以一旦你发现需要变更需求时,请一定立即通知分析人员。
9:应遵照开发组织处理需求变更的过程为了将变更带来的负面影响减少到低限度,所有的参与者必须遵照项目的变更控制过程。这要求不放弃所有提出的变更,对每项要求的变更进行分析、综合考虑,后作出合适的决策以确定将某些变更引入项目中。
10:尊重开发人员采用的需求工程过程软件开发中具挑战性的莫过于收集需求并确定其正确性。分析人员采用的方法有其合理性。也许你认为需求过程不太划算,但请相信花在需求开发上的时间是“很有价值”的。如果你理解并支持分析人员为收集、编写需求文档和确保其质量所采用的技术,那么整个过程将会更为顺利。尽管去询问分析人员为什么他们要收集某些信息,或参与与需求有关的活动。系统分析人员在开发过程中可能会遇到以下问题,一些很忙的客户可能不愿意积极参与需求过程,而缺少客户参与将很可能导致不理想的产品。故一定要确保需求开发中的主要参与者都了解并接受他们的义务。如果遇到分歧,通过协商以达成对各自义务的相互理解,这样能减少今后的摩擦。
7.需求文档需求开发的终成果是:客户和开发小组对将要开发的产品达成一致协议。协议综合了业务需求、用户需求和软件功能需求。像我们早先所看到的,项目视图和范围文档包含了业务需求,而使用实例文档则包含了用户需求。你必须编写从使用实例派生出的功能需求文档,还要编写产品的非功能需求文档,包括质量属性和外部接口需求。只有以结构化和可读性方式编写这些文档,并由项目的风险承担者评审通过后,各方面人员才能确信他们所赞同的需求是可靠的。
你可以使用以下三种方法编写软件需求规格说明:用好的结构化和自然语言编写文本型文档。建立图形化模型,这些模型可以描绘转换过程、系统状态和它们之间的变化、数据关系、逻辑流或对象类和它们的关系。编写形式化规格说明,这可以通过使用数学上精确的形式化逻辑语言来定义需求。由于形式化规格说明具有很强的严密性和精确度,因此,所使用的形式化语言只有极少数软件开发人员才熟悉,更不用说客户了。虽然结构化的自然语言具有许多缺点,但在大多数软件工程中,它仍是编写需求文档现实的方法。包含了功能和非功能需求的基于文本的软件需求规格说明已经为大多数项目所接受。图形化分析模型通过提供另一种需求视图,增强了软件需求规格说明。软件需求规格说明不仅是系统测试和用户文档的基础,也是所有子系列项目规划、设计和编码的基础。它应该尽可能完整地描述系统预期的外部行为和用户可视化行为。除了设计和实现上的限制,软件需求规格说明不应该包括设计、构造、测试或工程管理的细节。许多读者使用软件需求规格说明来达到不同的目的:客户和营销部门依赖它来了解他们所能提供的产品。项目经理根据包含在软件需求规格说明中描述的产品来制定规划并预测进度安排、工作量和资源。软件开发小组依赖它来理解他们将要开发的产品。测试小组使用软件需求规格说明中对产品行为的描述制定测试计划、测试用例和测试过程。软件维护和支持人员根据需求规格说明了解产品的某部分是做什么的。产品发布组在需求规格说明和用户界面设计的基础上编写客户文档,如用户手册和帮助屏幕等。培训人员根据需求规格说明和用户文档编写培训材料。软件需求规格说明作为产品需求的终成果必须具有综合性:必须包括所有的需求。开发者和客户不能作任何假设。如果任何所期望的功能或非功能需求未写入软件需求规格说明,那么它将不能作为协议的一部分并且不能在产品中出现。我见过有一个项目突然接到测试人员发出的错误灾难的报告。结果是他们测试的是老版本的软件需求规格说明,而他们觉得错误的地方正是产品所独有的特性。他们的测试工作是徒劳的,因为他们一直在老版本的软件需求规格说明中寻找错误的系统行为。在编写软件需求规格说明,希望读者牢记以下的建议:对节、小节和单个需求的号码编排必须一致。在右边部分留下文本注释区。允许不加限制地使用空格。正确使用各种可视化强调标志(例如,黑体、下划线、斜体和其它不同字体)。创建目录表和索引表有助于读者寻找所需的信息。对所有图和表指定号码和标识号,并且可按号码进行查阅。使用字处理程序中交叉引用的功能来查阅文档中其它项或位置,而不是通过页码或节号。为了满足软件需求规格说明的可跟踪性和可修改性的质量标准,必须确定每个软件需求。这可以使你在变更请求、修改历史记录、交叉引用或需求的可跟踪矩阵中查阅特定的需求。由于要达到这一目的,用单一的项目列表是不够的,因此,我将描述几个不同的需求标识方法,并阐明它们的优点与缺点。可以选择适合你的方法。 (1) 序列号简单的方法是赋予每个需求一个的序列号,例如SRS-13。当一个新的需求加入到商业需求管理工具的数据库之后,这些管理工具会为其分配一个序列号(许多这样的工具也支持层次化编号)。序列号的前缀代表了需求类型,例如SRS代表“软件需求说明”。由于序列号不能重用,所以把需求从数据库中删除时,并不释放其所占据的序列号,而新的需求只能得到下一个可用的序列号。这种简单的编号方法并不能提供任何相关需求在逻辑上或层次上的区别,而且需求的标识不能提供任何有关每个需求内容的信息。 (2) 层次化编码这也许是常用的方法。如果功能需求出现在软件需求规格说明中第3 . 2部分,那么它们将具有诸如3.2.4.3这样的标识号。标识号中的数字越多则表示该需求越详细,属于较低层次上的需求。即使在一个中型的软件需求规格说明中,这些标识号也会扩展到许多位数字,并且这些标识也不提供任何有关每个需求目的的信息。如果你要插入一个新的需求,那么该需求所在部分其后所有需求的序号将要增加。删除或移去一个需求,那么该需求所在部分其后所有需求的序号将要减少。但其他地方的引用将混乱,对于这种简单的层次化编号的一种改进方法是对需求中主要的部分进行层次化编号,然后对于每个部分中的单一功能需求用一个简短文字代码加上一个序列号来识别。例如,软件需求规格说明可能包含“第3.2.5部分?编辑功能”,并将此部分编写成子模块文档,然后配置管理。有时,你觉得缺少特定需求的某些信息。在解决这个不确定性之前,可能必须与客户商议、检查与另一个系统的接口或者定义另一个需求。使用“待确定”(to be determined, TBD或采用汉语拼音略写DQD)符号作为标准指示器来强调软件需求规格说明中这些需求的缺陷。通过这种方法,你可以在软件需求规格说明中查找所要澄清需求的部分。记录谁将解决哪个问题、怎样解决及什么时候解决。把每个TBD编号并创建一个TBD列表,这有助于方便地跟踪每个项目。在继续进行构造需求集合之前,必须解决所有的TBD问题,因为任何遗留下来的不确定问题将会增加出错的风险和需求返工。当开发人员遇到一个TBD问题或其它模糊之处时,他可能不会返回到原始需求来解决问题。多半开发者对它进行猜测,但并不总是正确的。如果有TBD问题尚未解决,而你又要继续进行开发工作,那么尽可能推迟实现这些需求,或者解决这些需求的开放式问题,把产品的这部分设计得易于更改。编写的需求文档没有现成固定的方法,好是根据经验进行。从过去所遇到的问题中可使你受益匪浅。许多需求文档可以通过使用有效的技术编写风格和使用用户术语而不是计算机专业术语的方式得以改进。你在编写的需求文档时,希望读者还需牢记以下几点建议:保持语句和段落的简短。采用主动语态的表达方式。编写具有正确的语法、拼写和标点的完整句子。使用的术语与词汇表中所定义的应该一致。需求陈述应该具有一致的样式,例如“系统必须..”或者“用户必须..”,并紧跟一个行为动作和可观察的结果。例如,“仓库管理子系统必须显示一张所请求的仓库中有存货的库存清单。” 为了减少不确定性,必须避免模糊的、主观的术语,例如,用户友好、简单、有效、、新技术、优越的、可接受的等。当用客说“用户友好”或者“快”时,你应该明确它们的真正含义并且在需求中阐明用户的意图。避免使用比较性的词汇,定量地说明所需要提高的程度或者说清一些参数可接受的大值和小值。当客户说明系统应该“处理”、“支持”或“管理”某些事情时,你应该能理解客户的意图。由于需求的编写是层次化的,因此,可以把顶层不明确的需求向低层详细分解,直到消除不明确性为止。文档的编写人员不应该把多个需求集中在一个冗长的叙述段落中。在需求中诸如“和”,“或”之类的连词表明了该部分集中了多个需求。务必记住,不要在需求说明中使用“和/或”,“等等”之类的连词。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11