當前位置:編程學習大全網 - 編程語言 - BPMN建模方法論

BPMN建模方法論

BPMN(業務流程管理)是壹種用於捕獲、設計、執行、記錄、測量、監控和控制自動化以及非自動化流程,以滿足公司的目標和業務策略的系統方法。

通過BPMN,流程可以與業務戰略保持壹致,藉由業務部門內部甚至超越公司邊界的流程優化,有助於提高公司的運轉效率。

BPMN在國內的應用很廣泛,但很多企業花費大價錢購買了第三方的流程平臺,卻沒有得到相應的收益;我認為其根本原因還是在於對BPMN本身的理解不足——它遠沒有看上去那麽簡單,僅僅是BPMN2.0版本規範文檔就已經達到了500頁。

因此,在我看來,要想順利的實施BPMN,壹個對它有透徹理解的設計者是必不可少的;同時,設計者還需要兼具業務思維、管理思維,和壹定的技術思維。

本文以壹個物業維修流程為例,目的在於介紹壹個系統的BPMN建模方法,為剛剛踏入這個領域的人提供壹個方向和選擇。

這是壹個典型的物業維修流程,這個流程提供的信息量很少,以至於如果我們要僅僅基於此去設計壹個完善的BPMN流程是幾乎不可能的,但是即便是最專業的物業管理師,這也是他們僅能提供的流程圖了.

為了達到我們的目標,我們需要先建立壹個戰略層面上的流程,它可能很粗糙,但是它的目的並不是在初期就呈現壹個完整詳細的視圖.

它的作用可能有如下幾點:

1.澄清什麽是,和什麽不是這個流程的壹部分

2.為流程確定資源和分配責任

3.確定關鍵績效指標並明確其特征

4.在對流程著手優化前先對其進行壹個大致的回顧

體積:戰略流程模型應當盡可能小,流元素最好不要超過10個,如果壹個流程橫跨幾張紙的話,是沒人能理解得了的.

語法:盡可能正確,但是在必要時可以不那麽嚴謹

想要對壹個流程進行初步建模,往往比想象的要難得多,有時手頭有充足的資料和標準的操作流程可以用,那會好些,但大多數時候都不得不去與客戶深入交流.

當產品去和客戶開會溝通時,我能很容易的想象到下面的景象——當妳只畫了壹個圈兩個矩形:

客戶參會人員:

我們的維修流程並不總是這樣從業主填寫維修單開始的,業主也可能是電話報修

如果維修的工程量比較大的話,我們還得先提出方案,然後交給公司領導審批

如果過了保修期的話,那我們還要收錢的

業主如果是預約的話,我們還得根據他預約時間安排工作

並不壹定是業主報修,也可能是在物業巡檢的時候發現問題,由巡檢員報修

..........

..........

..........

如果沒有壹個狠人來主持會議的話,產品會很容易迷失方向,也會導致客戶的參會人員對妳的方案失去興趣,更差的情況是,其他人糊裏糊塗地對壹個錯誤的模型達成了壹致.

所以主持會議的人,需要在開始的時候先聲明好:所有的流程模型都是不完整的,但是它依然有壹些作用.

在壹開始找出每壹種可能性是不可能的,在這次會議開始前,就應當告訴客戶,這第壹次的叠代目標是什麽.

1.我們要記錄流程從開始到結束的過程

2.我們最多只記錄這個流程的N個步驟

3.我們只記錄這個流程的標準形式

如果會議期間仍有人想跳出圈定的範圍,應當立刻阻止.

下面回到正題——物業維修流程.

基於上面的傳統流程圖,我們可以得到以下信息:

1.這個流程往往是由業主有維修需求引起

2.發起人填寫壹個維修單,發單部門(也就是行政部)將維修單提交到客戶服務中心,客戶服務中心的經辦人填寫工程單匯總表,然後把維修任務下發到維保部門,主任分配工作給維修工,維修工執行任務,並會同發單部門驗收以確認維修完成.

