【HappyCoding 之前,如何做好需求分析?】

news2024/10/7 21:53:07

在这里插入图片描述
“代码没写完,哪有脸睡觉”?代码爱好者们如是说。在工作当中,开发者往往也要担任需求分析的角色,承担一些需求分析设计文档编写等工作,这对于一些刚入行的新手或是一些自我封闭的“代码高手”来说是比较头疼的,毕竟 “Talk is cheap, Show me the code!”,当然,大多数人并没有达到 Linus Torvalds 那样的高度,还是要一步一步脚踏实地,完成日常任务的同时提升各方面能力不断打怪升级。

那么,在遨游于代码的世界之前,如何分析好接到的需求呢?又该如何清晰有结构有层次地表达出来?保证项目组任何一个开发者拿到你的需求分析设计文档是否可以很明确的知道要做什么?做多少才算完成这个需求中涉及到的内容?分享记录一下自己做需求分析编写设计文档的一些做法。

这里以数据仓库、数据集市系统中的数据开发类需求举例。

无论是数据仓库,还是数据集市系统,粗略地讲都是一个数据中转站,有需要消费数据,对数据进行展示等操作的下游系统,也有需要提供业务数据或日志数据的上游系统,一般都是业务部门需要数据展示或统计进行分析从而提出的数据需求,然后根据数据调研确认数据链路后进行需求变更,数仓或者数据集市针对需求变更说明书进行需求分析设计,然后供数下游系统应用。

在业务部门提出需求变更时,往往都已经做好了数据调研,我们可以根据需求变更说明书的内容进行需求分析,不考虑不可实现的一些功能,一般的设计思路大体可以按数据仓库或数据集市的数据流向进行拆解需求内容,这里简要分为:输入接口、模型层、分析层、应用层、输出接口。

1、输出接口

这里定义的是输出数据文件接口,即数仓或数据集市通过数据文件形式将数据供给下游应用系统。

先和下游应用系统确认数据文件输出接口表变更或新增,假设与下游系统交互是按数据文件,存储方式按表,那么,还需要:

与下游沟通表结构变更或新增,表的业务数据范围等,然后需要确认所在的数仓或数据集市是否存在满足下游系统所需数据,按文件进行传输还需要确定分隔符,定界符,字符编码,数据文件、标志位文件后缀名等等。

2、输入接口

定义也是输入数据文件接口,即接收的是上游系统的数据文件形式。

需求数据调研分析过程中,如果当前数仓或数据集市中数据不满足下游系统消费需求,则需要新增输入数据文件接口,然后就涉及到数仓或数据集市的数据存储流程,比如要根据新接入数据进行数据建模,是否可以与现有数据进行整合等。

3、模型层

模型层涉及到数据存储的问题,可以通过数据仓库建模理论,项目数据架构进行了解。可以按业务或者主题进行归入模型层,并对表名、字段名、数据类型等进行规范化,明确一张表的业务主键,确认业务数据范围等。

比如,一张企业客户信息表,里面存储的是企业客户的基本信息,包括客户编号、客户名称、客户的统一社会信用证代码、注册地址、经营地址等信息,这张表的业务主键就是 “客户编号”,可以唯一标识该表的一行记录。

4、分析层

分析层一般是通过模型层的数据对一些统计指标或客户属性标签的分析处理,或者提供如指标明细数据。

比如一个客户在某一年总的账户余额为 1000 万元,提供的明细数据包含这个客户每个账户当年的余额情况。

5、应用层

应用层一般是针对不同的下游系统提供定制化数据接口。可以根据下游系统提供的表结构及数据范围以及业务提供的数据处理逻辑(业务口径),转化为技术实现逻辑并形成书面文档。

描述需求
在需求分析过程中,要编写设计方案,通过文档展现并留存分析结果,也是梳理分析人的思路的过程,是否对真正理解了需求,并且能否把思路梳理清晰并描述出来,这个描述包括书面描述形成文档,还包括沟通表达的方式,因为在设计文档编写完成之后,还需要对需求进行评审并且与开发人员进行需求内容和技术交底,所以还需要考验你的表达能力。

书面和口头表达可以按“从前往后,从后往前”的方法进行描述。

