关注+星标公众,不错过精彩内容

作者 | 逸珺

微信公众号 | 嵌入式客栈

项目开发,一般都是按照需求驱动开发整个开发过程的。需求是开发的源头,即便是自己DIY一个小东西,心中所想也是一种需求,所以一个项目是否成功,需求分析做的是否到位也是至关重要的。

前面也为大家分享了『嵌入式方案设计文档』的重要性,其中需求就是一个重要的内容。今天就为大家分享一下项目需求的内容。

从搞笑开始

客户想要一款集美丽、智慧于一身的机器人,理想很丰满,可是现实很骨感。项目中不同的角色对这个需求理解各不相同,而表现传递的信息又有可能会大打折扣,所以最后交付造出来的产品与客户想要的相去甚远。

那么问题出在哪里呢?我以为需求失真是罪魁祸首!

  • 客户自己对需求理解失真

  • 设计人员对需求理解失真

  • 需求文档对需求描述失真

  • 开发人员对需求设计失真

  • .......

    那么对于需求的定义在项目的成功执行,就显得尤为重要了。再看一个关于小龙女形象的经典段子:

这不是终极版本,来看下颠覆三观的终极失控版本:

注:图片来源于网络,纯属调侃搞笑,不带任何歧视,侵删

所以对一个成功的项目而已,需求的作用就显得尤为重要了。

需求的SMART原则,SMART依次英文含义为聪明的,SMART对于需求而言,有哪些度量维度呢?

  • S:Specific 明确的

  • M:Measurable 可度量的

  • A:Achievable 可实现的

  • R:Relevant  相关的(范畴内)

  • T:Traceable and Testable 可追溯及可测的

Specific明确原则

明确原则主要涵盖这样一些要点:

  • 需求描述的正确性?描述的需求本身必须是正确的界定某个功能,如果本身就是一个错误的描述,则设计实现就一定是错误的!需求描述的内容是否是需求方(可能是最终客户或者来源于市场产品管理人员)。这项需求真的是需求方所需吗?或者部分所需?或者完全错误?

  • 需求描述的唯一性?好的做法是将需求拆分成一个个条目,每一个条目描述一项明确精准的需求,相互之间不存在包含关系。

  • 需求条目是否在项目的范围内?有的需求可能天马行空,超出了项目预期的范围的事情时有发生。

  • 需求描述时否明确了该项需求的前提条件或者约束?

Measurable可度量原则

可度量,我的理解是体现精确性:

  • 需求描述的精确性?需求不要用模棱两可的描述,比如不可使用左右,上下,可能等,而尽量用精准的数字去描述。比如需要描述响应时间,推荐描述为响应时间须满足:

  • 需求描述的客观性?需求描述应采用客观描述语言,忌讳采用具有主管色彩的词汇,比如需求一个产品经理要求设计的UI界面,美观大方,容易操作,这样的需求是非常不易度量的,相信很多盆友或许又遭遇过这样的需求,也一定是非常恼火的。这样的需求你让设计咋整?一千个读者眼中就有一千个哈姆莱特,这样的描述太过主观,最后一定是撕逼扯皮的结局。

Achievable 可实现原则

凡是写入项目需求规格书中的条款理论上就是一份技术合同,需求方就是甲方,项目团队相当于乙方。所以界定需求是需要与甲方反复沟通,反复确认的,否则一旦写入规格书,临了发现臣妾做不到!最后又不免撕逼扯皮!

要实现需求规格书的可实现原则,并不是简单成员坐在一起,拍拍脑袋想想就定下来,这里对于一些具有挑战的技术难点、技术指标是需要做技术预研的,否则可实现就变成了觉得可实现,而非客观上真的可实现!对于是否可实现,可以提出这样些问题:

  • 项目团队是否具有这样的技术?

  • 关键技术指标能否满足要求?

  • 项目资源配置能满足要求?

  • 可实现是原则不是描述如何实现!需求描述的就是功能性或非功能性的要求,而不要描述设计方案

  • .......

双T可追溯可测原则

可追溯原则:

  • 后向追溯:所有的需求条目,理论上应有甲方(需求方)的源头

  • 后向追溯:所有的需求条目,都应有设计能对应保证,都应测试用例可验证。

可测试原则:

  • 需求条目,需要应尽量具有可测性

  • 需求阶段,理论上测试人员就应该参与讨论,从测试的角度来进行核定。

不良需求描述栗子

无法追溯(无标号)

  • 按下急停开关,系统须停机。(这里其实还不精确,应描述在多少时间内停机)

不可测

  • SR-1:系统须永不崩溃。

不精确

  • SR-2:系统应向用户提供快速反馈。(多快?)

无测量公差

  • SR-3:LED灯应闪烁间隔100毫秒(应定义正负偏差)

过于复杂

  • SR-4:按红色按钮将激活功能A,按蓝色按钮应使LED 1 闪烁而不是LED 2点亮,点亮LED 2通过黄色按钮实现。(应拆分)

描述实现

  • SR-5:按下按钮W将导致两个16位整数值相加,然后…

需求描述方法

实际项目中,不同的公司实际落地都各有各的特点,这里大致列举一些常见做法:

  • 文档描述法:属于常规方法,很多公司采用这样方案描述项目需求。

  • UML 用例法:利用UML用例图描述需求,这种方法比较直观,比如下图

  • 敏捷项目管理,采用用户故事描述(user story)

