需求工程对软件开发的影响(对软件需求工程的理解)
本篇文章给大家谈谈需求工程对软件开发的影响,以及对软件需求工程的理解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、需求分析在软件开发中的重要性
- 2、需求工程的重要性是什么?
- 3、软件开发活动中为什么要重视需求工程?
- 4、大话软件工程:需求分析与软件设计(五)
- 5、需求工程对软件开发的影响
- 6、需求工程包含哪些活动?软件开发活动中为什么要重视需求工程
需求分析在软件开发中的重要性
软件需求分析特别重要。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中的一个简单步骤,但在过去十多年中越来越多的人认识到它是整个过程中最关键的一个过程。只有通过软件需求分析,才能把软件功能和性能的总体概念描述为具体的软件需求规格说明,从而奠定软件开发的基础。许多大型应用系统的失败,最后均归结到需求分析的失败:要么获取需求的方法不当,使得需求分析不到位或不彻底,导致开发者反复多次地进行需求分析,致使设计、编码、测试无法顺利进行;要么客户配合不好,导致客户对需求不确认,或客户需求不断变化,同样致使设计、编码、测试无法顺利进行。参考文章:
需求工程的重要性是什么?
需求工程的重要性主要表现在: 增强了项目涉众对复杂产品特征在细节和相互依赖关系上的理解, 增强了项目涉众对需求( 尤其是复杂需求) 的掌握 ; 增进了项目涉众之间的交流, 减少了可能的误解和交流偏差; 需求管理能够更加有效地处理需求变更,提高了生产效率; 需求跟踪信息能够更加准确地反映项目的进展情况,以便进行更好的项目决策; 使得项目涉众认识到需求在项目工作中的重要性, 使得需求的作用得到重视和有效发挥。良好的需求分析和管理工作, 才能把系统的功能描述和性能指标转化为具体的软件需求规格说明书,成为系统建设的依据和基础。
需求工程的内容
需求获取阶段
需求获取首先需要的是技术的支持,其次,在需求获取工作中主要涉及了 3 个至关重要的因素:应搜集什么信息;从什么来源中搜集信息;用什么机制或技术搜集信息。再次,需求获取的开始,代表着软件项目正式开始实施,正所谓万事开头难。综合上述 3 个点使得需求获取成为软件开发中最困难、最关键、最易出错也是最需要交流的方面。在工作开展中,主要是就业务流程、组织架构、软硬件环境和现有系统等相关内容进行沟通,挖掘系统最终用户的真正需求,把握需求的方向。在需求获取调研会中首先对需求获取方法作了验证。现行的需求获
取方法一般有基于调查的需求获取方法、基于用例的需求获取方法、原型法等几种方法。各种需求获取方法各有利弊。
需求分析阶段
需求分析与需求获取是密切相关的,需求获取是需求分析的基础,需求分析是需求获取的直接表现,两者相互促进,相互制约。需求分析与需求获取的不同主要在于需求分析是在已经了解承建方的实际的客观的较全面的业务及相关信息的基础上,结合软、硬件实现方案,并做出初步的系统原型给承建方做演示。承建方则通过原型演示来体验业务流程的合理化、准确性、易用性。同时,用户还要通过原型演示及时地发现并提出其中存在的问题和改进意见和方法。
需求文档编写阶段
需求开发的最终成果是,在对所要开发的产品达成共识后,所编写的具体的文档。需求文档是在需求获取和需求分析两个阶段任务结束时生成的,所以文档要包含所有需求。在此阶段先要从软件工程和文档管理的角度出发依据相关的标准审核需求文档内容,确定需求文档内容是否完整。对需求文档中存留问题进行修改的工作。
需求确认阶段
需求确认主要是针对《需求规格说明书》的评审,保证需求符合优秀需求成熟的特征,并且符合好的需求规格说明的特征。在需求确认阶段需要保证以下几点:
(1)软件需求规格说明正确描述了预期的满足各方涉众需求的系统能力和特征。
(2)从系统需求、业务规则或其他来源中正确的推导出软件需求。
(3)需求是完整的、高质量的。
(4)需求的表示在所有地方都是一致的。
(5)需求为继续进行产品设计和构造提供充分的基础。
需求跟踪阶段与需求复用阶段
需求跟踪是指通过比较需求文档与后续工作成果之间的对应关系,确保产品依据需求文档进行开发,建立与维护“需求——设计——编程——测试”之间的一致性,确保所有工作成果符合用户需求。需求跟踪是一项需要进行大量手工劳动的任务,在系统开发和维护的过程中一定要随时对跟踪联系链信息进行更新。需求跟踪能力的好坏会直接影响产品质量,降低维护成本,容易实现复用,同时,需求跟踪还需要建设方的大力支持。
需求复用阶段
在软件项目实施过程中,许多不同项目间存在着许多相似的需求,尤其是类型相同的项目在不同的用户群众的实施中,需求的相似性就更加明显、更加普遍了。有了需求复用,建设方就能快速的形成一个需求的原型,这样,后期的需求工作只需要在此原型的基础上进行修改、扩充和完善即可,大大提高了需求分析的工作进度。所以,对于需求的复用就需要加以重视。对于需求复用,首要责任就是要提取可复用的需求,对需求复用的理解和扩充。其次就是要保证需求复用不存在冲突。
需求变更控制阶段
需求变更在软件项目开发中是不可避免的。无休止的需求变更只会造成各种资源无休止的浪费,但是其中也不乏有许多是必要的、合理的需求变更。对于需求变更,首先是要尽量及早的发现,以避免更大的损失。其次,是要采取相应的、合理的变更管理制度和流程,这样同样可以降低需求变更带来的风险。
版本控制阶段
版本控制是管理需求规格说明和其他项目文档必不可少的一个方面,也是需求变更文档化管理的最有效办法。可以详细记录发生需求变更的需求文档版本的版本,发生变更的原因,变更发生的控制记录,并对变更后的需求文档进行唯一版本号的标识。使得每个成员都能及时访问最新版本的需求文档。
实施版本控制的基础是需求基线,所谓需求基线就是项目组成员一经承诺将在某一特定产品版本中实现的功能性和非功能性需求的集合。需求基线的确定可以保证项目的涉众各方可以对发布的产品中希望具有的功能和属性有一个一致的理解。
软件开发活动中为什么要重视需求工程?
因为开发软件系统最为困难的的部分就是准确说明开发什么,最为困难的慨念性工作编写详细技术需求,这包括所有面向用户,面向机器和其他软件系统的接口,同时这也是一旦有错,最终将会给系统带来极大损害的部分,并且以后在对他进行修改极为困难。
大话软件工程:需求分析与软件设计(五)
需求工程,是构建管理信息系统的第一步工作,是对客户的现状和需求进行调研,并按照工程化的方法和标准完整、准确地记录和分析客户的需求,它的成果是进行后续设计工程的基础。
1.定义
需求工程,是指采用工程化的方法和标准,收集、记录和分析客户对信息化的需求,并最终确定系统需要实现的功能以及功能的相关特征和约束。需求工程包含三个主要的部分:需求调研、需求分析、需求管理。
注:关于需求管理
需求管理是需求工程中非常重要的内容,包含对需求的跟踪、控制、变更、版本管理等内容,它是保证系统的内容、质量、进度的重要手段,需求管理的内容更加偏重于软件的过程管理。
2.作用
需求工程的作用归集为一句话就是:收集客户想要做什么,最终确定实际做什么。
对于一个应用软件的开发来说,需求工程成果的质量极大地影响着这个软件的设计结果,是决定成败的主要环节,从客户那里完整地获取、记录、分析与确认需求,并正确地传递给后续的工程是一个需求分析师的必备能力。需求工程的分析成果形成的需求规格说明书不但是后续设计与开发的依据,同时也是客户对完成系统评估、验收的依据。
另外一方面,需求工程的内容也极大地影响着软件开发的成本、技术、周期、资源、质量以及最终客户的满意度等诸多方面。需求工程的成果不但会影响客户最后获得的效果,也会影响到软件开发者的最终利益。
需求工程的核心工作是需求调研和需求分析,最终的主要交付物有两个。
1)需求调研成果(需求调研资料汇总)
从客户现场通过面对面的调研收集到的第一手需求资料,包括用图形、文字和表格等方式记录的原始资料,形成需求调研资料汇总。
2)需求分析成果(需求规格说明书)
基于前述的调研资料进行分析,识别出最终需要进行开发的全部内容,并且通过客户确认,最终形成需求规格说明书,这是后续设计、开发过程的依据。
1.需求的收集与确认
从客户不清晰的原始需求到可以进行编码开发的过程中,对收敛贡献最大的部分是②需求工程,而比较容易进行规范化、标准化作业的是③~⑤的部分。②将①的复杂内容梳理并形成了清晰的需求说明规格书。③将②的成果再进一步抽提、转换成为架构、功能和数据的设计成果。④将③的成果再进一步抽提、转换为组件、机制的构成方式。⑤将④的成果用编码的形式开发成为最终的软件。
从图形的推进变化上可以看出,需求工程②担负着将原始需求①的内容理出头绪并形成一份清晰明了、可以确认的需求规格说明书的任务;而③~⑤的一系列工作,越靠后的部分就越单纯,复杂度降的越低,要做的事就越收敛。②需求工程是开拓者,它担负了最为杂、乱、累的工作,从客户原始需求到编码的5个步骤中对收敛起的作用最大。②部分图形的收敛越大(梯形的坡度大),③以后的设计开发的图形就越接近于正矩形,工作就越顺利,否则②~⑤都是大坡度的梯形时就说明需求工程做的不到位,在后续的设计和开发中会不断地发现前期的需求有问题而造成返工。
注:关于“收敛”的含义
收敛,指的是将复杂的原始需求,归集成为可以进行标准化作业的过程。标准化的作业内容是不受需求影响的,不论需求是否复杂其内容都是固定的。
2.需求,并非都是来自于客户调研
构建信息系统的需求是否都是从客户那里获得的呢?这个问题反映出了完成的系统中有多少内容是经过软件工程师(包括咨询、需求、设计、开发、实施等)提案的,这些提案往往包含更多的高级需求、更多的附加价值,需求的来源有多个。
1)基本需求
基本需求来自于对客户进行的“调研”,这类需求以功能需求为主,基本上按客户意愿进行设计和开发,内容大部分在需求调研、需求分析阶段内确定。
2)中级需求
中级需求不是客户直接提出来的功能需求,而是在需求分析阶段、业务设计阶段通过对客户提出来的业务需求进行转换、优化、补缺、提升的过程中产生的需求,也就是为完善业务而产生的需求。
3)高级需求
高级需求主要来自于软件工程师根据本次客户的目标需求、新的设计理念、新技术等而提出,也就是说,高级需求是软件工程师设计出来的需求,例如,“事找人流程设计(架构)”“按照任务设计组件(功能)”“数据的复用(数据)”等。“设计需求”需要软件工程师有足够的知识和能力。
上述三个需求来源的获取难度顺序为高级需求>中级需求>基本需求。
软件工程师要认识到,需求工程(调研与分析)完成了,并非是需求获取的工作全部完成了,只是由客户直接提出来的需求完成了,而通过设计工程的需求发掘尚未开始。
注:高级需求会影响开发成本这里只考虑如何发掘有价值需求的方法,不考虑新需求带来的开发成本问题。
需求通常分为两大类,即功能性需求和非功能性需求。
功能性需求是系统必须要提供的业务处理功能,也是软件需求的主体。通常所说的需求前面没有形容词时指的都是功能性需求。
获取的需求可以分为三类,它们之间存在着转换关系,按照转换的顺序分为: 目标需求、业务需求以及功能需求。
目标需求:客户提出的信息化的目标、理念、希望、价值。
业务需求:客户提出的系统要对应业务的内容、过程、规则等。
功能需求:确定系统必须提供的处理业务需求的功能及功能的具体描述。
非功能性需求是指建立一些指标性的条件来判断系统运行情况,而不是针对某个业务处理的具体功能需求,它们被用来判断运行的系统是否可以满足以下的条件:安全性、可靠性、互操作性、健壮性、易使用性、可维护性、可移植性、可重用性、可扩充性等。
售前咨询的结果中包含着很多对需求分析、业务设计而言非常重要的输入,特别是很多的“目标需求”来源于此,目标需求对后续信息系统整体规划、顶层设计有着非常重要的影响
1.售前咨询的内容
在进入到设计工程之前的阶段,与客户的所有交流和沟通的目的都是在获取需求,特别是对大型项目来说,签订合同之前通常会有一个售前咨询阶段,在这个阶段一般软件商会派出经验比较丰富的咨询师(如专家型咨询师)来与客户进行交流,探讨根据客户的需求可以提供什么样的解决方案,这个阶段的咨询具有以下几个特点。
● 合同尚未签订,具体信息系统做什么内容尚未确定,能否签约取决于咨询的结果。
● 此时客户方面的参与者多为企业高层,如经营者、高级管理者以及信息化主管等。
● 客户的需求多为目标需求、业务需求甚至是难度痛点等内容,较少谈及功能需求。
● 需求会涉及企业的发展战略、现存的主要问题及公司对信息化的期待等内容。
● 交流中谈到的内容可能会比较抽象,需求也多为隐性需求,是否能够成为真实需求需要咨询师去引导、判别、确认等。售前咨询通常谈到的都是相对高端的需求,它们是后续需求分析中“目标需求”的主要来源,是企业经营管理者对信息系统的价值期望(尽管可能是用隐性方式提出的),在后续所谓的“需求调研”阶段中,往往可能就没有机会再去直接听取企业高管的需求了,所以这个部分的内容要作为非常重要的需求记录下来,作为后续需求分析的重要参考素材。
2.售前咨询与需求工程
售前咨询的方式非常依赖于咨询师个人的能力和魅力,它并没有特别规范和标准的交付物以及模板,因此没有将咨询工作明确地列入到需求工程中(软件商不同可能划分方法不一样),这两者的重点不同。
(1)售前咨询:重点是通过售前咨询活动,提出解决方案,协助销售部门签下合同。
(2)需求工程:重点是进入客户现场,对已经确定的合同内容进行详细的调研。虽然咨询的主要目的是促成签订合同,但是咨询阶段收集到的信息是非常重要的需求工程分析对象,尤其是“目标需求”。
3.咨询师的作用
(1)咨询师,代表的是软件企业的最高专业水准,他应该是软件商的名片。
(2)咨询师是全面阐释软件商的理念与主张的传道士。
(3)咨询师建立的起点高,则整个项目的起点高,总价值也会高(对软件商与客户双方)。
(4)咨询师要能够利用储备的知识和经验,为客户的决策者充当顾问、参谋。
(5)咨询师的工作重点是要与客户项目的决策人进行沟通,获取客户的目的、期望等目标需求。
4.咨询师的能力要求
对于从事售前咨询的专家型咨询师来说,对他的要求就比较高了,主要体现在以下几个方面(不限于此)。
1)沟通能力沟通的对象有客户的决策层,生产、财务等中间管理层,对能力的要求较高,例如,
● 理解:是否能够理解高层的谈话要旨、隐含的需求?
● 展示:能否充分地展示出软件企业的服务能力、产品能力?
● 说服:能否说服客户,例如,导入系统后要在组织或管理制度上做相应的改变?等等。
2)专业能力对咨询师而言,对他的专业能力要求是综合的。
● 是否掌握行业咨询的基本知识?
● 是否熟悉客户的主营业务和辅营业务知识?
● 是否基本清楚软件行业的最新技术、匹配的案例、解决方案等。
需求工程的工程分解分为两个阶段,即需求调研阶段和需求分析阶段
需求调研阶段的主要工作有两个:需求调研,资料汇总。
(1)需求调研:利用问卷、现状构成图、访谈记录、既存表单的方式收集客户的需求。
(2)资料汇总:将调研过程中收集到的资料进行汇总,形成需求调研资料汇总,作为需求分析阶段的分析依据。
需求分析阶段的主要工作有两个:需求分析,资料汇总。
(1)需求分析:基于需求调研资料分析客户的需求,最终确认系统需要实现的功能。
(2)资料汇总:将分析成果资料进行汇总,形成需求规格说明书,作为后续的各个设计阶段的输入。
1.需求调研
目的主要是收集、记录客户对信息化的需求,重点是对内容的“记录”,而不是“分析”或是“设计”,避免因为分析与设计融入了需求分析师个人的见解,需求调研阶段的资料一定要保持其“原始性”(使用需求模板是为了使记录内容标准化、格式化)。
2.需求分析
在对需求调研资料的理解基础之上,进行了抽提、归类、梳理,同时根据分析补全了调研时的断点,并且采用比较规范的方式进行了表述,重要的是:需求分析师通过对目标需求、业务需求等高端需求的分析加入了个人的理解,以及对企业信息化提升有价值的意见,所以需求分析的结果与原始记录之间会发生不同,需求分析师的理解代表了软件开发团队的理解,并以此为基础向客户进行确认,最终稿就形成了向下一个设计环节的输入资料。
所以说,需求分析师的能力会最终影响到信息系统的内容、技术、成本和周期等。
3.二者的关系
两者都采用非技术设计用语描述,需求调研采用“客户用语”进行记录,需求分析采用“业务设计用语”表达分析的结果。在工作目的上两者有所不同,例如:需求分析做的业务流程图必须具有业务的完整性,且符合业务流程的标准表达方式;而需求调研收集到的业务流程图可能是片段的、不连续的流水账。需求分析对需求实体的内容进行了抽提、分类,建立了需求体系表;需求调研阶段不要求这个梳理,只进行原始的收集和记录即可(要保留原始状态)。需求分析成果的作用有两个:向前端的客户确认,向后端输出设计依据;需求调研的成果仅仅是向需求分析提供资料。两者最大的区别如下。
(1)需求调研:着眼于对原始需求的收集、记录。
(2)需求分析:着眼于从整体上理解、归集、确认,需求分析不是对需求调研的重复。
需求工程阶段完成的资料对后续的各个设计阶段的影响
(1)需求调研:收集、梳理客户的原始需求。
(2)需求分析:调研资料只提供给需求分析,不能被设计所直接引用(可以参考)。
(3)概要设计:要完整地对需求分析的结果全面覆盖,给出规划。
(4)详细设计:原则上是针对概要设计的成果进行细节设计。
(5)应用设计:对需求分析中关于应用方面的要求给出系统实现的方法。
(6)技术设计:对需求分析成果中的非功能性需求、技术需求做出响应。
(7)、(8)开发~测试:不能将需求分析的成果作为开发与测试的依据(可以参考)。
(X)系统验收:客户对系统的最终验收是依据需求规格说明书进行的。
需求调研并不是按照工作的顺序或是调研内容之间的关系去进行的,因此不存在严格意义上的工作分解,它是按照需求表达形态的不同进行划分的,需求表达的形态分为三个类型。
(1)图形类:包括表达客户业务现状的图形、用界面表达的需求等。
(2)文字类:通过问卷、访谈记录形式收集的用文字表达的需求。
(3)表单类:客户提供的实际报表、单据形式的需求。
这三种类型的资料相互之间没有必然的关联关系或是顺序,可以同时进行收集。
需求调研的结果经过梳理,将非功能性需求分离后剩下的都是功能性需求,可以按照功能性需求的定义将它们分为:目标需求、业务需求和功能需求,这三者存在着目标需求→业务需求→功能需求的转换关系。严格地讲,它们不是三种类型的需求而是需求的三个层次,最终只有成为第三层的功能需求才能在系统中实现。分析阶段的工作分解就是按照这个顺序确定的。
(1)第一层工作:对目标需求的分析、向业务需求的转换。
(2)第二层工作:对业务需求的分析、向功能需求的转换。
(3)第三层工作:对功能需求的分析和确定。
建立相应的需求体系,没有这个需求体系,就是用个人的经验来解决客户的问题,有了这个体系,就可以做到用集体的经验和智慧来解决客户的问题。这里需求体系主要指的是建立“业务需求”。
建立了需求体系可以带来很多的价值,试举几例如下。
1.体系化的知识积累
(1)研究与实践的成果可以有条理地进行积累,包括:理念、方法、标准、规范等。
(2)客户价值的积累,包括:不同业务领域、行业、板块、系统、模块、功能等。
2.商业规模化的需要
(1)提升软件企业的价值,可以为客户提供体系化的解决方案。
(2)抽提、规划、建立新的商业模式,对客户的需求进行快速响应。
3.降低成本提高效率
(1)积累的知识可以得到有效的复用、共享,降低成本。
(2)可以大幅度地缩短开发周期,同时可以帮助减少“需求失真”现象。
4.规避风险的首要措施
(1)规避风险的最佳方式是让每个人事先知道该如何做,有了体系支持就可以做到。
(2)人的能力不足、调研分析时间短的问题,可以用知识库帮助解决。
5.快速培养人才的捷径作为需求分析师,被要求具有很多的能力,例如“业务能力”“沟通能力”“抽象能力”“表现能力”等,但这太抽象,难以理解,而且非一日之功。建立一个可以提供大多数人直接参考和共享的知识库,可以让需要者“有序可循”,它像一个“业务平台”,可以让大家提供经验、分享知识,并由大家共同维护。
需求工程可以说对每个从事软件行业的人员来说都是基础知识。因为它的核心内容是:
(1)如何与他人交流,如何快速地理解他人的想法,如何向他人传递想法等?
(2)对一个复杂的、不熟悉的研究对象如何快速找到切入点?
(3)如何将一个不清晰的对象,用简单的语言、图形或是表格的方式表达出来?
(4)如何将客户用语(知识、经验)表达的需求转换为业务设计用语的表达方式?等等。
管理信息系统的需求数量多少、需求的附加价值高低,取决于客户对信息化的目的和需求分析师的能力,需求分析师的位置通常是夹在前面的“咨询师”和后面的“业务设计师”之间,当软件企业具有这两个岗位或是该项目配置有这两个岗位时,需求分析师自身能力对项目的影响可以在某种程度上得到控制,如果软件企业没有其他两个岗位或是本项目没有配置这两个岗位,那么需求分析师就决定了这个项目的最高水平(企业管理型项目的最高水平通常是由业务设计师决定的),因此他就必须要掌握一定的咨询和业务设计知识。
需求工程,以设计输入为要求标准
需求工程不但是一门“知识”,同时也是一门可以定性定量执行的“技术”,它有模板、有流程、有标准,更重要的是它与后续的设计有着严格的传递与继承关系,由于有了设计的范围、内容、格式等作为需求工程的产出标准,所以需求工程要做的内容就非常具体、规范,作为一门“技术”的需求工程的可操作性大为提升。建立以设计输入为需求工程标准的方法,可以提升设计质量、产品质量以及工作效率。
需求工程对软件开发的影响
软件需求分析是决定软件质量的基础,也是一个软件开发项目成败的关键。软件的需求分析作为一个软件项目开发的第一阶段,其重要性很突出。
需求工程包含哪些活动?软件开发活动中为什么要重视需求工程
需求工程活动包括(1)需求开发和(2)需求管理两个方面。
需求开发又包括需求获取、需求分析、需求规格说明和需求验证。
原因:(1)需求问题是当前软件开发面临的主要问题(2)需求分析是软件开发中的理论约束,他控制着整个软件开发的工程走向。他是非技术人员和技术人员的工程纽带。
关于需求工程对软件开发的影响和对软件需求工程的理解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。