软件需求捕获过程

本文为学习笔记

目录

基本概念与软件需求概述

定义

通俗定义

待开发软件产品的目标用户对该产品的功能,性能,设计约束和其他方面期望和要求

其他经典定义
  1. Rational: (正在构建的)系统必须符合的条件或具备的功能
  2. Merlin Dorfman 和 Richard H. Thayer :
    用户解决某一问题或达到某一目标所需的软件功能
    系统或系统构件为了满足合同、规约、标准或其他正式实行的文档而必须满足或具备的软件功能

定义剖析

  • 需求与问题紧密相关,关注用户的期望,要求和需要
  • 软件需求服务于目标用户(软件最终用户、用户方负责人、用户代表),必须是用户所需的
  • 不是所有方面的要求都是软件需求,软件需求必需对用户有价值和意义
  • 软件需求表现形式
    • 功能性需求:eg. 通过ISBN号查询图书
    • 非功能性需求:性能、安全、外观等
    • 限制条件:技术、平台等

作用与解决的问题

作用

在用户意图与软件设计中架起桥梁,将现实元素转化为软件元素

理解需求:  (当前系统)-->(物理模型)-->(逻辑模型) 
表达需求: (目标系统)<--(物理模型)<--(逻辑模型)

任务

借助当前系统的逻辑模型导出目标系统的逻辑模型,解决目标系统的 “做什么” 的问题。

需求捕获在需求分析过程的位置

可行性研究 (需求获取) (需求分析) (系统模型) (需求文档)
                               (需求描述) (有效性验证) (需求文档)
                                         (用户需求与系统需求) (需求文档)
  • 需求捕获为需求分析提供原材料
  • 需求捕获的有效性和完整性直接影响需求分析的产出质量
  • 需求捕获活动出现大的误差将是方向性的重大错误!!!

获取软件需求

重要性

  • 软件开发的基础和前提 (有明确需求才能有针对的开发)
  • 制定软件开发计划的基础(知道做什么 -> 确定工作了 -> 制定计划)
  • 最终目标软件系统验收的标准 (基于明确需求进行验收)

复杂性

(ps. -> 之后的内容为个人的理解)

  • 系统复杂和庞大 (如何得到需求并描述清楚) -> 听描述人员说需求,自己理需求,列提纲画流程图确定理解?
  • 片面 不完全 (如何保证得到所有的软件需求) -> 与目标用户多次确认,思考业务流,看看是否能走通
  • 模糊,不准确(如何保证把需求说清楚和准确) -> 与开发人员多次有效沟通,确定自己全面理解了需求,再图文结合准确表达
  • 歧义,不一致(如何保证所描述的需求是不矛盾的) -> 自己检查文档是否有冲突的地方,与客户和开发人员结合确定需求不冲突
  • 及时性(当需求变更时,如何让相关人员都知道需求已经变更) -> 沟通用户与开发, 要有有效的通知沟通方式,有书面文档记录
  • 软件需求变动带来的影响 (波动性(横向)/放大性(纵向))

如何应对需求的复杂性

  • 过程和规范
    • 需求过程
      • 瀑布式: 强调系统开发过程需有完整的规划、分析、设计、测试及文件等管理与控制
      • 迭代: 每次只设计和实现这个产品的一部分,逐步实现系统
      • 螺旋: 定义最重要的功能,实现它,然后听取客户的意见,之后再进入到下一个阶段。如此不断轮回重复
      • 敏捷: 作为一个整体工作; 按短迭代周期工作; 每次迭代交付一些成果;关注业务优先级; 检查与调整。
    • 规范:文档模板
  • 技术层面-方法、技术和工具
    • 方法:结构化分析(细化分解问题、化繁为简)、OO
    • 技术:抽象、建模、原型、数据流图……
    • 工具:UML、Rose、Visio、MindManager、Excel、CC……
  • 管理层面-需求管理配置库
    • 对需求分析中, 人、活动和产品进行管理,使之可追溯

优秀需求具有的特性

  • 完整性
  • 正确性
  • 可行性
  • 必要性
  • 划分优先级
  • 无二义性
  • 可验证性

软件需求捕获过程

过程及结果

过程

[理解问题域与目标] [需求捕获准备] [需求交流] [整理需求文档] [需求捕获收尾]

成果

  • 前景文档(项目视图)
    • 用户问题与目标定义
  • 用户需求采集文档
    • 功能性需求
    • 非功能性需求
    • 限制条件

