第15章.需求规格说明主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查1.需求规格说明概述——获取VS分析VS规格说明需求获取目标是得到用户需求——收集需求信息需求分析目标是更深刻的理解用户需求——界定能够让用户满意的解决方案准则需求规格说明目标是定义用户需求——准确描述需求及其解决方案1.需求规格说明概述——需求规格说明活动系统模型系统需求标准模版模版的选择与裁剪需求规格说明文档模版文档写作软件需求规格说明文档模版结构知识知识主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查2.需求规格说明文档——作用更好的传递软件系统的需求信息和解决方案给所有的开发者拓展人们的知识记忆能力作为合同协议的重要部分作为项目开发活动的一个重要依据发现和减少可能的需求错误,减少项目的返工,降低项目的工作量作为有效的智力资产2.需求规格说明文档——忽视的原因交流途径时间压力迭代式开发敏捷非正式的需求规格说明文档16%正式的需求规格说明文档44%语言交流16%文档结合语言的非正式交流24%2.需求规格说明文档——类型业务需求用户需求系统需求项目前景和范围文档需要的特性具体的需求用户需求文档(用例文档)系统需求规格说明文档软件需求规格说明文档硬件需求规格说明文档人机交互文档接口需求规格说明文档软件需求硬件件需求用户界面细化的需求招标签约用户文档开发文档2.需求规格说明文档——类型项目前景和范围文档用户需求文档系统需求规格说明文档软件需求规格说明文档硬件需求规格说明文档接口需求规格说明文档人机交互文档对解决方案的约束需求表达的真实度需求的丰富性和模糊性用户的理解度对非专业读者的可读性系统化和形式化方法的应用问题域解决方案2.需求规格说明文档——内容前景和范围内问题域信息解决方案需求2.需求规格说明文档——作者项目管理者组织安排、提供条件需求工程师负责人、主导人文档写作人员有时会采用,节省需求工程师的时间涉众(用户)验证人2.需求规格说明文档——读者体系结构设计(体系架构师)需求工程(需求工程师)并行开发1(设计人员、程序员)并行开发n(设计人员、程序员)测试计划(测试人员)用户使用手册编写计划(文档编写人员)软件估算与进度安排(项目管理者)软件体系结构软件需求规格说明文档…...2.需求规格说明文档——手段非形式化自然语言限制性文本半形式化结构化文本伪码/结构化英语模型语言图、表…形式化形式化语言数学语言:BNF,Z…主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查3.模版的选择与裁剪——动机优秀的文档结构组织复用:模版选择与裁剪文字写作字词、句法写作技巧3.模版的选择与裁剪标准模版组织模版项目模版项目的软件需求规格说明文档裁剪定制裁剪定制内容写作3.模版的选择与裁剪1.引言1.1目的1.2范围1.3定义、首字母缩写和缩略语1.4参考文献1.5文档组织2.总体描述2.1产品前景2.2产品功能2.3用户特征2.4约束2.5假设和依赖3.详细需求描述3.1对外接口需求3.1.1用户界面3.1.2硬件接口3.1.3软件接口3.1.4通信接口3.2功能需求3.2.1系统特性13.2.1.1特性描述3.2.1.2刺激/响应序列3.2.1.3相关功能需求3.2.1.3.1功能需求1.1…3.2.1.3.n功能需求1.n3.2.2系统特性2…3.2.m系统特性m3.3性能需求3.4约束3.5质量属性3.6其他需求附录索引1.引言1.1目的1.2文档约定1.3读者对象和阅读建议1.4项目范围1.5参考文献2.总体描述2.1产品前景2.2产品特性2.3用户类及其特征2.4运行环境2.5设计和实现上的约束2.6用户文档3.系统特性3.1系统特性X3.x.1描述和优先级3.x.1刺激/响应序列3.x.3功能需求4.对外接口需求4.1用户界面4.2硬件接口4.3软件接口4.4通信接口5.其他非功能需求5.1性能需求5.2安全性需求5.3软件质量属性6.其他需求附录A:术语表附录B:分析模型附录C:待确定问题清单主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查4.文档写作技巧——原则写作是一门艺术没有什么固定的规律有一些效用有限的经验原则文档的组织方式;常见情景的处理;常用的写作技巧;容易出错的地方等。文档化的目标是交流简洁、易读VS严格、准确不要机械的照搬某些标准和规则有没有另外一种更容易理解的表达方式?是否一次性提供了太多的信息?对读者来说什么是重要的,什么是不重要的?是否太抽象了?需不需要举例说明?是否太专业了?需不需要解释原理?会不会引起读者对内容的错误解释?哪些内容有益于读者?有益于哪些读者?文档在整体上是不是过于机械、乏味或者松散?文档枯燥吗?令人厌烦吗?4.文档写作技巧——结构组织所有内容位置得当借鉴和使用标准的文档模版引用或强化,但不重复引用而不是复制强化与重复引言与冗余元文本4.文档写作技巧——表达方式形式依赖于内容根据需要表达的内容,选择合适的表达方式使用系统的表达方式人们倾向于系统的表达方式使用相同的语句格式来描述所有的细节需求。使用列表或者表格来组织独立、并列的信息。使用编号来表达繁杂信息之间的关系,包括顺序关系、嵌套关系和层次关系。4.文档写作技巧——细节描述定义术语表或数据字典术语不一致“方言”问题错误术语和冗余术语避免干扰文本“这一段的意思是…”“上一句话是指…”避免歧义词汇表15-1歧义词汇改进方法可接受的、足够的具体定义可接受的内容,说明系统怎样判断“可接受”或“足够”大概可行的、差不多可行的不要让开发人员来判断“大概”和“差不多”到底是否成立。应将其标记为待确定问题并标明解决日期至少、最小、不多于、不超过明确指定能够接受的最大值和最小值在……之间明确说明两个端点是否在范围之内依赖描述依赖的原因,数据依赖?服务依赖?还是资源依赖?等等有效的明确“有效”所意味的具体实际情况快的、迅速的明确指定系统在时间或速度上可接受的最小值灵活的描述系统为了响应条件变化或需求变化而可能发生的变更方式改进的、更好的、更快的、优越的定量说明在一个专门的功能领域内,充分改进的程度和效果包括、包括但不限于、等等、诸如应该列举所有的可能性,否则就无法进行设计和测试最大化、最小化、最优说明对某些参数所能接受的最大值和最小值一般情况下、理想情况下需要增加描述系统在异常和非理想情况下的行为可选择地具体说明是系统选择、用户选择还是开发人员选择合理的、在必要的时候、在适当的地方明确怎样判断合理、必要和适当健壮的显式定义系统如何处理异常和如何响应预料之外的操作无缝的、透明的、优雅的将词汇里面所反映的用户期望转化成能够观察到的产品特性若干声明具体是多少,或提供某一范围内的最小边界值和最大边界值不应该试着以肯定的方式陈述需求,描述系统应该做什么最新技术水平的定义其具体含义,即“最新技术水平”意味什么充分的说明“充分”具体包括哪些内容支持、允许精确地定义系统的功能,这些功能组合起来支持某些能力用户友好的、简单的、容易的描述系统特性,用这些特性说明词汇所代表的用户期望的实质主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查5.优秀需求规格说明文档的特性完备性标准描述了用户的所有有意义的需求,包括功能、性能、约束、质量属性和对外接口。定义了软件对所有情况的所有实际输入(无论有效输入还是无效输入)的响应。为文档中的所有插图、图、表和术语、度量单位的定义提供了完整的引用和标记。前景和范围TBD问题5.优秀需求规格说明文档的特性一致性标准细节的需求不能同高层次的需求相冲突,例如系统需求不能和业务需求、用户需求互相矛盾同一层次的不同需求之间也不能互相冲突评审自动化检查5.优秀需求规格说明文档的特性根据重要性和稳定性分级建立需求的优先级可修改标准它的结构和风格使得人们可以对其中任一需求进行容易地、完整地、一致地修改,同时还不会影响文档现有的结构和风格文档的可修改性要求:有着条理分明并且易于使用的组织方式,包括目录、索引和显式的交叉引用。没有重复冗余。独立表达每个需求,而不是和其他需求混在一起。5.优秀需求规格说明文档的特性可跟踪后向跟踪(Backwardtraceability)能找到需求的来源,例如和更早期文档的显式关联。前向跟踪(Forwardtraceability)能找到需求所对应的设计单元、实现源代码和测试用例等,它要求每个需求都要有唯一的标识或者可供引用的名称主要内容1.需求规格说明概述2.需求规格说明文档3.模版的选择与裁剪4.文档写作技巧5.优秀需求规格说明文档的特性6.需求规格说明的实践调查6.需求规格说明的实践调查需求规格说明文档的编写和使用时间压力替代品迭代式开发非正式的需求规格说明文档16%正式的需求规格说明文档44%语言交流16%文档结合语言的非正式交流24%6.需求规格说明的实践调查需求规格说明文档的内容问题域描述业务过程操作功能用户行为任务事件场景术语首字母缩写量(Volume)估计值公司背景6.需求规格说明的实践调查需求规格说明文档的内容效果(解系统描述)特征通用标准特征独特特征事务更新插入删除修改信息需求特定报告(Adhocreporting)数据采集数据流数据库查询处理报表行为需求困难示例(Cornercase)错误示例(Errorcase)事件外部事件状态转移转换/转移(Transformation)需求6.需求规格说明的实践调查需求规格说明文档的内容问题接口与其他系统接口系统接口用户界面变更目的目标可行性分析架构约束文档信息文档历史版本和草案签署日期传播(Circulation)授权列表原创作者目录参考文献6.需求规格说明的实践调查模版和示例的使用0%25%50%75%100%使用标准文档结构需求表述格式规范要求使用经常使用有时使用从不使用6.需求规格说明的实践调查需求规格说明文档的描述语言0.00%25.00%50.00%75.00%100.00%自然语言半形式语言形式化语言规范要求使用经常使用有时使用从不使用实例分析由于时间压力以及采取迭代开发的方式,造成了该项目没有编写需求规格说明书。但是可以采用更为灵活的方式编写,例如wiki。我曾在某一预研性质的项目中使用wiki来完成各类文档。结果证明它非常好用。个人认为wiki非常适合用在迭代开发以及预研性质的项目中编写文档。实例分析我们公司项目的需求规格说明书,主要存在以下几点问题:模版不是很统一,具有很多个人的特点没有明确的业务需求、用户需求、系统需求,这三个层次,在需求规格说明书中或多或少地涵盖前三项内容,但显得不够饱满和清晰。鉴于项目的状况,一般较少考虑硬件需求,倒是一般来说,项目上线选用的都是最新的硬件设备,成本较高。内容的书写,自然语言居多,出现歧义、省略、模糊的机会较多,质量不高从项目的后期来看,性能需求、约束、质量需求没有明确地分门别类地明确列出,导致后期项目中的各个业务流程还是基本可行,但是整体系统还是出现不满足需求的地方。实例分析需求分析报告中夹杂了很多专业名词和行业名词,例如横冲、平衡等等,部分客户看不懂,部分程序员看不懂,只有自己心里明白,但这样就会造成客户和程序员理解上的问题,应该加些注释尽量写得比较白话。另外报告中写得比较凌乱,没有把相关问题归类整合,编写目录,并得到客户的签字确认,导