3.當維修完成的時候,這個流程也就結束了.

基於關鍵信息,我們可以構建如下的流程圖,這裏我們出於BPM原則,要先把結束事件放在需求方的泳道上.

盡管這個模型有很多問題,但是這個階段我們要確保客戶能毫不費力的理解它,因此做到這樣就可以了.

接下來,我們可以開始逐步的糾正這個錯誤的模型了.

首先是泳池和泳道,根據BPMN的規範要求,每個流程都應當有壹個最高的統籌者(這個請自行查閱BPMN規範),負責協調流程中的參與人和系統,但這個流程不是由流程引擎控制的(它是由發起人控制的),因此它目前不存在這麽壹個協調者,當業主報修時候,無法路由到下壹個活動 (如果把分配到下壹節點的受讓人當成壹種路由方式的話,那麽這時候其實是流程引擎在當協調者).因此這邊應該建模成消息流,另外,應當把業主分配到另壹個池裏.

我們建模越詳細,發現的問題也隨之增加,比如,業主如果中途不想維修了,在這個模型下流程是無法"正常"地結束的 ,如果需要滿足這個業務需求又不希望通過技術手段生硬的結束,那麽就會需要用到邊界事件;另外,如果維修工需要用到壹些材料的話,他該怎麽辦,是否需要申請,又向誰申請?

對於戰略模型,為了盡可能簡單,通常不會使用多個池,除非是像上面這種業主是獨立於物業公司之外的情況,可是由於我們的關註點依然應當集中在物業公司的內部流程上,因此接下來講業主的池進行折疊.

任務經常出現在戰略流程模型中,但是子流程很少出現. 在戰略流程模型中不會去指定任務的類型,也不使用除了循環之外的標記,因為循環相對來說很容易理解.

子流程應該細化流程模型,在維修流程模型中,我們定義的這些任務,背後可能並不簡單,他們可能對應著非常復雜的操作。 但是對於發單人填寫登記表這類任務,從我們得到的信息來看,只管填就行了,所以我們就還是把它們當做任務. 基於這些考慮,我們可以得到下面的模型.

我們只是對於可能存在復雜邏輯的任務做壹個子任務標記,就足夠了.

上面給出的模型,只是基於最常見的情況,對於壹些確實有必要做分支的情況,我們就需要用網關來對這類情況進行建模,但壹般來說不會在戰略流程模型中引入網關.

在戰略流程模型中使用的事件類型是有限制的:

空類型可以用在開始,中間,結束事件上,中間事件可以記錄流程執行過程中的某個狀態,客戶也很容易理解.

消息類型和定時類型可以被允許作為開始事件和中間事件使用,因為它們的符號壹看就能看懂,很容易理解.

至此戰略流程模型就可以結束了。

在操作流程模型中,就可以開始呈現出流程關於人和技術的細節了,這裏會涉及到壹些問題:

1.對於流程設計者:工作是如何完成的?

2.流程開發人員:需要通過流程引擎來實現什麽功能?

3.流程參與人員:該怎麽完成自己的工作?

要調和這三個角色並不簡單,而這也正是操作流程模型需要做的事情,如果很好的回答了這三個問題,那麽就可以得到以下好處:

1.操作流程模型的邏輯,在實際操作和技術實現上是壹致的.

2.縮小了業務和技術之間的理解溝通的溝壑,雙方以流程模型作為***同語言.

3.藉由流程引擎實現的流程,更易於觀測.

在這個層面上的模型,就不像戰略流程模型能容忍壹些語法上的錯誤了,我們必須按照規範來進行建模.

除了規範之外,必須實現的還有精確性,因為客戶需要根據這個流程模型安排工作,同時,我們也應當盡可能的不讓這個流程顯得過於復雜,畢竟流程參與者關註的是他們的工作本身而不是BPM,流程對於他們只是壹種達到目的的手段.

