软件需求的问题

本文探讨了软件工程中用例技术的应用现状及其常见的误解与误用,提出了正确的用例设计原则,并介绍了如何在现有系统升级中应用用例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

十年来国内软件工程方面的进展有目共睹,在软件需求方面,我们看到在大多数组织中已经建立起了一级或两级需求体系(业务需求和软件需求);在某些组织中,需求分析员已经成为一种专门的职位;甚至在某个大型国有商业银行已经成立一个专门的部门来负责需求分析工作。应该来说,这是一些非常可喜的进步。
 
然而,目前大多数的项目参与者都对需求工程的现状不满,这又是为什么呢?首先,我们必须承认市场快速变化而带来的需求变化的确对项目带来了很大的挑战,为此许多项目应用了迭代化开发来应对这样的变化。但根据我们对客户的访谈,更多的需求变化是由于需求沟通不力造成的,也就是说,参与需求沟通的各方并没有达成真正的共识,这又是什么原因呢?根据我们的分析,这主要是由于缺少一个可以被各方真正理解和沟通、并可以被逐步精化的需求体系。
 
目前,大多数用户采用的需求体系基本上是沿袭了结构化分析的文档体系(包括数据流图,数据字典等)。这种文档体系起源于70年代,当时,软件的主要应用还是科学计算或信息处理,理解需求的人往往也受过结构化分析的相关教育,然而这些内容对今天的大多说业务人员或最终用户而言就是很难理解的了。这里的主要问题是 分析代替了需求。为了解决这个问题,有的组织引入了非形式化、非结构化的业务需求,然而却很难在两种需求之间建立明确的对应关系,从而出现了业务人员/最终用户认可业务需求,但开发人员觉得不够详细;开发人员认可软件需求,但业务人员/最终用户无法给与确认。
 
那么,我们如何解决这一软件需求的困境呢?

首先,让我们仔细研究一下用例的定义:

一个用例抽象了目标系统在现实中将执行的一组场景(每个场景由一系列动作组成);这些场景会产生一个对某个Actor有价值的、可观测的结果;

 

在这个定义中,我们强调了两件事情:一、用例是被从现实的场景中抽象出来的,而不是被随便发明出来的;二、每个用例(场景)应能提供完整的商业价值。在未来的博文里会介绍这两条会如何帮助我们避免对用例的误用。

 

用例的优势在于它天生是黑盒的,它用自然语言抽象了用户和目标系统的交互,避免了混入分析、设计和实现细节,以保证用例可以被不懂具体技术的业务及测试人员所真正理解。同时,需求分析员又可以方便地通过用例分析(use case analysis)(即用分析类来试图在理想方式下实现用例),将需求体系精华成分析模型。在这一过程中,需求分析员可以更进一步地完善基于用例的需求体系,而不必担心分析模型会污染需求,从而实现需求与分析的分离及有效互动。

 

最后,我们必须指出,基于用例的需求管理体系中不仅仅包含用例,它还应该包括涉众请求,特性列表,前景文档,补充规约,词汇表等等。

 

用例其实是Ivar在许多年前发明的老技术了,现在被很多人所采用,而被更多人误用,下面的文章让我们看看一些对用例的典型的误解和误用

 

用例是一个门槛很低的技术,任何人都可以随便画几个小人和几个椭圆,然后向全世界宣称我在用用例进行需求建模了,但是好像也没有真正解决我的问题。在这种情况下,用例技术很可能被误用了。在对用例不同类型的误用之中,最严重、最普遍的莫过于利用用例来进行功能分解了。刚在为了偷懒,想找张现成的错误使用用例的例子,结果找的了2001Kurt写的在这方面的文章以及最近一位老兄在优快云上给出的翻译(已经收藏在我的网摘里)。Kurt对这个问题的阐述已经相当清楚了,我也就不多写了,大家去看我的网摘或原文吧!


作为总结,可以记住这样两句话:

1、Login往往不是一个好的用例;

2、用例是不会互相调用的;

 

英文原文:

http://www-128.ibm.com/developerworks/rational/library/content/RationalEdge/dec00/WhyUseCasesAreNotFunctionsDec00.pdf

 

中文翻译:

http://blog.youkuaiyun.com/soaringbird/archive/2007/03/28/1544093.aspx

最近在与用户的沟通过程中,发现用户经常会认为用例是一种基于图形描述或UML的方法,从而质疑用例是否能够有足够的描述能力,或者用例是否易于被业务人员理解。其实,这是对用例的另一种典型的误解。

 

