需求分析之道——需求分析要做什么(C系架构设计法,sishuok)
需求分析之道——需求分析要做什么。
需求分析是架构师开始做架构设计的第一步,对架构师来讲非常非常的重要。因为需求分析能够告诉我们,到底我们要做什么,架构设计就是为了去完成这件事情而做的。
接下来,我们就从实战的角度来讲一讲,需求分析的一些方法,都是咱们多年经验的总结,也许听上去或者说大家看上去,没有那么高大上,但是是非常实用的知识,从几10万的小项目到数千万的大项目都可以用得上这些方法。
咱们要做一件事情,首先要紧盯目标,这样你才能够找到自己前进的方向;然后再盯脚下的路,找到具体做事的方法。一步一步,认认真真去做,最终达到这个目标。这里也一样,先来看看需求分析的目标是什么?
一:需求分析的目标:
是尽可能准确、全面、深入的理解业务。
关于这个话题,内容比较多,特别在上一篇《深入理解需求分析的目标》详细讲述了,这里就不再啰嗦了。
二:识别重难点业务
第二个大的任务,就是识别重难点业务。这个可能要求架构师有一定的业务经验,这个也算是架构师的一个基本功。拿到需求过后,架构师要能够快速的识别出里面的一些重难点的业务,足够的业务经验,就能告诉我们,要做这样子的业务,里面有哪些功能是非常重要的,有哪些业务可能是比较难做的,也就是咱们俗称的重难点的业务。
识别出重难点业务有什么样的作用呢?就是接下来,在进行分析设计的时候,我们要重点去考虑这些重点业务、难点业务的实现,如果能够把重难点的业务都解决了,一般来说,常规的、相对普通一些的业务功能,咱们的架构设计,是能够很好的去满足的。
这些重难点业务,很可能会影响到咱们后面的,包括像技术选型、具体的架构设计、架构形式,可能都会受到它的影响。
毕竟,软件只是一个工具,工具嘛,不就是用来干活的吗?软件是用来干什么的呢?就是帮助用户或者客户,实现业务活动的工具。架构设计是干什么的呢?架构设计是为了把软件造好,也可以说它是为了软件服务的,开发和制作软件这个工具。
所以,我们要去识别重难点业务,软件就是来解决这些业务问题的,肯定首先盯的,就是要解决重难点的业务,这些解决了,那些普通业务肯定能解决。是这个道理吧。
咱们的架构设计,就是在考虑,我怎么能够把这个软件做好。因此,对于重难点业务的把握,可能就直接决定了架构设计的成败,咱们一定要非常非常的重视。
这一点对于经验弱一些的架构师,可能就是一个小小的问题了,因为刚开始,他可能不能很快的去识别这些重难点的业务,但这个也没有关系,即使你刚开始没有识别出来,那你就尽量验证的全面一些。比方说,做完你的架构设计了,在做架构验证的时候,你就多挑一些业务来验证你的这个架构设计,这样也能够避免出现一些问题。
三:识别非功能需求,还有质量约束
第三的一个,要去识别非功能需求,还有质量约束。
啥叫非功能需求呢?就是除去咱们的业务功能需求之外的,剩下的这些需求,统称为非功能性需求,通常也是软件质量约束的一部分。
比如说,我们对这个系统提出了一些要求,但不是功能性的,常见的有:性能方面的要求,可靠性方面的要求,可扩展性方面的要求,可维护性方面的要求等等的。当然也还有其他的,比如说安全的要求,备份、恢复的要求等等,这些要求对于架构设计的影响也是非常非常大的。
很多都是架构设计要重点考虑的一些问题,比如说像性能问题,可靠性问题,高并发问题,海量数据的问题,可扩展的问题等。这些对咱们做架构设计都是有非常大的影响的,所以,在做需求分析的时候,就要把这些识别出来。
最后想要强调一点,需求分析对架构师而言,是非常非常重要的。可以这么说,需求分析是架构师做架构设计的起点,需求分析没有做好,后面的全部都是在瞎做。
因为,需求分析会告诉我们:到底要做什么?如果说,连要做什么,我们都不知道,那你想想,如果一片迷茫的情况下,就去做所谓的架构设计,请问这个架构设计为谁做的?做来干什么?
现在有一些所谓的架构师,轻业务而重技术,成天高谈阔论很多新的技术,各种技术大词、名词满天飞,为了技术而技术。但是他忘了架构设计的初心,架构设计的目的是为了软件服务的,是为了更好的去开发和制作软件这个工具,仅此而已,不是为了你去炫耀技术的。
可以毫不客气的说这些人,根本就算不上是真正的架构师,我们可以称之为是伪架构师,或者说是PPT架构师,有那么一句话:“离开业务场景谈架构设计,那就是在耍流氓”。所以说,大家一定要重视起来,业务很重要,需求分析很重要。
为了大家更好的交流架构设计的思想和知识,大家可以加sishuok,拉你进架构设计群,一起共同学习,共同进步。
需求分析之道——需求分析要做什么(C系架构设计法,sishuok)的更多相关文章
- python-django电商项目-需求分析架构设计数据库设计_20191115
python-django电商项目需求分析 1.用户模块 1)注册页 注册时校验用户名是否已被注册. 完成用户信息的注册. 给用户的注册邮箱发送邮件,用户点击邮件中的激活链接完成用户账户的激活. 2) ...
- Day1:了解APICloud平台、理解APICloud应用设计思想、掌握平台使用流程。学习如何对一款APP进行需求分析、功能分解和架构设计等编码之前重要的准备工作
学习目标 总体上了解一下APICloud平台,重点介绍相关的学习资源,入门资料,常见的FAQ等 明确我们这七天要开发一个什么样的APP,明确功能需求,跟上每天的课程节奏,可以课前预习 梳理出对于一款A ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-3.在线教育站点需求分析和架构设计
笔记 3.在线教育站点需求分析和架构设计 简介:分析要开发的功能点和系统架构应该怎样架构 1.开发的功能: 首页视频列表 ...
- atitit 研发管理 要不要自己做引擎自己实现架构?.docx
atitit 研发管理 要不要自己做引擎自己实现架构?.docx 1.1. 目前已经有很多引擎了,还要自己做吗??1 1.2. 答案是自己做更好,利大于弊1 2. 为什么要自己做??1 2.1. 从历 ...
- 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
目录: 1. 架构选型 2. 架构目录介绍 3. 架构说明 4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- tornado框架学习及借用有道翻译api做自动翻译页面
趁着这几天有时间,就简单的学了一下tornado框架,简单做了个自动翻译的页面 仅为自己学习参考,不作其他用途 文件夹目录结构如下: . ├── server.py ├── static │ └─ ...
- 如何做JS 单体模式的设计---->>js设计模式<<-------单体模式
1. 单体模式是js中最基本 单最有用的模式之一,非常常用. 单体模式的基本结构如下: var Person = { name: 'lilu', age:', sayHi: function(){ a ...
- 从零开始做UI-静电的sketch设计教室 视频教程
全套31集目录 01-初识Sketch http://www.ui.cn/detail/52223.html02-sketch的下载与安装 http://www.ui.cn/detail/5222 ...
- Java小对象的解决之道——对象池(Object Pool)的设计与应用
一.概述 面向对象编程是软件开发中的一项利器,现已经成为大多数编程人员的编程思路.很多高级计算机语言也对这种编程模式提供了很好的支持,例如C++.Object Pascal.Java等.曾经有大量的软 ...
随机推荐
- 肖sir__面试笔试题__阿里笔试题
第一题: #给定一个无序数组nums和一个目标值target,返回数组中两个元素的和为target的算法,时间复杂度为O(1);def func1(nums,target): dict1 = { ...
- 使用element上传图片的时候的限制只上传一个的问题
<el-form-item label="轮播图图片" prop="image"> <el-upload class="avatar ...
- List进行分隔,分批插入数据库
背景,当数据集合超过一定数据量时,则会插入失败,需要将集合进行分隔,分批插入 /** * 分批插入-公共方法 * @param objects:数据集合 * @param subSize:单次插入的条 ...
- XSStrike-20220320
Usage: xsstrike.py [-h] [-u TARGET] [--data PARAMDATA] [-e ENCODE] [--fuzzer] [--update] [--timeout ...
- [OC] 统计代码行数
1.打开终端 2. cd 路径,或者 输入cd ,然后把要统计代码的工程拖入终端,就会出现工程的路径. 然后按下回车. 3.输入: find . -name "*.m" -or - ...
- shell_Day02
虽然差了不少天,但的确是第......一天 history 查看历史命令记录 !命令序号 查看命令并执行 -c 清空 关于命令历史的文件 关于命令历史的变量(环境变量) 命令补全 tab:制表符 \t ...
- 初探AOP
1.背景介绍 1.什么是AOP 1)在OOP(面向对象编程)中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加. 2)AOP则将封装好的对象剖开,找出其中对多个 ...
- DHCP 服务详解
本文转发于华为IP知识百科,链接地址 DHCP 目录 一.什么是DHCP? 二.为什么要使用DHCP? 三.DHCP是怎么工作的 四.DHCP使用场景 一.什么是DHCP? 动态主机配置协议DHCP( ...
- iOS设置textView的placeholder
转载:http://blog.sina.com.cn/s/blog_7a1b23430102wkys.html #import "ViewController.h" @interf ...
- Java基础Day7-值传递和引用传递
一.值传递 Java都是值传递. 值传递:是指在调用函数时,将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,就不会影响到实际参数. 值传递是对基本数据类型而言. 二.引用传递 引用传递 ...