之前有說到,操作流程模型應當足夠精確但又不過於復雜,這聽起來可能很矛盾. 為此,我們先作壹張表格,來看看操作流程模型在三個角色中的視圖是怎樣的. 流程參與者只需要關註自己需要怎麽做,以及什麽時候需要等待其他人完成什麽,這樣就不會被其他人所做的細節分散掉註意力.

操作層面的流程模型的核心思想,在於區分編排和協作,如之前所講,每個流程參與者都有自己的壹個池.

把流程引擎作為壹個單獨的池,可以讓流程開發者更好的關註它.

流程設計者的角色在這邊非常重要,需要非常懂BPMN,並且能夠從不同參與者的視角對流程進行建模.

設計者的工序可能如下:

1.審查戰略流程模型

2.分割泳道到單獨的池

3.在不同參與者的視角下進行建模

4.為技術層面的建模做準備

5.進行技術層面的建模,不壹定可執行,目的在於細化模型

6.加上必要的註釋

當然這也只是壹種經驗方法而已,妳也可以直接在技術層面開始分析和建模,自下而上.

繼續我們的物業維修流程例子,為了簡化對於每個流程參與者的模型復雜性,我們需要將物業公司下面的三個參與者泳道都分割到單獨的池中,同時,我們也要解決壹些顯而易見的邏輯上的錯誤,比如:

1.驗收沒有聯合業主壹起

2.省略了倉管這壹參與者

3.省略了客服專員的每周匯總和進度督促.

4.業主報修的時候更多是電話申報

這裏最大的難點在於,由於存在代發起的情況,我們很難把業主的池和接線員的池完全隔離開,雖然在流程引擎的層面上可以用兩個流程變量來解決問題(發起人,擁有人),但是在模型展示的層面上這種辦法是沒法很好的表達出意思的,而且也會增加開發的工作量,因此我們可以采用多個開始事件的形式,來對這壹情況進行建模.

這就是將流程參與者分割到單獨的池後的模型圖,這裏依然存在壹些問題,比如我們還沒有對維修項目做分級,驗收未通過的話怎麽調整參數等等,但這壹步我們也只是澄清各個流程參與者之間的關系,沒必要過於深究.

從這壹步開始,往往就需要與流程參與人員進行更詳細的交流了.

從業主開始,我們可以看到業主相關的參與者有接線員,行政部門和機電維修部門,此時我們可以把這兩者的池進行折疊.

根據我們已知的業務場景:

如果業主申報的維修項目是有償服務,需要由客服與其進行再次確認

如果涉及付費服務,業主需要有壹個付款的操作

在更深壹步的考慮之後,我們發現業主池還會涉及到客服部門,最終我們得到如下模型.

行政部門的流程比較簡單,涉及到的其他池有業主和客戶服務中心:

客戶服務中心這邊應當註意,在客戶給出的傳統流程圖中,有提到定時性質的統計和催促的任務,這種情況我們應當將它作為另壹個單獨的流程模型,與當前的維修流程模型區分開來.

通過調研可以發現,客戶服務中心這邊往往在完成物業服務之後還會有壹次回訪調研的過程,因此在維修結束,確認業主驗收完成後,我們也應當加上回訪的過程,但是回訪並不存在於某個特定的流程中,因此我們在此處暫時省略,後續作為壹個獨立的流程進行建模.

另外,客戶服務中心還需要在派單之前與業主進行事前溝通,需要有壹定的規則來給維修事項進行分級:

1.是小修,中修,還是大修?

2.是否需要收費?

經過調研我們可以了解到:

三種類型的維修都有可能會需要收費

中修和大修往往還需要經過額外的審批流程才能繼續.

我把維修項目評估任務放在了這裏,是因為客服聯系業主之前需要知道維修的價格以及其他情況.

機電維修部這邊應當考慮以下因素:

主管分配工作的細節

