系统工程(SE)学习笔记(三)——需求工程(下)

  • 零. 回顾
    • 壹. 三问需求分析
    • 贰. 什么是好的系统需求
    • 叁. 总结


在需求工程(上)中,我们聊过了STH(stakeholder)和STH Req(stakeholder requirements),本篇我们继续聊SE的下一个步骤,也是需求工程的后半部分——需求分析。

零. 回顾

在进入需求分析之前,我们快速回顾一下需求工程中大的几个关键,有助于我们快速理清需求工程:

a)谁来做?(who)

系统工程师,项目经历,产品、市场、财务、法务、技术人员(项目内部成员)与客户、监管机构等外部人员;

b)做什么?(what)

找出所有可能影响系统设计的因素(需求),包含财务、进度、法规、市场需求等等,形成完整的Concept描述。

c)为什么做?(why)

降低整个项目的运行成本,保证项目盈余。

d)什么时候做?(when)

从项目立项前开始直至冻结系统需求。

e)怎么做?(how)

活用需求分析的思维工具,回归问题本质,‘think big’。

(点击链接可浏览详细内容系统工程(SE)学习笔记(二)——需求工程(上)http://mp.weixin.qq.com/s?__biz=Mzg2MzEzOTg3Mg==&mid=2247483772&idx=1&sn=1c7e50e36bb2e3cb079d84b14627e368&chksm=ce7c6033f90be925d3c9fba9a8fb306b2468da58a5720e8218679b0c4ea5b84090c68400439b&scene=21#wechat_redirect)

壹. 三问需求分析

有个笑话,讲某大学哲学系教授去北大开会,回来跟同事分享说,“Top2就是不一样,连保安都精通哲学,我一到门口就问了我哲学的三大终极问题。”

“你是谁?”,“你从哪来?”,“你到哪去?”

如果说需求捕获是系统工程的“启”,那么需求分析就是系统工程的“承”。它连接系统设计的目的、启发系统架构设计。而这三个哲学终极命题正适合用来拷问需求分析。

a)“我”是谁?——需求分析的目的

简单说,需求分析的目的是将前面捕获的各种STH Reqs转换为系统需求。也就是说,在这一步,我们就可以从各种眼花缭乱的业务分析中开始转向“技术”层面的活动了。

系统需要具备什么样的功能?什么样的性能?采用什么样的技术方案?符合什么样的法规?成本上限是多少?技术风险有多高?要多少时间完成?这些问题,都在需求分析中获得答案。

但是,由于各STH提出的需求之间,公司和用户,公司与监管机构间的关系错综复杂,各自需求间互相制约、甚至冲突。同时,由于STH Reqs是一种以STH为中心得到的,因此其中的内容往往充斥着感性的描述与偏离技术现实的“想当然”,其结果不是系统设计无法对需求进行追溯就是与需求直接脱节。作为系统工程师,在其中要发挥的作用就是进行权衡与取舍。(关于系统工程师与工程师大的区别,我们后续细聊)

![在这里插入图片描述]
而需求分析的目的就是“清洗”这些需求,将一团乱麻般的需求重新组合(既可能是解耦,有可能是耦合,但大部分情况下是解耦),获得清晰、明确、可追溯的系统需求。

b)“我从哪来”?——需求分析的源头

虽然INCOSE的手册中关于需求分析的输入列了很多,但其实总结出来就是2点:Concept描述和STH Reqs。STH Reqs是上一步(需求定义)的产物,这里不多说,这里我们主要来看Concept描述。

简单说,所谓Concept描述,就是在系统的全生命周期中,描述整个系统看起来应该是什么样的。

这不但包含我们熟知的如何使用SOI(被设计的系统)、如何维护SOI等信息(也即我们常说的场景,scenario),还包括我们不太常关心的如如何设计、开发、验证、确认、交付、报废等等与SOI相关所有内容。用日常生活举例子,好的Concept描述就好比一个人的履历,看完整个文件就能明白一个人从哪出生,在哪上学,家庭状况等等直至死亡的时间地点等全部信息。