需求捕获时点

  • 软件产品研发启动阶段:需求捕获来自用户问题域(*)
  • 软件产品优化提升阶段:需求捕获来自软件研发各环节的反馈
  • 用户需求从来都不会冻结,需求捕获工作始终持续

理解问题域和目标

问题域: 问题 + 问题场景

  • 当前用户真正面临的问题是什么?
  • 当前用户问题发生的场景是什么?
  • 除非你已经理解它,否则不要修改它
  • 定义问题的方法:鱼骨图、直方图
    • 鱼骨图:是一种发现问题“根本原因”的方法; 分为问题性,原因性,对策性
    • 直方图:是一种对数据分布情况的图形表示,是一种二维统计图表,它的两个坐标分别是统计样本和该样本对应的某个属性的度量

目标

用户期待达到的效果

  • 问题域与目标与用户达成共识(项目章程、合同)
  • 一切项目需求始于问题,需求以问题或目标为核心来展开收集
  • 软件需求是对“问题”以软件的方式进行求解的过程,即软件做什么或具备什么属性能解决问题

软件需求捕获准备

  • 基础储备
    • 掌握基本业务术语(交流语言)
    • 掌握行业基础业务系统(如CTAIS)-基础业务知识
      • 以软件为学习支持,熟练掌握软件业务操作进而理解掌握业务
    • 了解用户业务范围和业务系统现状
      • 文档考古、实地观摩、用户学徒
  • 交流准备
    • 针对问题域的项目视图和需求调研提纲
    • 需求团队
  • 两个意识
    • 用户站位意识,站在用户的角度来看待和思考问题
    • 倾听的意识(辅助积极询问、引导和反馈)

需求团队

团队组成

  • 具有编程背景的人,以获得描述所要求的准确性和精度
  • 熟悉系统业务规则的人
  • 了解系统具有决策权的人(能够决定放弃和保留)
  • 如何应用的人(熟知在实际中如何使用系统的人)

人员素质

  • 知识丰富
  • 尽职尽责,坚定不移,态度积极
  • 出色的沟通能力,不卑不亢
  • 尊重他人的观点
  • 丰富的判断力和一个实用可行的方法

调研准备

切入点

[相邻系统] (系统参与者有哪些)  -->  [业务事件](系统为参与者提供哪些服务) --> [业务用例](每个服务的处理环节业务规则如何规定)

概念

  • 业务上下范围:由用户关注的问题域圈定
  • 相邻系统:为待建系统提供数据和服务的系统,可能是人、组织或其他软件
  • 业务事件:外部的服务请求(如在ATM执行转帐请求),面向用户的
  • 业务用例:响应业务事件的一系列执行步骤

方法

  • 通过数据流关系找到相邻系统,定义业务事件和业务实体(DFD)
    • 绝大多数的应用系统本质上一个信息处理系统,系统的功能主要与数据处理相关
    • 相邻系统是数据的生产者或者消费者
    • 每个数据状态的变化可能与一个业务事件相关,用”无事件”来发现例外或遗漏事件
    • 通过业务事件定义业务用例
  • 找到业务事件的真正起源,考察业务用例,定义需求边界
  • 在业务用例中挖掘需求
概念实例

提纲

系统的用户对象是谁?
用户的组织架构?
每个用户和相邻系统触发的业务事件?
每个业务事件处理流程?相关业务实体数据
系统与现有其他的关系?(数据交换、业务协同)
系统的数据存储要求?
需求的非功能需求(安全、性能等)?
系统的约束与限制?
……
准备需求调研文档模板-需求调研内容的结构化

需求采集模板示例

需求采集文档关键项目

业务事件:与谁有关?
描述:业务意义是什么?
理由:解决什么问题?
来源:谁提出的,用于需求追溯
验收标准:明确具体,可能量化,与需求描述有关
冲突:需求关联关系
优先级:开发计划依据
以上项目均与问题域相关

用户交流

  • 交流对象选择
    • 面谈对象与需求涉众相关,需求涉众是需求源泉
    • 面谈对象中要求有能对需求做最终确定的人
    • 面谈对象的组成:典型用户代表业务专家需求仲裁者
  • 关注的问题-达成共识
    • 待建系统所有的相邻系统是否完整?
    • 所有相邻系统触发的业务事件是否完整?
    • 业务事件对应业务用例是否正确?
    • 确定需求边界
  • 交流方式
    • 面谈或会议是最有效的方式,注意倾听,使用辅助工具加强理解
    • 实地参观和实践(用户学徒),体验业务场景
    • 电话交流,适用于对需求的部分细节的交流和确认