在与开发同事进行技术交底的时候,可以按从“输出接口”开始,即下游需要什么样的数据,需要构建一个什么样的表,为什么需要?展示在什么地方?可以实现什么样的价值?【这些都可以多了解,不只是明白数据的生命周期,对于自己的系统思维和全局观念的形成会有很大帮助,也能明白自己工作的意义】然后再具体讲在这次需求中需要完成哪些工作,涉及哪些表和数据的变动,是否需要新增输入接口,从哪个上游系统接入,如何实现等等。

在编写设计文档时,又可以从“输入接口”开始,需要接入某个系统的哪些数据文件,数据的内容,数据模型的构建,然后到分析层和应用层的指标、标签、接口表的业务口径、技术口径(实现逻辑),最后要输出哪些数据文件接口到哪个下游系统等。

这里提供一个参考的变动项表达方式:
在这里插入图片描述
可以使用伪代码表达技术口径,以便代码开发者开发的代码与需求分析人所设想的结果尽可能相差不远,沟通也更加高效。

举个简单的例子:

如业务口径为要统计当年客户的账户余额。

则在设计方案文档里面编写关键业务设计时技术实现口径可以这样表述:

INSERT INTO appcrm.cust_indx_statis(
data_dt
,cust_id
,...
,sum_ind_val
)
SELECT
批量日期
,cust_id
,...(其他字段)
,SUM(ind_val)   AS sum_ind_val  -- 总余额
FROM cust_info -- 客户信息表
WHERE SUBSTR( data_dt, 1, 4 ) = SUBSTR( 批量日期(YYYY-MM-DD), 1, 4 )
AND ...
GROUP BY cust_id, ...
/**/;

小结

以上只是需求分析工作过程当中的一部分,更复杂的分析工作还涉及数据调研,部门之间沟通协调,与业务或者说产品经理不断沟通理解真实需求目的或痛点,中间还可能要经历多次的会议进行上下游沟通和需求确认等。

分析过程中也要多思考,多总结,了解数据的生命周期,数据是如何产生的,接入数据后每一个细节的处理过程,到最后下游系统消费,实现功能后可以解决什么问题,比如对公司决策或营销策略有什么帮助等,不断刻意练习系统思维和工程思维,不要一开始接到需求就直接进行代码开发,先从大格局观察再深入细节,最后还能回归到顶层中看待问题,避免陷入惯性思维,细节思维;

做需求分析还可以思考如何进一步提高文档书写能力,以及沟通表达的能力,比如作为一个技术开发人员人,如何能更好的将技术实现思维清晰地表达给产品经理或其他非专业技术人员,如何更好的与同事、领导、客户进行沟通等,还涉及到任务拆解和任务分发的能力,可以作为锻炼组织管理能力的一部分,为之后更多的职业发展规划可能性做准备,不断增进自己的通用软实力。


欢迎微信搜索并关注我的公众号: 键道码屋
这里分享工作、生活、见闻、思考,我们一起阅读、思考、写作、行动,共同进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2194961.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用Python Turtle绘制天安门技术讲解

概述 Python的Turtle模块是一个简单的绘图库,它允许用户通过简单的命令控制一个小海龟在屏幕上移动,绘制出各种图形。本文将通过一个具体的示例——绘制简化版的天安门,来详细讲解如何使用Turtle模块。 环境准备 确保你的Python环境中已经…

【CF2021E】Digital Village(All Version)

题目 给你一张 n n n 个点 m m m 条边的无向图,有 p p p 个关键点。你需要选择 k k k 个点染黑,使得这 p p p 个关键点到这 k k k 个黑点的代价和最小。定义代价为两点之间边权最大的边的最小值。 你需要求出 k 1,2,…,n 的所有答案 E1 n,m,p&l…

OBOO鸥柏丨数字化展厅液晶拼接屏联动展馆触摸屏查询一体机信息化

在OBOO鸥柏精心雕琢的多媒体展厅展馆解决方案中,鸥柏液晶拼接屏的多屏联动互动技术犹如一条无形的数字科技纽带,OBOO鸥柏巧妙地将多台商用显示设备编织成一幅幅动态共生的视觉盛宴。鸥柏这项技术,不仅仅是简单的显示设备互联,鸥柏…

73.【C语言】C/C++的内存区域划分

1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射: 如果看过王爽老师的 《汇编语言 第四版》,其中写到了可以操作B800…

