需求和建模

“建模就是抽取名词和动词”

今天的内容关于需求和建模,相信很多小伙伴们都经历过相关的场景。也是开发过程中比较头疼的一部分,今天就来聊一聊它吧。

本文适合以下小伙伴阅读:

  • 开发新功能不知从何下手
  • 做了很多年开发,还是没有一套固定套路做功能设计

好了,正文开始!

需求

做开发的小伙伴们应该都接到过不少需求了。

这里不讲需求的定义了,我也讲不清楚,粘网上的定义也啰嗦,就随便聊聊吧。

这里简化一下,只聊两种角色(软件项目中角色很多很多):开发人员和需求人员。

假定的工作流程:
在这里插入图片描述
只简单假设

  • 开发人员接需求,做功能
  • 需求人员接收功能,提供需求

那来逐个分析:

开发人员视角

对开发人员来说当然期望有”好“的需求。

那啥是好呢?我觉得是对开发人员好的需求应该是明确、清晰的。那需求中明确提出模型就更好了。

需求人员视角

需求人员希望能更快地提需求(方便去做主要工作),更快地获得更好的功能。

对于提需求这点,很多需求人员说的都不标准,有时甚至文字描述都很少。

其实也难为他们,工作领域不同,思维习惯也不一样,难免的。

而且对于他们来说,提需求不是主要的工作内容,只是额外开个小差,也不需要多精进这方面的能力,所以花一小部分时间弄一下也就是了。

所以一般出的需求说明书都是不准确、非模型化的。

说到这里可能有人发现了,不管是开发人员还是需求人员,都不想做“建立模型”这块工作。

好像都想把这块工作推出去(笑哭)。

但软件的编写和运行却又少不了准确清晰的模型

所以这时,需求人员和开发人员都会很难过:

  • 需求人员总是得不到想要的功能,且多付出很多成本(时间和经济)
  • 开发人员的工时变长,且返工率变高

那要怎么办呢?

肯定是有人把这块的职责担起来呀。需求人员我们无法控制,只能我们开发人员做建模的工作了。

但其实,建模的工作看起来也挺酷的,学会它也很好啊!

那在讲建模之前,先聊一下我对需求和模型间关系的理解吧,看完可以更好地理解建模过程。

现实世界、需求、模型的关系

说一下我对需求的前后关键概念的理解:

现实世界、需求人员眼中的业务模型、需求、软件模型(1、2、3)

现实世界:
在这里插入图片描述
现实世界是一个比较混乱的东西,没有固定的形状,描述也难,类比成不规则的线条。

需求人员眼中的业务模型(具化为两个业务点):

在这里插入图片描述
需求人员眼中的业务模型有两层:

  • 内层是清晰的,表示需求人员自己明确知道的业务逻辑
  • 外层是模糊的,表示需求人员自己不太知道,或者不太明确的业务逻辑。

需求那边也不一定知道所有的逻辑(没人能全知全能嘛),所以总有些东西是模糊的。

总体类比成上图,有清晰的部分,也有模糊的部分。​

需求:

在这里插入图片描述
图中位于上方的、线状的是文字描述的类比图。
图中位于下方的、几何图形的是模型描述的类比图。

需求信息一定会比真实世界的信息少,缺少细节。而且,需求人员也不太可能把所有自己已知的东西都正确清晰地表达出来。

所以对于文字描述,类比成线状的图形,且与比之前的真实世界的图形更平滑(相当于信息少了),且波峰波谷不完全一致(象征着与现实世界的差距)。

而且,以此为依据的建模,也肯定与真实的业务模型相悖。

所以,为了方便多视角观察,图中的下方图形则给出了另一个关于模型的视角:

虚线部分表示需求人员自己明确的自己的业务模型,而实线部分表示的是软件建模时的模型。

实线框大部分在虚线框内,小部分出了实线框。表示因为信息的丢失与错误,大部分需求能满足,但小部分需求满足不了,也可能出现需求人员非预期的问题。

软件模型:

我将软件模型分为三个阶段,下面分别介绍:

阶段一:软件早期模型

在这里插入图片描述
此阶段的软件模型与需求人员脑中的模型并不十分匹配,但有一定匹配度,也能完成一些需求人员要求的业务操作。但对于使用者来说,总是有哪些地方用着不舒服,有些问题甚至会拉低业务效率。

阶段二:软件成熟期模型

在这里插入图片描述
此阶段的软件模型已经完全覆盖需求人员脑中的模型。此时需求人员对功能没什么建议,软件也可以完整地支撑业务。

阶段三:软件完美期模型

在这里插入图片描述
此阶段的软件模型已经已经与需求人员的脑中混乱的知识边界重合。说明此阶段已经由开发人员(或建模人员)与需求人员沟通多次,开发出了需求人员的潜在需求和业务逻辑,使需求人员的需求更加符合现实世界。

此模型是理想状态的模型,需要多方共同努力才能完成建立。

建模

软件其实是对现实的模拟和抽象。

需求中,一定有一些文本描述(当然有图什么的更好了)。

所以在不考虑极限性能的情况下,设计不需多考虑计算机相关的内容,只需要反应现实的模型就可以了。

下面举例说明,如何从需求中抽出模型

案例解析:贪吃蛇小游戏