在用例模型中,的确会用到一些UML的图符(一个小人代表Actor,一个椭圆代表Use Case,等等),但这些图符是非常容易理解的。而且用例的主要信息是在需求规约当中,用例模型传递的信息可能只占所有相关需求信息的5%

 

所以,我建议,大家可以粗略地认为用例与UML基本无关,它主要是一种基于文本的结构化地书写需求的方式。

用例的粒度问题一直是困扰着需求分析员的常见问题,对于这个问题,抱歉,没有银弹,我只能给出一些解决这个问题的基本原则:

1.         控制用例的总体数量:一般来说,一个相当复杂的系统的用例数量可能在30-50个之间,如果一个系统的用例数量大大超过了这一范围,那就该看看是不是陷入了功能分解的误区;

2.         高内聚、低耦合:用例是一种结构化写作需求的技术,用例是被从现实的场景中抽象出来的。如果这些场景有紧密的联系(高内聚),那用用例技术来组织它们则可以复用这些场景中的步骤描述,从而达到事倍功半的效果;

3.         写写看:很多时候在初步规划用例模型的阶段,有时很难判断一个用例的粒度是否合适,不要执迷于一次获得一个完美的用例模型和用例粒度。不妨先得出一个初稿,然后写写用例,看看是不是符合高内聚、低耦合的原则,实际上在写用例的过程中,用例模型往往是需要不断进行调整的;

4.         避免功能分解:功能分解是正确使用用例技术的最大敌人,很多用例粒度的讨论其实都是功能分解的思想在作怪。

目前大多数用户的开发都是对现有系统的升级和改造,在这样的情况下还能使用用例技术吗?很幸运答案是肯定的,你可以按照以下步骤进行:

1.         确定系统边界:通过标识Actor来定义系统边界;

2.         重构用例模型:简要地捕获和描述现有系统的用例模型;

3.         扩展用例模型补充用例规约:根据系统的升级和改造要求,增加新的用例或对已有用例进行扩展;在对现有用例进行扩展之前,则需要补充用例的基本事件流和涉及到的备选流,在以它们为基础来对描述需要的新行为;

 

这样,就可以在对现有系统的改造过程中,逐步地重构整个系统的用例模型和用例描述。