总结一下

项目开发,需求阶段是一个至关重要的阶段。如果在需求阶段不做足确认工作,需求分析描述做的很随意,开发过程及交付时不免掉进各种坑里。

------------ END ------------

后台回复『嵌入式软件设计与开发』相关文章。

欢迎关注我的公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。

欢迎关注我的视频号:

点击“阅读原文”查看更多分享,欢迎点分享、收藏、点赞、在看。

项目需求分析定义的灵魂拷问相关推荐

  1. 对号入座,项目中那些灵魂拷问该怎么应对

    作为IT大军的一员,不论从事什么岗位,产品.开发亦或是测试,项目实施中,大家都可能问出或者被问以下这些问题,我相信屏幕前的你一定也是感同身受,下面谈谈当总被这些惊魂之问环绕时,我们可以做些什么. 一. ...

  2. 灵魂拷问:Java的可变参数究竟是怎么一回事?

    这是 Java 极客技术的第 276 篇原创文章 在逛 programcreek 的时候,我发现了一些专注基础但不容忽视的主题.比如说:Java 的可变参数究竟是怎么一回事?像这类灵魂拷问的主题,非常 ...

  3. 88道BAT Java面试题 助你跳槽BAT,轻松应对面试官的灵魂拷问

    88道BAT Java面试题 助你跳槽BAT,轻松应对面试官的灵魂拷问 前言: 备战金九银十逃脱不了面试官的灵魂拷问,笔者整理了88道Java面试,由于面试题太多文章没有包含答案,需要领取这些面试题答 ...

  4. VR技术·上|有关VR的“灵魂拷问”

    NSR (NeXT SCENE Research) 位于纽约哥伦比亚大学创业实验室,是最专业和先锋的沉浸式体验报道媒体和社群.致力于促进艺术和新技术融合,打破传统剧场舞台的边界,探索未来体验式娱乐的发 ...

  5. github 吐血整理:如何应对 HR 的灵魂拷问?

    本文首发于小程序:编程面试题库 ,转载请保留出处. 最近趁着有时间,整理了一下关于 HR 的灵魂拷问系列,并新建了一个 github 仓库,欢迎持续关注.本文为节选部分内容,点击阅读原文可直达项目. ...

  6. 灵魂拷问:我们该如何写一个适合自己的状态管理库?

    作者|李骏(涅尘) 来源|尔达Erda公众号 ​ 引言 大家好,这里是 Erda 开源项目前端技术团队,今天聊一聊前端的状态管理. 说到状态管理库,想必前端同学随口都能说出好几个来,社区里的轮子一个接 ...

  7. 灵魂拷问:你看过Xgboost原文吗?

    Datawhale 作者:小雨姑娘,Datawhale成员 事情的源头是这样的,某日我分享了一篇阿里机器学习工程师面试失败经历,其中提到了我回答关于Xgboost的部分,评论区的老哥就开始了灵魂拷问: ...

  8. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?

    目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...

  9. 灵魂拷问:如何检查 Java 数组中是否包含某个值 ?

    作者 |  沉默王二 责编 | Elle 在逛 programcreek 的时候,我发现了一些专注细节但价值连城的主题.比如说:如何检查Java数组中是否包含某个值 ?像这类灵魂拷问的主题,非常值得深 ...

最新文章

  1. 远程办公难?实战经验为你打消4大顾虑
  2. windbg bp condition
  3. C++ namespace 命名空间
  4. Java——集合(Map集合的两种迭代)
  5. Magento教程 2:Magento 社群版安装教学!
  6. win7 64 php mysql_win7 64 搭建 64 位 apache httpd php mysql
  7. c语言各章知识重点(谭浩强版本)
  8. ArrayList的retainAll()方法使用
  9. #ardiuno #蓝牙 #if函数判断 #串口中米思齐
  10. 【大数据技术干货】(还不懂数仓,数据中心?看这一篇就够了!)在实际的开发生产中,让你了解企业级数据中心整体架构(DB+ETL+ODS+DW+DM)的各个层次的过程详解,数据联系及功能区分
  11. win7搭建nas存储服务器_FreeNas 0.7.1:普通电脑变成网络存储服务器
  12. 一加和华为买哪个好 一加9用新特性赢得消费者口碑
  13. HNSWNSG-基于图的ANN近邻搜索
  14. Session 与SessionFactory
  15. 滴滴开源 LogicFlow:专注流程可视化的前端框架
  16. php wrap,php wordwrap函数怎么用
  17. idea报错:Parent ‘Unknown:Unknown:Unknown‘ has problems
  18. 慕课软件质量保证与测试(第五章.课后作业)
  19. 下载vue模板框架并使用
  20. 数据结构课设+校园导航系统+西安邮电大学

热门文章

  1. MySQL高可用之MHA架构企业实战
  2. 【毕业设计】 python小游戏设计 -吃豆人小游戏
  3. 操作系统内核为啥用C语言?(C语言特点)
  4. linux su 模块未知,模块构建失败:的ReferenceError:[BABEL]未知的选项:base.stage
  5. 如何使用区块链币收款地址找合约地址?_区块链技术学习指引
  6. 五.UMLet的使用与类图的设计
  7. linux logo程序设计,Linux Logo 制作
  8. Linux入门真经-036LVM逻辑卷原理与创建
  9. 【原码、反码、补码】
  10. 人工智能如何革新医疗