用户交流之面谈和会议

  • 循序渐进
    • 首先关心一般性、整体性问题,然后再讨论细节问题,(相邻系统-业务事件-业务用例)
  • 客观、公正、主动、积极
    • 不应限制用户在回答问题过程中自由发挥,理解用户的思维过程
    • 充分沟通,要和用户打成一片,进行充分的合作,建立起良好的合作关系
    • 如果发现多个软件需求相互矛盾,要能找到仲裁人,或者决策人
  • 总结
    • 问题汇总后应能反映软件或其子系统的全貌
    • 能覆盖用户对目标软件或其子系统在功能、行为、性能诸方面要求。
    • 及时反馈交流文档

区分客户需要和客户需求

  • 客户需要(Needs)
    • 一种原始的、割裂的信息
    • 一般以问题解决方案的方式提交需求
    • 信息→(Elicit抽出)→客户需要
    • 形式:会议纪要、客户文档、调研报告、E-Mail
  • 客户需求(Requirements)
    • 一种文档化的、完整的、自洽的信息
    • 通过用户描述(user story)反映《客户(用户)需求说明书》
    • 句式:作为(用户类型),我们希望可以(能力)以便(业务价值)。
例:作为购书者,我们希望可以通过ISBN号码找到一本书,以便更快速地找到正确的书
  • 客户需要中抽象出真正的原始需求
  • 通过客户表面需求理解更深层次需求(去技术化)

引导用户

  • 需求交流比较高的层次,被动转主动,顾问的角色
  • 需求范围的引导:在问题域涉及的业务上下文范围内
  • 业务定义的引导:需求复用、其他行业或应用经验
  • 业务启发的引导:需求复用、其他行业或应用经验
  • 通过原型形式化或启发用户需求(*)
  • 要求具备一定的抽象能力,将不同应用领域的共性总结出来
  • 注意沟通表达方式,尊重用户,不可先入为主

捕获系统划分的派生需求

  • 考虑用户问题域的复杂性,对问题域进行分解子问题域简化问题的有效方法,从软件构造层次,划分为多个子系统
  • 需求捕获分别形成系统级需求或子系统需求
  • 关注派生需求
    • 子系统需求:子需求必须满足,未必对用户有价值的需求
    • 子系统之间接口需求:子需求为完成整体工作,需要与其他子系统通信的需求
  • 派生需求更多是由系统规划设计产生的,用户关心的是系统业务需求价值

创建整理需求采集文档

  • 由于语言描述的多义性,促进需求沟通达成共识的唯一途径将需求文档化
  • 需求采集参照文档模板使用用户理解业务语言来描述,尽可能去技术化,技术要素作为限制条件处理
  • 需求采集文档的作用将用户需求规范化,开发出用户和需求分析设计人员都能理解的文档。

开发客户看得懂的需求

  • 客户看不懂的: 功能, 产品结构,技术语言
  • 客户看得懂的:
    • 界面、报告
    • 用户手册、使用说明书
    • “串联故事”、“活动描述”(用例)
    • 业务语言

需求捕获收尾

  • 用户的问题域和目标可能随时变化调整,需求捕获一直持续
  • 以合同工作说明书的内容作为需求捕获是否完成基准:90%确定
    • 重点审查用户优先级比较高的需求(全部覆盖)
    • 所有的需求是否在问题域范围之内
    • 所有的需求能否支持解决用户问题,达到用户目标
    • 有何风险
  • 需求捕获评审
    • 用户方负责人、项目组确认
  • 产出物
    • 用户需求用例说明书,供需求分析阶段建模使用
    • 建立用户需求基线

需求捕获总结

  • 面向问题和用户,而不是面向技术
  • 主要是做什么,而不是怎么做
  • 考虑需求涉众,对用户群进行分类
  • 同时考虑功能需求和非功能需求
  • 讨论例外情况,把客户的假设解释清楚
  • 需求文档化,设置优先级
  • 需求验收标准量化
  • 及时反馈
  • 注意控制需求范围
  • 合作才能成功

实例演练

需求能力提升

  • 技术工作的熏陶
    • 技术视野和业务视野同样重要
  • 掌握需求分析建模方法、工具、模板
    • 分析方法:
      • DFD, Data Flow Diagram数据流程图,Data Functional Diagram数据功能图
      • SC, 系统结构图
    • 建模方法:UC,DM,……
    • 工具:UML、MindManager…….
    • 积累一套有效的需求文档模板
  • 培养沟通表达能力
  • 要充满热情和兴趣地钻研行业领域知识
    • 需求能力通过行业领域知识才能体现价值
    • 仅仅掌握需求方法论是不够的,不能落地
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容