搞清楚了 “要解决什么问题”!
为什么要设计该系统?
系统由谁使用?
系统要做什么?
系统涉及哪些信息?
对解决方案有何额外限制?
如何使用该系统?
质量需达到何种程度?
设备放在哪?
单节点还是多节点?
是否对环境有要求?温度、湿度、电磁干扰等
系统规模有何限制?
电源、供电或空调有何限制?
是否重用已有系统的构件?对编程语言的要求
输入是来自一个还是多个其他系统?
输出是来自一个还是多个其他系统?
输入、输出格式是否预定义?
谁使用系统?
几类用户?
每类用户技术水平如何?
资源、材料
系统构造需要哪些人员、技能
多少文档
在线还是本地?电子还是纸质
读者有哪些?
标准
好的需求是可以度量的,能给出项目成功的必要条件。
单个需求项目的质量:
准确、正确、明确、可行、可证
整个需求集合的质量:
现实、精确、全面、一致
产品设计目标不明确
干系人参与不足
干系人之间缺少共识
画蛇添足
需求快速变化
变更管理不足
需求分析不足
目标:主动与干系人协调工作,找出他们的需求,识别潜在的冲突,磋商解决矛盾,定义系统范围与边界。
好处:系统信息及内容的丰富、系统信息质量的提升、系统生产率提升、客户对系统理解加深、与客户达成共识、客户更希望系统成功、增强成功信心、共同确定系统边界、需求质量提升、提高团队整体性。
对现有业务过程的分析有助于识别业务问题并加以改进:
组织规章制度为我们提供了一个客观的、可参依据
用户手册、数据样本、界面描述、报告样本、截屏截图
常见的需求获取方法包括用户访谈、问卷调查、釆样、情节串联板、联合需求计划、文档分析、头脑风暴、原型化方法、建模方法、需求讨论会等。
人少但懂得多,最好有专家在。
1)技巧
2)访谈过程
明确访谈的目的
通过访谈获得什么信息?什么时候目的达到了?
设计访谈提纲
界定目标人群
邀请访谈用户
进行用户访谈
轻松开场、挖掘、把控
整理访谈数据
反馈讨论、管理输出
3)访谈注意事项
避免一组固定的问题;
优先关注用户行为背后的原因;
避免让用户成为设计师;
避免讨论技术细节;
避免诱导性问题;
鼓励讲故事;
避免问无法回答的问题,比如如何系鞋带;
避免问基于隐含知识的问题,以及脱离了环境和上下文的问题;
注意面谈者的态度也可能产生有偏见的回答。
不同时间、不同地点、多人参与、分析师观察、验证有限次面谈得出的结论、针对特定问题
1)优点
可快速获得大量反馈
可远程执行
可搜索关于态度、信念及特性的信息
2)缺点
简单的分类导致对上下文的考虑较少
留给用户自由表达其需要的空间较小
3)注意事项
选择样本时可能存在偏见
自愿的问卷回答者可能存在偏见
样本规模太小
自由发挥问题难于分析
对答案有诱导性的提问
问题的妥当性
含糊的问题
在一个房间中聚集3~20个干系人
每个人都将自己的观点大声说出来
群体的答案往往比个体好
1)什么时候采用群体诱导技术?
当很多人各自知道关于整体的一小部分时
当人们需要彼此交互来得到一个最优的答案时
当你能把人们聚集在一起时
需要匿名?采用一些工具
在不同的地方?采用一些工具
对于用户来说,可能不需培训,客户直接写出他所期望的与系统交互的流程。
软件产品设计过程中,演化型产品设计和全新型产品设计。
而基于竞争性需求分析的框架,是对新产品的可行性进行评估。
产品已经有用户在用,相对用户界面做些改进,但又不知道用户是否会欢迎时,可以配置A/B 测试使用环境。
在线对用户的访问数据进行分析和统计,得到对新产品设计的启示。
获取界面需求
原型法、情景法与建模法比较有效
获取业务逻辑需求
观察法、亲身实践、面谈和情景法有利于对业务逻辑的精确理解和描述
对未来系统的信息和数据结构进行获取
面谈和现有系统分析是最为有效的
要建立完整精确的模型很困难,建立完整的原型也不现实,因此,要根据需要和客观条件灵活运用。
目标:识别系统需求,设计软件体系结构,建立需求与体系结构组件间的关系,在体系结构设计实现过程中进一步识别矛盾冲突,并通过干系人之间的协调磋商解决问题。
实质:概念建模–选择常用的建模语言,进行功能建模和信息建模
关键:体系结构设计与需求分配
结构化分析方法是最为常用的需求分析方法,着眼于数据流,自顶向下,逐层分解,建立系统的处理流程,建立系统的逻辑模型。核心是建立数据字典。
结构指的是系统内各个组成要素的相互联系;
主要工具:数据流图(数据和处理)、数据字典、判定树、判定表;
三个层次模型为:数据模型(E-R图)、功能模型(数据流图)、行为模型(状态转换图)
建模的目标
用例建模可以很好的描述系统的功能性需求(谁,做什么),便于理解系统所提供的服务,通过用例模型有利于验证和确认需求,并辅助开发。
用例建模形式:文本描述 + 图形辅助
1)文本描述
・用例模型概要
(1)简要介绍系统的功能与意义
(2)列出参与者列表
(3)用例列表
・用例规约描述
详细描述用例中会发生什么操作或事件,涉及的非功能性需求和规则约束等,也就是要对每个用例事件流进行描述
2)图形辅助
(1)用例图:用来显示一组用例、参与者以及他们之间的关系
从数据传递和加工的角度,利用图形符号通过逐层细分描述系统内各个部件的功能和数据在它们之间传递的情况,来说明系统所完成的功能;
复杂的数据流程图,要分层去画,思路更清晰,更容易理解和阅读!!!
业务流程图结合泳道图,可以将角色和业务流程相结合,流程更清晰易懂。
类的划分,哪些属性和哪些方法绑定到同一个类,根据数据流图等进行分析。
同一类型放到一个包里面
通过描述系统的状态和引起系统状态转换的事件,来表示系统的行为,指出作为特定事件的结果将执行哪些动作(例如,处理数据等)。
文档需要有逻辑组织结构
如:参照IEEE 的模板
典型的组织形式包括
(1)按系统能够响应的各种外部环境情况来组织
如飞机着陆管理系统,风速、燃料余量、跑道长度等来组织需求的撰写
(2)按系统特征来组织
如电话系统,呼叫转移、电话屏蔽等
(3) 按系统的响应方式来组织
如工资管理系统,工资条生成请求、成本计算、打印税单等
(4)按所管理的外部数据对象来组织
如图书管理系统,按所管理的书籍类型来组织需求的撰写
(5)按用户类型来组织
如项目管理系统,按照经理人、技术人员、管理人员来组织
(6)按软件的工作模式来组织
如对文档编辑器,根据文档编辑时的页面布局,分为大纲模式、分页模式、普通文档编辑模式等
(7) 按子系统的划分来组织
如飞行器管理系统,命令控制子系统、数据处理子系统、通信子系统、设备管理子系统等
文档的主要内容
(1)范围
(2)引用文件
(3)需求
(4)合格性规定
(5)需求可追踪性
(6)尚未解决的问题
(7)注释
(8)附录
考虑以下两个具体项目场景:
1)小项目,1名程序员,2个月的开发周期
程序员直接和用户对话,写了两页纸的备忘录
2)大型项目,50名程序员,2年的开发周期
专门的团队进行需求建模与分析,撰写了500页的需求规格说明
项目B需要根据规格说明书中的功能点、工作量来分配人员和时间,对任务进行规划,是很多后续工作的参照依据。
团队人数较多,后续的测试人员、管理人员都需要随时参考,对项目进度进行控制,对项目质量进行把握,整个团队唯一的共同参考媒介。
撰写用户手册作为一种性价比高的一箭双雕的方法,同时获得SRS和用户手册
用户手册作为SRS对于和用户交互的系统是比较有效的,这样系统由交互驱动
好的手册描述了所有用例的所有场景
但是,用户手册并没有描述
用户手册大纲
需求规格说明要覆盖软件产品的功能、外部接口、性能、质量属性、设计约束
不应该包括项目开发计划、产品的质量保证计划、具体的设计方案
使用需求数据库时,优先通过数据库,从新生成需求规格说明
从整体上描述系统的外部接口,相关的用户,软硬件平台以及操作和节点上的一些要求
对系统的功能性和非功能性需求给出详细的描述
重要
优点:
模板提高效率
在有模板的情况下,面对一个完整的大纲,不容易遗漏重要的信息
缺点:
并非对所有的系统,模板的章节设计都是类似的
如果仅仅为了满足标准,而填写模板的所有章节,在不相关的章节,会加入一些没有意义的内容
读者很难将这些无意义的文字和真正的需求粉卡
获取到原始需求之后,我们应该本着随时准备迎接需求变化的心态
注意:
统一名词
任何缩写第一次出现时,必须用全称,之后给出缩写称呼