需求人员:

  • 我要做一个贪吃蛇小游戏
  • 蛇能吃东西,吃了东西就会变长

开发人员(建模人员)【抽取动名词】:

  • 名词:我、蛇、东西
  • 动词:吃、变长

分不清动名词的看这里:
简单来说就是:动词是动作,名词是东西。

开发人员(建模人员)【思考】:“我”这个概念好像没用,删掉。“东西”这个概念好像不对,应该是“食物”。

开发人员(建模人员)【动名词回顾】:

  • 名词:蛇、食物
  • 动词:吃、变长

开发人员(建模人员)【思考】:按照面向对象的思想,“吃”和“变长”应该都是蛇的动作。那现在蛇的动作关联上了。需求里提到了,”吃“后会“变长”,可是什么时候“吃”呢?

开发人员(建模人员)【沟通】:蛇吃东西,这里的东西是食物吗?

需求人员【沟通】:是的,是食物。

开发人员(建模人员)【沟通】:那”吃“这个行为发生在什么时候?或者描述一下怎么“吃”的?

需求人员【沟通】:就是蛇会一下一下地走,然后碰到了东西就会吃掉。

开发人员(建模人员)【思考】:又用了“东西”这个词(汗)。直接替换成“食物”。

开发人员(建模人员)【思考】:出现了两个新动词:“走”和“碰”

开发人员(建模人员)【沟通】:也就是说,蛇会“走”,我理解成“移动”没问题吧?

需求人员【沟通】:当然了,要不然是啥

开发人员(建模人员)【沟通】:那“碰”是什么意思?应该是“蛇”来“碰”东西吧?那具体来说就是,“蛇”能碰什么?

需求人员【沟通】:就是能碰墙,碰到墙就死了。对了,碰到身体也会死。还有,刚刚说的吃,碰到食物就会吃掉。

开发人员(建模人员)【思考】:又多了两个新名词:“墙”、“身体”。然后明确了一个细节:“碰”到食物就会“吃”掉。还有一个动词“死”。

开发人员(建模人员)【思考】:而且,提到了“身体”,那它应该代表“蛇身”。那是不是还有蛇头呢?

开发人员(建模人员)【沟通】:我看提到了“身体”,我理解是指的“蛇身”吧?那是不是还有“蛇头”?

需求人员【沟通】:当然是了,都是。有蛇头,蛇头来吃东西嘛。

开发人员(建模人员)【思考】:那就是”蛇身“、”蛇头“。蛇头“碰”到“食物”触发“吃”动作。”蛇头““碰”到“蛇身”或“墙”触发“死”动作。

开发人员(建模人员)【动名词回顾】:

  • 名词:蛇、墙、蛇身、蛇头、食物
  • 动词:移动、碰、吃、变长、死

开发人员(建模人员)【机制回顾】:

  • “蛇头“”碰”到“食物”触发“吃”动作
  • ”蛇头““碰”到“蛇身”触发“死”动作
  • “吃”动作会触发“变长”动作

开发人员(建模人员)【思考】:那“移动”怎么办?上面提到了一步一步地”移动“。

开发人员(建模人员)【沟通】:我刚刚想了一下,没太明确“移动”是怎么移动的?我记得说的是“一步一步地”移动。是那样类似一秒一次这种吗?

需求人员【沟通】:对,差不太多的。就是一下一下地动嘛。然后玩家用键盘按上下左右,它就往哪走,吃东西去了。

开发人员(建模人员)【思考】:上下左右?那看来是方向,确认一下。

开发人员(建模人员)【沟通】:那“上下左右”说的是方向是吧?就是说蛇是根据玩家的输入,会向不同方向移动。

需求人员【沟通】:对对对,就是这样。

开发人员(建模人员)【思考】:那又多了一个名词:“方向”

开发人员(建模人员)【动名词回顾】:

  • 名词:蛇、墙、蛇身、蛇头、食物、方向
  • 动词:移动、碰、吃、变长、死

开发人员(建模人员)【机制回顾】:

  • “蛇头“”碰”到“食物”触发“吃”动作
  • ”蛇头““碰”到“蛇身”或“墙”触发“死”动作
  • “吃”动作会触发“变长”动作
  • ”蛇“根据玩家的输入,改变“方向”
  • “蛇”根据“方向”,一步一步地(周期触发)”移动“

开发人员(建模人员)【思考】:现在看起来机制暂时可以连接起来了,接下来做个小成本的demo给需求人员确认后再继续沟通吧。

开发人员(建模人员)【沟通】:ok,那我暂时没什么问题了,感谢您的配合。下次会做出demo继续沟通!

相信大家应该到现在也看出来了:上面的动词和名词分别对应面向对象编程(OOP:Object Oriented Programming)中的属性和方法。

上面基本的需求现在清晰多了,可以开启IDE,进行快乐地开发了!

小贴士:开发目标以机制作为目标,一个一个实现,这样就可以更好地量化开发进度了!

总结

通过文字需求建模的方法:

  • 抽取动名词作为建模的开始
  • 过程中通过互相沟通来完善模型和机制
  • 确认机制初步完备后,为本轮建模的完成标识

可以上述通过一轮一轮的建模与迭代,逐步完善模型和程序。

内容还感兴趣吗?公众号中会有更多相关内容持续更新哦
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值