【可答疑】基于51单片机的倒车雷达测距(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

三、数据链路层(下)

目录 3.6以太网 以太网的分类 Mac地址 以太网数据格式 3.7互联网 数据是如何传输的? 3.8以太网、局域网、互联网的区别 总结: 3.9 vlan基本概念与基本原理 Vlan实现 划分 VLAN 例题 3.10广域网及相关协议 ppp协议 PPP协议所满足的要求 P…

【GitHub】上传文件到GitHub

参考视频:手把手教你在github上传文件_哔哩哔哩_bilibili 1.找到文件夹右键,选择open git bash here 2.完成指令 git initgit add *git commit -m "first commit"3.打开该文件夹,打开隐藏文件.git/config 编辑输入邮箱和GitHub用…

关于Qt音乐播放器进度条拖拽无用的问题解决方案

在使用Qt编写音乐播放器的时候,进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候,可能会报错如下: 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…

AI大模型,但是在卫星

B站:啥都会一点的研究生公众号:啥都会一点的研究生 AI圈又发生了啥新鲜事? 国星宇航实现全球首次卫星在轨AI大模型技术验证 国星宇航成功完成了全球首次卫星在轨运行AI大模型技术验证,验证了AI大模型在太空中的空间适应性和算力…

解决ERR_PROXY_CONNECTION_FAILED

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 错误描述 电脑无法正常上网,报错信息如下:ERR_PROXY_CONNECTION_FAILED;图示如下: 解决方案 请按如下步骤和方式解决该问题…

Linux 系统成为隐秘“Perfctl”加密挖矿恶意软件的目标

Aqua Security 的研究人员上周透露,数以千计的 Linux 系统可能感染了极难追踪且持久的“perfctl”(或“ perfcc ”)加密挖掘恶意软件,许多其他系统仍然面临被入侵的风险。 在观察到的所有攻击中,恶意软件都被用来运行…

C语言入门指南:为大一新生准备

C语言入门指南:为大一新生准备 C语言是许多编程语言的基础,许多现代编程语言(如C、Java、Rust等)都从C语言中汲取了灵感。因此,学习C语言不仅能帮助你掌握编程的基本概念,还能为学习其他编程语言打下坚实的…

ThinkBook 16+ 锐龙6800h 安装ubuntu键盘失灵

问题:在ThinkBook 16 锐龙6800h 安装ubuntu18.04 出现笔记本键盘按下延迟非常高,输出卡死的情况,但是外接键盘可以正常使用 解决:更新内核 1、进入 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 下载所需内核版本&#x…

Array类、引用类型

前面我们对数组的增加,删除,查找,更改都需要进行循环遍历,非常的麻烦。C#系统为我们提供了Array类,在这个类中定义了许多对数组进行操作的方法,我们可以直接用,从而提高效率。 索引查找: int[] a = { 1, 2, 3, 4, 3 }; int b=Array.IndexOf(a, 3);//第一个参数为数组…

判断是否为二叉排序树(二叉搜索树,二叉查找树)

1.判断给定的二叉树是否为二叉排序树&#xff0c;如果是返回1&#xff0c;不是返回0。 思想&#xff1a; 二叉树是左子树<根<右子树。中序遍历是递增有序&#xff0c;可以通过比较当前结点与前驱关系来进行判断。 代码&#xff1a; //pre为全局变量&#xff0c;保存当…

xmltodict 处理 XML 数据案例解析

简介&#xff1a;xmltodict 是一个用于将 XML 数据转换为 Python 字典的轻量级模块。它简化了 XML 数据的解析和处理&#xff0c;使得在 Python 中操作 XML 变得更加直观和方便。这个模块适合用于数据交换、配置文件解析等需要 XML 数据处理的场景。 历史攻略&#xff1a; loc…

软件验证与确认实验三-数据驱动测试

目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …

ASP.NetCore---I18n(internationalization)多语言版本的应用

文章目录 0.实现的效果如下1.创建新项目I18nBaseDemo2.添加页面中的下拉框3.在HomeController中添加ChangeLanguage方法4.在Progress.cs 文件中添加如下代码&#xff1a;5. 在progress.cs中添加code6.添加Resource资源文件7.在页面中引用i18n的变量8. 重启项目&#xff0c;应该…

【多线程】详解 CAS 机制

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. CAS 是什么1.1 CAS 具体步骤1.2 CAS 伪代码 2. CAS 的应用2.1 实现原子类2.1.1 AtomInteger 类2.1.2 伪代…

【2024最新】基于springboot+vue的教师人事档案管理系统lw+ppt

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…