在我看来,Concept描述的本质是一种描述系统和整个物理世界如何发生关系的工具。系统工程师通过它描述的系统和物理世界的接口,从而划定系统的边界并定位系统在整个物理世界间的位置,将系统与整个世界有机联系在一起。以我现在做的卫星项目为例,我们的Concept文档包括:

Concept of operations:也就是我们常说的使用场景的集合,是最重要的Concept描述,定义了系统绝大多数的功能、性能、约束等等;

Concept of deployment: 用于牵引系统开发过程中的需求,例如要求开发环境支持8位或者16位的程序开发;

Concept of support:用于牵引系统对系统运行进行支持的需求,如对存放卫星的“匣子”的需求;

Concept of disposal:用于牵引系统报废后的需求,比如环绕月球卫星坠毁后的位置等;

总而言之,好的Conops就是要做到如一个精确的“剧本”,规定了SOI这个“演员”从角色诞生起的人物设定、背景,行为,直至其死亡的全部内容。系统通过这个剧本保证控制全部的系统需求,使其有来源、可追溯,从而指导下一步的系统架构设计。为什么我们的设计,在提系统设计指标时,经常感到如“无根之水”、“无本之木”,不知道如何提出合理的指标?其根本原因就是Concept没有坐实。

还是举一个我在法国做的卫星的例子。一颗卫星上用于存储数据的内存大小是多少?首先我们要知道为什么要存储数据,因为在月暗面有一段数据观测数据无法回传。那么需要存储器的大小就可以根据确定的绕月卫星轨道、地月通信的位置等等确定无法通信的时间,结合载荷观测数据的速率,就能估计出存储器的大小。而其中进行估算需要的全部概念、数据等信息,都已经完整描述在Concept文档中。

c)“我到哪去”?——需求分析的结果

作为连续环节上的一环,需求分析对上承接需求定义,对下通过系统需求对架构设计进行指导。具体系统架构设计的输入我们留待“架构设计篇”再聊,这里我们重点聊一下最重要的产物,系统需求。

贰. 什么是好的系统需求

上一篇,我们通过判断需求与“伪”需求,摒除了“伪”需求。这次我们再聊聊什么是好需求,或者说,什么样的需求才有意义。

关于什么样的需求是“好”需求,INCOSE官方手册洋洋洒洒写了5大页。总结一下,可以归纳为点:

a)合理

首要肯定是合理。一个是每条需求自身要合理,肯定是不能提“又要马儿跑,又要马儿不吃草”这种需求。第二是整个需求文件要自洽,不能有前后矛盾。这也带来了需求合理性的第三点要求,各需求间独立。没有充分解耦的需求很容易造成“牵一发而动全身”,使得一丝更改就推翻整个需求文档。

b)清晰

不用说,好的需求一定是无歧义的,才能保证后续流程的设计、验证确认等活动按照需求本身的目的执行。此外,好的需求一定是"可操作性"强的,能够明确提出相应的指标,能够进行验证确认的需求才是好的需求。

可以说,类似“操作界面友好”、“精确实现”之类没有标准,无法考量的需求由于无法考核,根本没有意义。

c)可追溯

可追溯一方面是向上可追溯,也就是能追溯到STH,当某个STH修改了需求后,能迅速关联到系统需求。另一方面是向下追溯(或者说向其它需求追溯),保证需求的更改时能够确定明确的影响域。

叁. 总结

总的来说,需求分析阶段算是正式步入了系统设计的技术层面工作。作为系统架构设计的源头,充分、合理的需求分析与管理不仅能够加速整个设计流程,在系统后期的更改、维护与谱系化发展阶段也能够提高整个设计团队的效率。

以往我们总是很重视纯技术层面的工作,大到一个设备关键性能指标如何实现,小到一颗螺丝钉强度是否足够,而对“为什么?”这个问题重视不足。而实际上,回答好“为什么?”才是系统设计的本源。

