作业A001-185-2539-陈丹
课程名称 软件需求分析与建模
班级 18软件工程5班
教导教师 董瑞生
陈丹 1814080902539
日期 2020.10.4
需求管理: 需求管理是因为需求工程的“工程”特性而存在的,它的目的是在需求 开发活动之后,保证所确定的需求能够在后续的项目活动中有效地发挥作用,保证各种活动的开展都符合需求要求。
需求获取: 需求获取的目的是从项目的战略规划开始建立最初的原始需求.为此,它需要研究系统将来的应用环境,确定系统的涉众,了解现有的问题,建立新系统的目标,获取为支持新系统目标而需要的业务过程细节和具体的用户需求。
需求分析: 需求分析的目的是保证需求的完整性和一致性。它从需求获取阶段输出的原始需求和业务 过程细节出发,将目标、功能和约束映射为软件行为,建立系统模型,然后在抽象后的系统模型中进行分析,标识并修复其中的不一致缺陷,发现并弥补遗漏的需求。
需求规格: 需求规格说明的目的是将完整、一致的需求与能够满足需求的软件行为以文档的方式明确地固定下来。在文档中,可以使用非形式化的文本(如自然语言)描述,也可以使用半形式化的 图形语言,如统一建模语言(Unified Modeling Language,UML)描述,还可以使用形式化的语言描述。描述的结果文档是接下来将被提交进行需求验证的软件需求规格说明。
需求验证: 需求验证是需求开发中的最后一个活动。它的首要目的是保证需求及其文档的正确性,即 需求正确地反映了用户的真实意图;它的另一个目标是通过检査和修正,保证需求及其文档的完整性和一致性。需求验证之后的需求及其文档应该是得到所有涉众一致同意的软件需求规格说明,它将作为项目规划、设计、测试、用户手册编写等多个其他软件开发阶段的工作基础,对帮助项目开发人员建立共同的前景具有重要作用。
需求管理: 需求管理是对需求开发所建立的需求基线的管理,它在需求基线完成之后正式开始,并在需求工程阶段结束之后继续存在,在设计、测试、实现等后续的软件系统开发中保证需求作用的持续、稳定发挥。它的主要工作是跟踪后续阶段中的需求实现与需求变更情况,确保需求得到正确的理解和实现。
1.处理范围广泛
2.涉及诸多参与方
3.处理内容多样
4.处理活动互相交织
5.处理结果要求苛刻
1.需求工程师是涉众和开发者之间的桥梁,要重视“软技能”,需要创新,需求开发是团队行为。
2.需求工程师需要具备的技能:
(1)熟练掌握软件开发方法 与技术,保证设计出来的软件解决方案既是可行的又是成本效益比有效的。
(2)必须要有非常 精确的表达能力,尤其是文档化能力。
(3)有非常好的交流沟通能力以了解涉众的想法,必须要有抽象建模与分析的能 力以准确定义涉众的想法。
3.需求工程师要重视“软技能”
需求工程师需要掌握的重要软技能包括以下几方面。
(1)交流技能
(2)观察技能
(3)抽象分析与问题解决技能
(4)写作技能
(5)关系协调和团队工作技能
4.需求工程师需要创新
5. 需求开发是团队行为
① 用户为了解决问题或达到某些目标所需要的条件或能力;
② 系统或系统部件为了满足合同、标准、规范或其他正式文档所规定的要求而需要具备的条件或能力;
③ 对①或②中的一个条件或一种能力的一种文档化表述。
严格意义上的软件需求分类
从严格意义上讲,软件需求是直接或间接关系到软件系统功能的期望。根据不同的分类标准,可以将需求分成不同的种类。在各种需求分类中最常见的是[IEEE 1998]的分类,[IEEE 1998]将需求分成下列几个类别。
① 功能需求(functional requirement):和系统主要工作相关的需求,即在不考虑物理约束的情况下,用户希望系统所能够执行的活动,这些活动可以帮助用户完成任务。功能需求主要表现为系统和环境之间的行为交互。
② 性能需求(performance requirement):系统整体或其组成部分应该拥有的性能特征,如 CPU使用率和内存使用率等。
③ 质量属性(quality attribute):系统完成工作的质量,即系统需要在一个“好的程度”上实现 功能需求,如可靠性程度和可维护性程度等。
④ 对外接口 (external interface):系统和环境中其他系统之间需要建立的接口,包括硬件接 口、软件接口和数据库接口等。
⑤ 约束(constraint):进行系统构造时需要遵守的约束,如编程语言和硬件设施等。
除了上述5种明确的软件需求类别之外,[IEEE 1998]还指出项目中也可能会出现逻辑数据 需求等其他特殊类型的需求。
除功能需求之外的其他4种类别需求又被统称为非功能需求(non-functional requirement)。 在非功能需求中质量属性对系统成败的影响极大,因此在某些情况下,非功能需求又被用来特指 质量属性。
功能需求
功能需求是软件系统需求中最常见和最重要的需求,同时也是最为复杂的需求。
通常一个软件系统的绝大部分需求都是功能需求。虽然在类别划分上功能需求只是5种类别之一,但在比例上功能需求有可能占所有需求的90%以上。进行这样不均衡比例的划分,是因 为功能需求的处理方式是一致的。
功能需求是一个软件产品得以存在的原因,是软件系统能够解决用户问题和产生价值的基础,也是整个软件开发工作的基础。所有开发者都需要了解功能需求。在复杂的系统中功能需求数量太多,所以需要将它组织为多个独立部分,然后按照分工原则由不同的开发者来处理不同 的部分。
在大规模软件系统中,因为其功能需求比较复杂,所以它是最需要按照3个抽象层次进行展开的需求类别,也就是说功能需求的开发要围绕“目标-任务-交互”的路线进行,对“目标”“任务”和“交互”3个概念的关注是功能需求开发的重中之重。
性能需求
[IEEE 1990]对性能的定义是:一个系统或其组成部分在限定的约束下,完成其指定功能的程度,如速度、精确性和内存使用程度等。性能需求定义了系统必须多好和多快地完成专门的功能。
常见的性能需求包括以下几种。
① 速度(speed):系统完成任务的时间,如PR1O
PR1 :所有的用户査询都必须在10 s内完成。
② 容量(capacity):系统所能存储的数据量,如PR2。
PR2:系统应该能够存储至少10万条销售记录。
③ 吞吐量(throughput);系统在连续的时间内完成的事务数量,如PR3。
PR3:解释器每分钟应该至少解析5 000条没有错误的语句。
④ 负载(load):系统可以承载的并发工作量,如PR4。
PR4:系统应该允许200个用户同时进行正常的工作。
⑤ 实时性(time-critical):严格的实时要求,如PR5。
PR5:监测到病人异常后,监控器必须在0.5 s内发岀警报。
性能需求的定义要适合于运行环境。过于宽松的性能要求会带来用户的不满,过于苛刻的性能要求会给系统的设计造成不必要的负担,所以给出一个合适的量化目标是非常关键的,但同 时也是非常困难的。更加常见的方法是在限定性能目标的同时给出一定的灵活性(如PR6)或 者给出多个不同层次的目标要求(如PR7)。
PR6:98%的査询不能超过10 s。
PR7:(最低标准)在200个用户并发时,系统不能崩溃;
(一般标准)在200个用户并发时,系统应该在80%的时间内能正常工作;
(理想标准)在200个用户并发时,系统应该能保持正常的工作状态。
将性能需求划分为独立的类别,文档化为独立的部分,是因为它有其他类别需求都不具备的动态性一理论上说,只有开发完成并实际运行系统,才能确定软件系统的性能。实际工作中,软件体系结构师、系统工程师等人员需要特别关注性能需求,必要时需要专门进行模拟。
质量属性
质量属性的概念
在软件系统的开发和使用过程中,人们很自然地关注系统的功能,它是系统能够为用户提供帮助的第一要素。但成功的软件系统除了满足功能需求之外,还需要满足更多的要求,如易于使用和少出错等。
功能需求是用户对软件系统的显式要求,用户在软件系统创建之前就可以清晰地向开发者表达这种要求。而非功能需求属于隐式要求,用户在软件系统创建之前无法清晰地告诉开发者他们希望该系统具备什么样的非功能性特征。但是在软件系统投入使用之后,他们却可以快速判断出软件系统的哪一部分非功能需求不满足他们的条件。例如,在市场买一双鞋子时,对于鞋子功能(休闲、跑步还是踢足球)的要求是显式的,但是对鞋底是否会脱胶、鞋面坚韧度等特性的要求就是隐式的,虽然不会有明文规定鞋底不能脱胶,但是一旦脱胶就会被认为是鞋子质量不合格。一般认为,具备职业素质的人员能够在用户不提及的情况下认识到用户的隐式要求,否则该人员就是不合格的。
成功的软件系统必须满足显式的及隐含的各种要求。系统为满足显式的及隐含的要求而需要具备的要素称为质量。
为了度量一个系统的质量,人们通常会选用系统的某些质量要素进行量化处理,建立质量特征,这些特征称为质量属性。
需要注意的是质量属性需求包含性能需求,只是性能需求比较特殊,所以被独立为单独的类型。
实际工作中,软件体系结构师会比较关心质量需求,因为妥善解决质量问题是软件体系结构师的主要工作。
质量模型
为了更好地根据质量属性描述和评价系统的整体质量,人们从很多质量属性的定义中选择了一些能够相互配合、相互联系的特征集,它们被称为质量模型。
质量属性的重要性
质量属性应该和功能需求一样得到足够的重视。真实的现实系统中,在决定系统的成功或 失败的因素中,满足非功能属性往往比满足功能需求更为重要°
质量属性对设计的影响很大。在软件设计中对任何指定的功能都会有多种可选的方案,不同的方案选择产生不同的设计结果。设计方案的质量因素往往包含很多不同的质量属性,而且不同的质量属性之间互有折中(如提高可移植性往往会导致效率降低,很难会岀现某一个设计方案的质量属性完全优于其他方案的情况。因此,软件设计必须根据需求的质量属性在多种方案中选择一个最优的方案。如果不存在事先定义好的质量属性需求,设计方案的选择将完全没有依据,结果就很有可能导致软件不被用户接受。
对于一个已经完成的设计,如果需要修改其功能,则需要对设计进行一定的调整或拓展。但如果需要修改其质量属性要求,在复杂的情况下就可能会需要重新进行设计方案的选择,受到的影响就是整个设计而不再仅仅局限于其某个部分。所以,在设计开始之初就确定质量属性要求非常重要,而且对越复杂的系统越为重要。
质量属性需求的开发
虽然用户会在和需求工程师交流的过程中表达一些和质量属性相关的想法,但因为他们并不了解软件系统的开发过程,也就无从判断哪些质量属性会在怎样的程度上给设计带来多大的影响,也无法将他们对软件系统的质量要求细化成一组组可量化的质量属性,所以一般来说,他们并不能明确地提出对产品质量的期望。
[Chung 2000]认为,在用户的叙述中质量属性大多是和功能需求联系在一起的,因此为了发现用户对质量属性的要求,需求工程师需要对照软件的质量属性检査每一项功能需求,尽力去判断质量属性存在的可能性;对于一些不和任何功能需求相联系的全局性质量属性,需求工程师要 在遇到特定的实例时意识到它们的存在。[Cysneiros 2001]通过实践还发现,用户在描述中使用的形容词和副词通常意味着质量属性的存在。
在发现质量属性后,要想了解用户的真正想法,需求工程师还需要和用户以及开发人员一起 从多个角度进行质量的定义。进行质量属性的定义时,应当将其与相联系的功能需求关联起来。不能和功能需求建立联系的全局性质量属性应该统一进行处理。
常见的质量属性需求
(1) 可靠性(reliability)
可靠性是指在规定时间间隔内和规定条件下,系统或部件执行所要求功能的能力。
(2)可用性(availability)
可用性指软件系统在投入使用时可操作和可访问的程度,或能实现其指定系统功能的概率。
(3) 安全性(security)
安全性是指软件阻止对其程序和数据进行未授权访问的能力,未授权的访问可能是有意的,也可能是无意的。
(4) 可维护性(maintainability)
可维护性指为排除故障、改进质量或适应环境变化而修改软件系统或部件的容易程度,包括可修改性(modifiability)和可扩展性(extensibility)。
(5 )可移植性(portability)
可移植性指系统或部件能从一种硬件或软件环境转换至另外一种环境的特性。
(6)易用性(usability)
易用性指与用户使用软件所花费的努力及其对使用的评价相关的特性。
[Vara 2011]在调査中让调査者分别列举出最为常见的5个质量属性需求以及最为重要的 质量属性,最为常见的质量属性是:易用性、可维护性、性能、 可靠性和灵活性。
对外接口
对系统之间的软硬件接口需要说明以下内容:
•接口的用途;
•接口的输入输出;
•数据格式;
•命令格式;
・异常处理要求。
约束
常见的约束主要有以下几种。
① 系统开发及运行的环境,包括目标计算机、操作系统、网络环境、编程语言和数据库管理系统等。
② 问题域内的相关标准,包括法律法规、行业协定和企业规章等。
③ 商业规则。用户在任务执行中的一些潜在规则也会限制开发人员设计和构建系统的选择范围。
④ 社会性因素。文化、信仰等社会性因素。
1.完备性
2.正确性
3.可行性
4.必要性
5.无歧义
6.可验证
需求获取:在需求获取中,需求工程师通常需要执行的任务包括以下几方面。
课本编写的很准确很好,目录的标识也很清晰。但觉得理论的叙述会偏多一些,如果可以适当地添加一些例子或者图示,更生动些会更好。
《需求工程——软件建模与分析》
[Jackson 1995b] JACKSON M. The world and the machine, a keynote address at ICSE- 17. Proceedings of ICSE- 17. ACM Press, 1995.
1 IEEE 1990] IEEE Std 610.12- 1990. IEEE Standard Glossary of Software Engineering Terminology. Institute of Electrical and Electronics Engineering, Inc., 1990.
[IEEE 1998] IEEE Std 830- 1998. IEEE Recommended Practice for Software Requirements Specifications. Institute of Electrical and Electronics Engineering, Inc., 1998.
[Chung 2000 ] CHUNG L, NIXON B A, YU E, et al. Non - functional requirements in software engineering. Kluwer, 2000.
[Cysneiros 2001 ] CYSNEIROS L M, LEITE J C S P, NETO J S M. A framework for integrating non- functional requirements into conceptual models. Requirements Engineering Journal, 2001, 6(2).
[Vara 2011] VARA J L, WNUK K, SVENSSON R B,et al. An empirical study on the importance of quality requirements in industry. 23rd International Conference on Software Engineering and Knowledge Engineering (SEKE 2011), 2011111111111111111