需求工程无疑是当前软件工程中的关键问题,从美国于1995年开始的一项调查结果就足以看出这一点。在这项调查中,他们对全国范围内的8000个软件项目进行跟踪调查,结果表明,有1/3的项目没能完成,而在完成的2/3的项目中,又有1/2的项目没有成功实施。他们仔细分析失败的原因后发现,与需求过程相关的原因占了45%,而其中缺乏最终用户的参与以及不完整的需求又是两大首要原因,各占13%和12%。
需求工程又是软件工程中最复杂的过程之一,其复杂性来自于客观和主观两个方面。从客观意义上说,需求工程面对的问题几乎是没有范围的。由于应用领域的广泛性,它的实施无疑与各个应用行业的特征密切相关。其客观上的难度还体现在非功能性需求及其与功能性需求的错综复杂的联系上,当前对非功能性需求分析建模技术的缺乏大大增加了需求工程的复杂性。从主观意义上说,需求工程需要方方面面人员的参与(如领域专家、领域用户、系统投资人、系统分析员、需求分析员等等),各方面人员有不同的着眼点和不同的知识背景,沟通上的困难给需求工程的实施增加了人为的难度。
最初,需求工程仅仅是软件工程的一个组成部分,是软件生命周期的第一个阶段。虽然大家也都知道需求工程对软件整个生命周期的重要性,但对它的研究远远没有对软件工程的其他部分的研究那么深入。
在传统软件工程生命周期中,涉及需求的阶段称作需求分析。一般来说,需求分析的作用是:
● 系统工程师说明软件的功能和性能,指明软件和其他系统成分的接口,并定义软件必须满足的约束;
● 软件工程师求精软件的配置,建立数据模型、功能模型和行为模型;
● 为软件设计者提供可用于转换为数据设计、体系结构设计、界面设计和过程设计的模型;
● 提供开发人员和客户需求规格说明,用于作为评估软件质量的依据。
但从当前的研究现状来看,需求工程的内容远不止这些。需求工程是系统工程和软件工程的一个交叉分支,涉及到软件系统的目标、软件系统提供的服务、软件系统的约束和软件系统运行的环境。它还涉及这些因素和系统的精确规格说明以及系统进化之间的关系。它也提供现实需要和软件能力之间的桥梁。
需求工程的基本活动包括:
● 抽取需求;
● 模拟和分析需求;
● 传递需求;
● 认可需求;
● 进化需求。
每个活动都有它基本的动机、任务和结果,也有各自的困难所在。
首先,开始一个项目是因为要对现行系统进行改造。要改造一个系统是因为现行系统存在需要解决的问题。如:现行系统与当前情况不符合、出现新的商机或者可能节省时间、资金和资源等,这就是抽取需求的动机。在这个阶段,需求工程师的任务是认识问题之所在,获取足够多的知识,最后成为问题领域的专家。需求工程师常采用W6H方法去认识问题领域,即6个以W打头的问题,一个以H打头的问题,如表1所示。
需求抽取是非常困难的,其主要原因有:
● 缺乏领域知识,应用领域的问题常常是模糊的、不精确的;
● 存在默认的知识,即难以描述的日常知识(常识问题);
● 存在多个知识源,而且多知识源之间可能有冲突;
● 面对的客户可能有偏见,如不能提供你需要了解什么或不想告知你需要了解的事情。
需求抽取的方法一般有问卷法、面谈法、数据采集法、用况法、情景实例法以及基于目标的方法等,还有知识工程方法,如:场记分析法、卡片分类法、分类表格技术和基于模型的知识获取等。
需求工程的第二个阶段是模拟和分析需求,目前有许多工作都以此为目标进行。需求分析和模拟的出发点在于:
● 指导抽取;
● 帮助需求工程师了解进展;
● 帮助发现问题;
● 帮助检查对问题的理解。
需求分析和模拟又包含三个层次的工作。首先是需求建模。需求模型的表现形式有自然语言、半形式化(如图、表、结构化英语等)和形式化表示等三种。自然语言形式具有表达能力强的特点,但它不利于捕获模型的语义,一般只用于需求抽取或标记模型。半形式化表示可以捕获结构和一定的语义,也可以实施一定的推理和一致性检查。形式化表示具有精确的语义和推理能力,但要构造一个完整的形式化模型,需要较长时间和对问题领域的深层次理解。对需求概念模型的要求包括:
● 实现的独立性:不模拟数据的表示和内部组织等;
● 足够抽象:只抽取关于问题的本质方面;
● 足够形式化:语法无二义性,并具有丰富的语义;
● 可构造性:简单的模型块,能应付不同复杂程度和规模的描述;
● 利于分析:能支持二义性、不完整性和不一致性分析;
● 可追踪性:支持横向交叉索引并能与设计或实现等建立关联;
● 可执行性:可以动态模拟,利于与现实相比较;
● 最小性:没有冗余的概念。
需求模拟技术又分为企业模拟、功能需求模拟和非功能需求模拟等。
企业模拟是一种软系统方法,涉及整个组织,从各个不同的视点分析问题,包括目标、组织结构、活动、过程等。有的企业模拟还建立可执行的领域模型。采用企业模拟方法产生的不仅仅是规格说明,还可以得到许多关于企业运作的状况分析。目前代表性的工作包括:信息模拟、组织模拟和目标模拟等。
功能需求模拟从不同视点为模拟软件提供服务,包括结构视点和行为视点等,主要方法有:结构化分析、面向对象分析和形式化方法。结构化分析是一种面向数据的方法,以数据流为中心。其核心概念包括:进程、数据流、数据存储、外部实体、数据组和数据元素。有代表性的模拟工具有:数据流图、数据字典、原始进程规格说明。面向对象分析以对象及其服务作为建模标准,比较自然,对象也具有相对的稳定性。主要模拟的元素有:对象、类、属性、关系、方法、消息传递、Use Cases等。其主要原理包括分类继承层次、信息隐藏、汇集关系等。形式化方法从广义上说,是应用离散数学的手段来设计、模拟和分析,得到像数学公式那样精确的表示。从狭义上说,就是使用一种形式语言进行语言公式的形式推理,用于检查语法的良构性并证明某些属性。形式化方法一般用于一致性检查、类型检查、有效性验证、行为预测以及设计求精验证。引入形式化机制的目的是:
● 减少二义性,提高精确性;
● 为验证打下基础;
● 允许对需求进行推理;
● 允许执行需求。
但是人们常常不用形式化手段,因为:
● 形式化涉及太多细节,分析的级别较低;
● 形式化的核心问题是一致性和完整性,而不是获取需求;
● 没有合适的工具;
● 要求更多的代价。
传递需求的主要任务是书写软件需求规格说明,其目的是:
● 传达对需求的理解;
● 作为软件开发项目的一份契约;
● 作为评价后续工作的基线;
● 作为控制需求进化的基线。
对需求规格说明感兴趣的群体包括:用户、客户;系统分析员、需求分析员;软件开发者、程序员;测试员;项目管理者。
认可需求就是让上述人员对需求规格说明达成一致,其主要任务是冲突求解,包括定义冲突和冲突求解两方面。常用的冲突求解方法有:协商、竞争、仲裁、强制、教育等,其中有些只能用人的因素去控制。
进化需求的必要性是明显的,因为客户的需要总是不断(连续)增长的,但是一般的软件开发又总是落后于客户需求的增长,如何管理需求的进化(变化)就成为软件进化的首要问题。对传统的变化管理过程来说,其基本成分包括软件配置、软件基线和变化审查小组。当前的发展是软件家族法,即产品线方法。多视点方法也是管理需求变化的一种新方法,它可以用于管理不一致性并进行关于变化的推理。
|
相关推荐
《没有需求就没有软件——需求工程简论》\n\n需求工程是软件开发的基石,它在软件生命周期中占据着至关重要的地位。根据1995年美国的一项大规模调查,高达45%的软件项目失败与需求工程环节相关,尤其是缺乏最终用户...
"软件需求规格说明编写指南" 软件需求规格说明是软件开发过程中的一份重要文件,旨在明确软件的功能、性能和接口要求,确保软件满足用户的需求。...* 软件需求规格说明没有得到 Maintenance 和更新
- 包括所有利益相关者的需求,并确保没有遗漏。 - 标记未确定的问题,以待进一步研究或决策。 - 确保需求在项目范围之内,与商业目标保持一致。 - 检查是否存在与业务规则、政策或法规冲突的需求。 3. **一致性...
如果没有需求,无法进行设计和编码。 软件需求分析的重要性还体现在项目的成功率上。根据Standish Group的报告,16%的项目被终止,122%的项目超支,89%的项目按期在预算之内完成。在小公司中,只有3.5%的项目按期在...
- **需求变更频繁**:在项目开发过程中,用户的需求可能会发生变化,如果没有有效的管理机制,这将导致项目延期。 - **沟通不畅**:开发者与用户之间的沟通不畅是常见的问题之一,这可能会导致双方对需求的理解存在...
《软件需求规格说明书(SRS)评审的关键要素与实践》 软件需求规格说明书(Software Requirement Specification,简称SRS),是软件开发过程中的核心文档之一,它详细描述了软件系统的功能、性能、界面、输入输出、数据...
编制目的部分没有给出具体内容,但可以推断,制定该规范的目的是为了确保软件需求调研的标准化、规范化,从而提高调研的准确性和效率,降低项目成本,确保项目顺利进行。 2. 需求调研过程 需求调研过程包括需求调研...
没有充分理解需求,可能导致软件设计和实现偏离初衷,甚至造成项目失败。因此,软件过程中最重要的一步——软件需求分析,是每一个IT专业人员必须重视并掌握的核心技能。只有深入理解并有效管理需求,才能开发出满足...
在撰写需求文档时,应该使用恰当的表达方式,确保所有需求都清晰、具体、可验证且相互之间没有冲突。此外,需求文档应具有层次结构,使读者能够轻松地找到信息。一个典型的结构可能包括以下部分: - 引言:介绍文档...
尽管没有中文版,但对于提升需求分析技能而言,理解和学习英文资料是值得的挑战,这将有助于拓宽视野,掌握国际标准和最佳实践。 总之,软件需求分析是软件工程中的基石,掌握好这个领域的知识,不仅能提高项目成功...
一致性则要求需求之间没有矛盾,所有的需求都应该相互协调,共同支持软件系统的整体目标。 ### 系统需求的文档化 系统需求开发的结果最终会被写入系统需求规格说明中。这是软件开发过程中的一个正式文档,详细描述...
审查过程中,项目团队需要检查需求文档的完整性和一致性,确保没有遗漏或相互冲突的需求。原型测试则允许用户在实际的产品或原型中测试需求,提供实时反馈。而用户反馈是验证需求真实性和有效性的直接方式。在需求...
7. 一致性:确保所有的需求之间没有冲突,避免出现相互矛盾的情况。 通过深入理解和正确编写这两份文档,软件开发团队可以有效地管理项目范围,降低风险,并确保最终产品符合用户和业务的实际需求。在实际工作中,...
撰写优秀的需求没有一个简单的公式。很大程度上,它是从过去的需求问题中得来的教训与经验。这儿有几条当你写作软件需求时应记在心上的原则: 保持句子和段落简短。 从开发者的立场来看,检查需求陈述是否足够...
- 用户代表有信心开发团队将与他们合作交付正确的解决方案,即使在构建开始之前没有考虑到所有需求。 - 开发管理层有信心,因为开发团队有一个业务伙伴,将保持项目专注于实现其目标,并与开发平衡时间表、成本、...
如果没有软件需求规格说明书,软件开发者将很难明确软件的需求和规格,从而影响软件的开发质量和效率。 5. 软件需求规格说明书的编写原则: 软件需求规格说明书的编写原则包括: * 明确性:软件需求规格说明书...