今天说的有点多,就此打住。下篇我们将聊到系统设计侧最关键的部分——“系统架构设计”,敬请期待。

欢迎关注我的微信公众号,一起交流系统工程技术

系统工程(SE)学习笔记(三)——需求工程(下)相关推荐

  1. TCP/IP协议学习笔记(三)Window下socket编程(一)TCP

    DLL的加载 使用#pragma命令,在编译时加载: #pragma comment (lib, "ws2_32.lib") //加载 ws2_32.dll 使用DLL之前,还需要 ...

  2. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  3. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  4. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  5. ROS学习笔记三:创建ROS软件包

    ,# ROS学习笔记三:创建ROS软件包 catkin软件包的组成 一个软件包必须满足如下条件才能被称之为catkin软件包: 这个软件包必须包含一个catkin编译文件package.xml(man ...

  6. Python学习笔记三之编程练习:循环、迭代器与函数

    Python学习笔记三之编程练习 1. 编程第一步 # 求解斐波纳契数列 #/user/bin/python3#Fibonacci series:斐波那契数列 #两个元素的总和确定了下一个数 a,b= ...

  7. python3常用模块_Python学习笔记三(常用模块)

    Python 学习笔记三 (常用模块) 1.os模块 os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果. os.name:返回当前操作系统名称( ...

  8. 学习笔记三:衍生兄弟——过冲和振铃

    学习笔记三:衍生兄弟之过冲和振铃 先解释下过冲和下冲: 过冲(overshoot):通俗讲,一端到另一端,本来是一条很平整的马路,今天走着走着突然中间多了座山.(超过设定值) 下冲(undershoo ...

  9. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  10. Spring框架学习笔记(三)(AOP,事务管理)

    Spring框架学习笔记(三) 九.AOP 9.1 AOP的注解配置 (1) 新建计算器核心功能(模拟:不能在改动核心代码) (2) 建立一个普通的Java类写增强代码(面向切面编程),使用Sprin ...

最新文章

  1. 生产指挥调度系统_市安全生产应急救援指挥中心将大型装载机械设备储备信息纳入应急指挥调度系统...
  2. swift 用协议实现代理传值功能
  3. wxWidgets:Erase wxWidgets示例
  4. ThreadLocal http://blog.jobbole.com/20400/
  5. 一致吗 驱动_iPhone 12无线充电真的香吗?
  6. 的内怎么放_汽车后备箱的“四不放”原则,你知道吗?网友:怎么不早说
  7. python中对文件的操作_Python对文件操作知识
  8. 一步步实现 Redis 搜索引擎 1
  9. DNN/LSTM/Text-CNN情感分类实战与分析
  10. [剑指Offer] 26.二叉搜索树与双向链表
  11. 倒立摆的实现 1.前期准备
  12. 有关access的上机试题_2016年计算机二级《Access》上机操作题及答案
  13. 免费搭建个人网站流程!马上拥有自己的网站!
  14. 长风破浪正其时,Python天堑变通途(3)(令人智熄的分支循环,优先级问题)
  15. BMW 与 Harvester 的云与边缘之旅
  16. 利用ajax实现excel报表导出(解决乱码问题)
  17. 飞机气动导数的插值计算_Matlab
  18. Window7 如何分屏
  19. Re23:读论文 How Does NLP Benefit Legal System: A Summary of Legal Artificial Intelligence
  20. setAttribute()方法的使用

热门文章

  1. java GUI开发库——beautyeye
  2. python培训千峰
  3. elasticsearch搜索引擎下载安装
  4. Qt+VLC简单的使用显示视频Demo
  5. vue vlc插件的使用
  6. Lvs+keepalived+Nginx实现服务器一主一备(高可用)
  7. windows动态添加lib的三种方法
  8. java编程实现命令窗程序输入中文输出相应英文
  9. HDU - 2003 求绝对值 【精度】
  10. 如何将蓝牙鼠标或触控板连接到 iPad?