1.是否應當記錄返工次數?

2.區分不同級別的維修項目

主管分配工作這個任務的前置條件是收到維修需求,確切的說,是收到由客戶服務中心填寫的工程單匯總表,當前表中已存在的屬性可能有客戶的姓名,維修地址,聯系電話,維修內容,預約時間等.

主管此時需要根據已知的情況,判斷當前的維修方案是否需要走額外的審批流程, 而這個流程,應當與當前的維修流程獨立開來. 至於這個額外的流程有著怎麽樣的過程,目前我無法得知,因此依然用壹個子流程來代替.

倉管這邊需要考慮驗收沒有通過的情況下,流程如何進行? 這裏的驗收事實上應當是物料倉庫的驗收,與維修流程無關,但是客戶往往無法清晰的表達出來這層意思. 因此這邊應當暫時省略驗收這個步驟, 作為壹個獨立的物料倉檢流程在下壹步的時候進行建模.

最後是接線員,接線員的流程比較簡單,接到電話報修後填寫維修單就可以:

之前都是講的人與人之間的流程,從這步開始引入流程引擎,原因之前也提及過,開發者需要知道他們要用流程引擎來做些什麽事情,因此這個步驟也會添加包括技術實現上的更多細節,比如對於業主是否已經付款的校驗.,但第壹版的技術流程模型 不壹定是可執行的 .

第壹版的技術流程模型如下:

再接下來的設計,就需要考慮更多外部因素了,如果我們發現維修流程中,某個泳道的流程能夠被其他的流程模型復用,我們就需要將他們抽離並單獨部署,如果我們滿足於將這個龐大的維修流程進行單獨部署,那我們可能還需要再做更多的修改,尤其是事件類型上(消息事件的用法在這裏是違反BPMN規範的,如果部署在同壹個流程定義中的話,更適合的是條件事件),情況不同,我們後續的設計和實現也會非常不壹樣.

對於當前這個維修流程,我更傾向於將所有流程都分開設計和實現,主要理由有如下幾點:

1.壹個龐大的模型,它的版本遷移過程往往非常復雜,如果將它進行恰當的分解,那麽我們只需要對發生了變動的部分進行遷移即可,可以有效的降低遷移成本

2.對於開發者來說,龐大的或者過於復雜的模型會導致理解和開發成本迅速上升,而且壹個單體模型,幾乎只能由壹個開發者來負責,不適合多人協作,而分解的手段可以將壹個單體復雜模型分解成多個簡單、可獨立開發的流程模型,可以提升開發效率和降低理解難度.

3.對於企業工作流來說,多個工作流之間經常會存在***通的部分,就像這裏的物業服務的回訪流程,將這些公***部分剝離出來,長遠來看,可以提升模型的復用率,從而提升開發效率.

但是這種方案的缺點也是顯而易見的,主要有:

1.分解到什麽程度並不那麽容易把握,雖然按照經驗來說往往是分解到每壹個流程參與者,但在有些時候也可以將壹些任務比較簡單的參與者流程進行合並.

2.為了實現流程實例之間的通信,往往會存在較多的消息/信號事件或者調用活動,要求開發者對BPMN中的事件有足夠的了解

3.流程走向的觀測可能會比較繁瑣,因為需要在多個流程實例之間來回切換觀察

下面給出第壹版的技術流程實現,它依然還有很多值得改進的地方,比如支付流程的分離和異常處理,維修主管分配任務的自動化規則,接線員流程的規則化(使用規則任務來根據輸入參數判斷該發送什麽類型的消息事件,可能是代填維修單,也可能是代填其他的表單),但出於成本考慮我們不可能就第壹版的實現去無止盡的細化:

/LLLLimbo/camunda-demo.git?

  • 上一篇:ai偽原創可以把文案改成西瓜視頻嗎?
  • 下一篇:如何調整對講機的寫入頻率
  • copyright 2024編程學習大全網