本书讲述了软件开发中一个至关重要的问题软件需求问题软件开发人员及用户往往容易忽略信息沟通,导致软件开发出来后,不能很好地满足用户的需要。而返工则不仅在技术上给开发人员带来巨大的麻烦,而且软件性能深受影响且造成人力、物力的浪费。所以在开发周期早期提高项目需求分析的质量,减少重复劳动,通过控制项目范围的扩展及需求变更来达到按计划完成预定目标是当前我国软件业急需解决的问题—这也是本书讨论的主要内容。 目 录 译者序 前言 第一部分 软件需求:是什么和为什么 第1章 基本的软件需求 1 1.1 软件需求的定义 2 1.1.1 一些关于“需求”的解释 2 1.1.2 需求的层次 3 1.2 每个项目都有需求 4 1.3 什么情况将会导致好的群体发生不合格 的需求说明 5 1.4 高质量的需求过程带来的好处 7 1.5 优秀需求具有的特性 7 1.5.1 需求说明的特征 7 1.5.2 需求规格说明的特点 8 1.6 需求的开发和管理 9 第2章 客户的需求观 11 2.1 谁是客户 12 2.2 客户与开发人员之间的合作关系 12 2.2.1 软件客户需求权利书 13 2.2.2 软件客户需求义务书 15 2..3 “签约”意味着什么 17 第3章 需求工程的推荐方法 18 3.1 知识技能 19 3.2 需求获取 20 3.3 需求分析 21 3.4 需求规格说明 22 3.5 需求验证 23 3.6 需求管理 23 3.7 项目管理 24 第4章 改进需求过程 26 4.1 需求与其他项目过程的联系 26 4.2 软件需求对其他项目风险承担者的影响 27 4.3 软件过程改进的基础 28 4.4 过程改进周期 29 4.4.1 评估当前采用的方法 29 4.4.2 制定改进活动计划 30 4.4.3 建立、实验和实施新的过程 31 4.4.4 评估结果 32 4.5 需求过程的积累材料 33 4.5.1 需求开发过程的积累材料 34 4.5.2 需求管理过程的积累材料 34 4.6 需求过程改进路标 35 第5章 软件需求与风险管理 37 5.1 软件风险管理基础 38 5.1.1 风险管理的要素 38 5.1.2 编写项目风险文档 39 5.1.3 制定风险管理计划 40 5.2 与需求有关的风险 41 5.2.1 需求获取 41 5.2.2 需求分析 42 5.2.3 需求规格说明 42 5.2.4 需求验证 43 5.2.5 需求管理 43 5.3 风险管理是你的好助手 43 第二部分 软件需求工程 第6章 建立项目视图与范围 45 6.1 通过业务需求确定项目视图 45 6.2 项目视图和范围的文档 46 6.3 关联图 50 6.4 把注意力始终集中在项目的范围上 51 第7章 寻找客户的需求 52 7.1 需求的来源 52 7.2 用户类 53 7.3 寻找用户代表 54 7.4 产品的代表者 55 7.4.1 寻求产品代表者 56 7.4.2 产品代表者的期望 56 7.4.3 多个产品代表者 57 7.5 谁作出决策 58 第8章 聆听客户的需求 60 8.1 需求获取的指导方针 60 8.2 基于使用实例的方法 62 8.2.1 使用实例和用法说明 62 8.2.2 确定使用实例并编写使用实例文档 64 8.2.3 使用实例和功能需求 67 8.2.4 使用实例的益处 67 8.2.5 避免使用实例陷阱 68 8.3 对客户输入进行分类 69 8.4 需求获取中的注意事项 70 8.5 如何知道你何时完成需求的获取 71 第9章 编写需求文档 72 9.1 软件需求规格说明 72 9.1.1 标识需求 73 9.1.2 处理不完整性 74 9.1.3 用户界面和软件需求规格说明 74 9.2 软件需求规格说明模板 75 9.3 编写需求文档的原则 79 9.4 需求示例的改进前后 81 9.5 数据字典 83 第10章 需求的图形化分析 85 10.1 需求建模 85 10.2 从客户需求到分析模型 86 10.3 数据流图 87 10.4 实体联系图 88 10.5 状态转换图 90 10.6 对话图 92 10.7 类图 94 10.8 最后的提醒 96 第11章 软件的质量属性 97 11.1 非功能需求 97 11.2 质量属性 97 11.3 定义质量属性 98 11.3.1 对用户重要的属性 99 11.3.2 对开发者重要的属性 100 11.4 属性的取舍 101 第12章 通过原型法减少项目风险 103 12.1 原型是“什么”和“为什么”要原型 103 12.2 水平和垂直的原型 103 12.3 抛弃型原型或进化型原型 104 12.4 书面原型和电子原型 106 12.5 原型评价 107 12.6 原型法的最大风险 108 12.7 原型法成功的因素 108 第13章 设定需求优先级 110 13.1 为什么要设定需求的优先级 110 13.2 不同角色的人处理优先级 111 13.3 设定优先级的规模 111 13.4 基于价值、费用和风险的优先级设定 112 第14章 需求质量验证 116 14.1 需求评审 117 14.1.1 审查过程 118 14.1.2 需求评审的困难 122 14.2 测试需求 124 第15章 需求开发向设计规划的转化 128 15.1 从需求到项目规划 128 15.1.1 需求和进度安排 128 15.1.2 需求和预估 129 15.2 从需求到设计和编码 130 15.3 从需求到测试 131 15.4 从需求到成功 131 第三部分 软件需求管理 第16章 需求管理的原则与实现 133 16.1 需求管理和过程能力成熟度模型 133 16.2 需求管理步骤 135 16.3 需求规格说明的版本控制 135 16.4 需求属性 136 16.5 度量需求管理的效果 138 第17章 管理变更请求 139 17.1 控制项目范围的扩展 139 17.2 变更控制过程 140 17.2.1 变更控制策略 140 17.2.2 变更控制步骤 141 17.2.3 变更控制工具 144 17.3 变更控制委员会 145 17.3.1 变更控制委员会的组成 145 17.3.2 变更控制委员会总则 145 17.4 测量变更活动 146 第18章 需求中的联系链 149 18.1 需求跟踪 149 18.1.1 需求跟踪动机 151 18.1.2 需求跟踪能力矩阵 151 18.1.3 需求跟踪能力工具 153 18.1.4 需求跟踪能力过程 153 18.1.5 需求跟踪能力可行吗,必要吗? 154 18.2 变更需求代价:影响分析 154 18.2.1 影响分析过程 155 18.2.2 影响分析报告模板 157 第19章 需求管理工具 158 19.1 使用需求管理工具的益处 159 19.2 商业需求管理工具 160 19.3 实现需求管理自动化 161 附录 当前需求实践的自我评估 163 参考文献 167 后记 171
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值