业务建模实战

2023-09-06  本文已影响0人  _张晓龙_

业务建模概述

“业务建模”中的业务指的是组织级别的知识,而不是领域知识。因此,“业务建模”这个名字可能起得不好,更贴切的名字应该叫“组织建模”,但出于对过去叫法的尊重,我们继续沿用“业务建模”这个名字。

为什么要业务建模

对于软件开发来说,业务建模的目的是为了得到待引进软件系统的需求。软件系统和人脑系统都是组织中的一个零件。开发团队经常发现需求“容易变化”。根源之一是需求的来路不正,没有把系统当作一个零件放在组织中来看,而是靠拍脑袋得出需求,导致得到的系统需求是错的。系统投入使用后,发现和组织的其他零件格格不入,自然要改。“需求变化剧烈”是一个假象,真正的需求可能没有变,只不过一开始得到的需求是假的。如果能正确运用业务建模技能,“需求变化”就会最大程度的收敛。

什么是业务建模

业务建模以某组织为研究对象,在组织之外和组织交互的其他组织(人群或机构)就是该组织的执行者。因为研究对象是一个组织,所以叫业务执行者。

组织内的人称为业务工人,例如某商业银行里面的营业员。业务实体是组织中的非人智能系统,例如银行的ATM、点钞机、营业系统。业务工人是可以被替换的人脑零件,它可能会被其他业务工人替换,但更有可能被业务实体替换。

业务执行者和业务工人的区别是:

在业务建模中,我们从内外两个视角来研究组织:

业务建模的主要工作是完成业务用例图和业务序列图,其中业务用例图描述业务执行者希望通过和所研究组织交互获得的价值,而业务序列图描述业务用例如何实现,是业务建模中最繁重的工作。

如何做业务建模

如何画业务用例图

业务工人和业务实体不在业务用例图中出现,因为它们不是组织的价值,而是成本。在识别业务执行者时,不需要画业务工人和业务实体。

业务用例图中业务执行者可以用小人表示,业务用例用椭圆表示,组织边界用方框表示。看到这里,有些熟悉系统用例图的同学可能有点蒙圈了,感觉这两个图很难区分。显然,它们都是用例图,从形状上看的确很想,但业务用例图的研究对象是组织,而系统用例图的研究对象是软件系统,我们可以通过边界框中的名字是组织名还是软件系统名来区分是业务用例图还是系统用例图。

如何画业务序列图

得到待改进组织的业务用例图后,就要考虑业务用例如何实现了,这就是业务流程。我们用业务序列图来描述业务流程,将业务流程看作是一系列业务对象之间为了完成业务用例而进行的协作。业务对象包括业务工人和业务实体,在业务序列图中被平等看待。

业务序列图的难点是理解消息的含义,即消息代表责任分配而不是数据流动。A 指向 B 的消息,代表“ A 请求 B 做某事”,或者“ A 调用 B 做某事的服务”,做某事是 B 的一个责任。在业务序列图中,消息表示为从一个业务对象的生命线指向另一个业务对象的生命线的箭头。注意,消息名称中不用带“请求”二字,因为消息箭头已经有请求的意思了。

消息类型主要包括简单消息、同步消息、返回消息、异步消息和自反消息,说明如下:

业务序列图还可以通过alt、loop等结构化控制片断来描述业务流程,强迫建模人员用这种方式思考。在业务序列图中,数据流仅仅作为消息的输入输出参数存在。如果不了解这一点,就容易把消息的方向当成数据流动的方向,不但消息名称没写对,还会出现成对的消息。

业务建模初体验

需求来源

代码打靶是一项高效的代码能力提升活动,可以带动打靶人员Code Review能力和编码能力的腾飞。打靶人员使用Web进行打靶,通过度量看板获得快速反馈,既可以明显感知近期的进步,又可以轻松拿到针对弱项的学习资料,从而进入了高效的正反馈循环。

triangle.png

代码打靶铁三角包括规范、内容和工具,说明如下:

业务用例图初体验

业务用例图需要考虑业务执行者、组织和业务用例:

对于代码打靶实践,业务执行者、组织和业务用例分别是:

根据概述中所说的画法,我们得到代码打靶实践的业务用例图:


shooting-usecase.png

业务序列图初体验

有了代码打靶的业务用例图后,就需要考虑业务用例如何实现了,这是业务建模中最繁重的工作。

最初打靶项目中的业务对象都是业务工人,即人工打靶。我们看看这时的业务序列图是什么样的:


shooting-seq-all-worker.png

说明如下:

人工打靶了一段时间后,大家发现:

基于上面两个原因,我们决定利用业余时间开发一款工具来辅助打靶,使代码打靶实践成本持续降低,以便过几个月后在组织中可以规模化推广起来。

这款工具我们称之为打靶服务(CodeShooting),在公司内仅部署一份,让打靶更美好!所有开发人员都可以通过人事账号登录,采用Web丝滑的进行打靶,并根据打靶结果有针对性的实施改进。有了工具的加持,打靶场景业务序列图发生了变化:多了业务实体打靶服务,虽然业务工人的数量没有发生变化,但他们的很多职责转移到了业务实体上,如下所示:


shooting-seq-cs.png

说明如下:

随着技术的发展,组织中的业务工人可能会被业务实体或其他业务工人替换,或者业务工人的部分责任转移到了业务实体或其他业务工人身上,责任转移的思想对识别待引入系统的需求很有帮助。开发人员说,“我在开发一个新系统”,其实说的就是“我在开发一个新的业务实体,取代现有业务工人或业务实体的一些责任”。这样,探索需求的思路就出来了:我们先画好现状的业务序列图,然后寻找改进点改进业务序列图。

业务建模再体验

业务用例代表组织的本质价值,很难变化,而业务用例的实现(业务流程)却容易变化。你可能会产生一个疑问:既然业务用例很难变化,那么代码打靶实践只有这一个业务用例图吗?

需求来源

随着代码打靶实践的规模化推进,打靶人员及所在的组织获得了较大的收益,可以从产品交付和能力提升两个维度来体现。

从产品交付维度来看:

从能力提升维度来看:

我们发现,有一些团队已将靶子建设内嵌到研发流程,如下图所示:


procedure.png

可见,收集靶子的时机,至少包括:

还有一些团队更进一步,自研了浏览器插件及配套的度量脚本,将靶场规范应用到了日常代码评审实践。这使得打靶不仅能用于能力提升,还能用于日常工作,并且使用方式是完全一致的。

这种浏览器插件的方式虽然提升了代码评审的效能,但是也存在一些明显的问题:

于是,很多人想到了,作为读者的你肯定也想到了:打靶服务对接Gerrit,支持日常评审及度量指标。

业务用例图再体验

对于日常评审实践,业务执行者、组织和业务用例分别是:

根据概述中所说的画法,我们得到日常评审实践的业务用例图:

review-usecase.png

业务序列图再体验

有了日常评审的业务用例图后,就需要考虑业务用例如何实现了,又到了体验业务序列图的时刻了......

打靶项目中涉及的业务对象包括规范专家、靶场管理员、Gerrit和打靶服务,其中Gerrit和打靶服务是业务实体。因为待评审的代码就是靶子,并且该靶子没有靶标,所以就不需要靶子建设了,相应的业务对象中也就没有靶子专家了。我们看看这时的业务序列图是什么样的:


review-seq.png

说明如下:

小结

本文针对代码打靶实践中的两个典型需求来源进行了业务建模的实战,传递了业务建模的核心技能,给出了探索需求的思路,希望对读者有一定的启发。

没有把系统当作一个零件放在组织中看,而仅从系统视角来探索需求是不全面的。靠拍脑袋得出的系统需求很有可能是错误的,因此我们需要增加组织视角来探索需求,并且先考虑组织视角再考虑系统视角。如果能正确运用业务建模技能,“需求变化”就会最大程度的收敛。

有了业务建模的铺垫,系统用例就呼之欲出了,敬请期待下一篇文章《系统用例实战》。

参考资料

上一篇 下一篇

猜你喜欢

热点阅读