針對張逸觀點的一些評點

  • 2019 年 10 月 6 日
  • 筆記

我看到張逸老師在最近的一些文章中喜歡提「老」字,例如:

「我充分借鑒了事件風暴這種新方法,卻又未完全拋棄UML這種老方法」

「若有可能,我還希望再加上一個ICONIX方法,雖然它已經垂垂老矣,但該方法蘊含的一些設計思想仍有值得借鑒之處」

張逸老師的關注點從編碼拓展到軟件開發的全部工作流,值得稱讚。不過每個工作流有各自的技能需要學習,是自己的感悟還罷了,如果要傳授技藝給他人,更需要高標準嚴要求才對。

所以,我就用建模思維剖析張逸老師近期發表的一些內容,供大家參考。

就先從張逸老師上面這兩句話開始吧。

一、不是什麼都叫「方法」

上面這兩句話,張逸老師對各種概念一律以「方法」稱呼之。其實UML是「Unified Modeling Language」,是「語言」,或者「表示法」(Notation)。

ICONIX則是Doug Rosenberg等人提出的一種使用UML的建模過程(Process)。我們先來看2001年的著作:

圖1 摘自Rosenberg, D., Scott,K., Applying Use Case Driven Object Modeling with UML: An Annotated e-CommerceExample. Addison Wesley (2001)

再來看2007年的著作:

圖2 摘自Rosenberg, D., Stephens,M., Use Case Driven Object Modeling with UML: Theory and Practice. Apress (2007)

關於方法、過程和工具的定義,可以參照被廣泛使用的教材「Software Engineering: A Practitioner's Approach」,2014出了第8版。

圖3 摘自Pressman R.,Maxim B., Software Engineering: A Practitioner's Approach 8th Edition. SEM(2014)

我於2008年寫的《四十年軟件工程故事》(http://www.umlchina.com/book/se40.htm)也可以參考。

為什麼對這些不當用詞如此重視,我在《為什麼要對術語"吹毛求疵"》一文(http://www.umlchina.com/qa/Content/906.htm)中闡述了我的觀點:

我們聽到有人像上面的姨媽表哥一樣說話時,我們心裏知道,這可不是什麼習慣用語不同,而是說話的人是外行。因為我們是內行,我們比姨媽表哥們更知道一些概念之間的區別。

同理,如果我們真的弄懂了軟件開發中的一些重要概念,當有人在我們面前說"功能模塊"、"用戶需求"、"設計階段"等術語時,我們心裏就知道了,這不是什麼習慣問題,而是這個人在某些方面是個外行。

二、關於「老」

人們對事物的認識會不斷深入,所以,已有的知識有的會被繼承,有的會被淘汰。但是要注意,之所以某些知識會被淘汰,是因為人們針對這方面的知識有了更深刻的認識,而不是因為法律規定這個知識只有「**年**權」,到時間就要強行作廢。幾百年前的數學、物理知識,大部分我們今天不還在繼續學習和使用嗎?

圖4 摘自《中華人民共和國城鎮國有土地使用權出讓和轉讓暫行條例》

既然張逸老師說「UML」、「ICONIX」老、垂垂老矣,那我請問張逸老師,能否具體說說看UML、ICONIX到底有哪些缺點,看看能不能說到位?但願不是為了強調自己的「新」而隨口一說。

我不認為UML這個建模語言是完美的,也不認為ICONIX這個過程的做法有多好。我甚至認為經過將近20年的積累,對於建模和UML的下一步改進,我的認識也許比起很多國外的人士更深刻。我還相信我在《軟件方法》中提倡的過程比ICONIX(以及其他一些類似過程)要更高效實用。

不過,絕大多數軟件開發人員基本上是「赤手空拳」,根本沒有達到被UML的不完美和ICONIX的不足絆倒的地步。事實上,就算有人不使用UML里的圖,能熟練使用數據流圖和實體關係圖建模,或者把能把ICONIX那幾招用熟,我覺得他就已經高出周圍的人一大截了。

NBA的格林可能清楚詹姆斯有啥缺點,但這對業餘球員來說有多少參考價值?

癌症的化療、放療有局限性和副作用,是需要有更好的治療手段,但方嚮應該是更精細的免疫治療,而不是拿幾味中藥湊一湊得出來的「癌必靈」。

三、「痛點」離「問題域」還有多遠

圖5 摘自張逸文章《領域驅動戰略設計暨微服務設計工作坊》

「域」是一個面積或範圍較大的概念,「點」是面積或範圍很小或近似於零的概念,兩者不能等同。

也許張逸老師要表述的意思是:通過痛點來判斷哪一塊領域需要建模。就像在人體按下痛點來判斷哪一塊區域需要深入研究。這樣的表述更容易理解一些。

即使換了表述,也還是不準確,因為從「痛點」到領域模型,還有一段距離。「頭痛」的問題未必在頭。

先列舉一些建模知識點,更詳細內容請參見《軟件方法》。

★序列圖消息的含義:A指向B,意思是「A請求B做某事」。例如圖6中,患者請求門診收費挂號員辦理挂號。如果發消息的是人,接收消息的是非人智能系統,意思符合「A用B來做某事」也可以。★業務工人(Business Worker):組織內的人員,即人腦智能系統。★業務實體(Business Entity):組織內的非人智能系統。★業務流程信息化改進模式一:物流變信息流模式二:改善信息流轉模式三:封裝領域邏輯

通過下面例子來說明問題。某醫院現在有個「痛點」:輸液反應的投訴比往年多了。

這個「痛點」和需要改進的範圍不是一一對應的。

【可能原因一】

有人組團碰瓷。

【改進方案】

1.1 引進一批記憶力好的高級保安(業務工人)盯牢每一個患者,發現可疑人員報警,如圖6。

圖6 改進方案1.1,引進業務工人

1.2 如果一定要「信息化改進」,可以應用改進模式三「封裝領域邏輯」,引進一套人物特徵識別系統(業務實體),把「監控人物特徵」的邏輯從高級保安的大腦轉移到人物特徵識別系統,並爭取和公安部門的業務實體對接。一旦檢測到碰瓷黨到來,直接報警並通知挂號員,如圖7。

圖7 改進方案1.2,業務實體替換業務工人

由圖7可以映射出「人物特徵識別系統」的用例圖,也就是用例級別的需求,如圖8。補充上用例的涉眾利益、路徑、步驟、補充約束,就得到完整的系統用例規約,即以用例為組織形式的需求規約。

圖8 人物特徵識別系統的用例圖

可能有的人會問,這個系統應該還有其他用例吧?例如有個人用這個系統來設置一下規則?可能有,也可能沒有(讀者可以想一想,為什麼可能沒有?)。不過再有100個也不影響,因為每次迭代只需要關注最重要的用例,永遠都在路上。

如果某個已有的非人智能系統已經提供了這個用例,評估過後覺得確實滿足需求的約定,那事情到此為止,不用操心後面的分析設計工作流了。

如果沒有現成的可用,還是要做,那就開始分析工作流。

只要構造出來的系統履行了需求的約定,按照哪種分析設計方法學來構造系統都可以。如果用面向對象分析設計方法學來構造系統,我們假設系統由「對象」這樣一種東西構成。在分析工作流,系統中的對象在一個虛的"對象空間"中運行。這個空間不是內存,也不是硬盤,只是人腦中的一個邏輯空間。

可能的分析類圖如下:

圖9 人物特徵識別系統的分析類圖(不熟悉這個領域的邏輯,僅屬猜測)

【可能原因二】

中國逐漸進入老齡社會,老年輸液患者的人數越來越多。

【改進方案】

2.1 不改進,主管部門理解就行。

2.2 在內部下密令,醫生開醫囑時,留心看一眼HIS系統里的患者資料。針對老年患者開醫囑時,盡量不要有輸液內容,如圖10。

圖10 改進方案2.2-讓醫生(業務工人)判斷是否老年患者

2.3 如果一定要「信息化改進」,可以應用改進模式三「封裝領域邏輯」,在現有HIS系統里添加一些邏輯,醫生在給老年患者開醫囑時,HIS系統提醒一下,如圖11。

圖11 改進方案2.3-HIS判斷是否老年患者

HIS系統已有的用例「開醫囑」中,會多一些步驟(判斷是否老年患者、提醒醫生……)和補充約束(判斷老年患者規則)。HIS系統內部可以不增加新的類,可以在原有「患者」類上增加一個操作「判斷是否老年患者」,在原有「醫生界面」類上增加一個操作「提醒醫生有老年患者」。

【可能原因三】

醫院採購部門人員和廠家勾結,為了獲取回扣而購買劣質藥品和器械。

【改進方案】

3.1 改進採購流程。例如集中採購權,由採購辦主任把關審查。

圖12 改進方案3.1-採購辦主任把關

3.2 如果一定要「信息化改進」,可以應用改進模式一「物流變為信息流」,改為通過信息系統傳遞採購申請,取消各部門採購人員的責任;應用改進模式三「封裝領域邏輯」,將採購辦主任大腦里的審查邏輯封裝一部分到HIS系統中,如圖13。

圖13 改進方案3.2-通過HIS系統傳遞信息,由HIS系統封裝領域邏輯

從圖13可以看出,HIS系統多了兩個用例:

圖14 HIS系統多了兩個用例

要實現這兩個用例,可能的類圖如下:

圖15 HIS系統可能需要增加和修改的類

【可能原因四】

護士職業技能或職業素養存在問題,例如對患者宣講不到位,無菌操作不到位,沒有根據患者差異調節輸液速度等。

【改進方案】

4.1 加強培訓,加強監督,加大獎懲力度。例如,增加暗訪人員:

圖16 改進方案4.1-增加暗訪人員

4.2 如果一定要「信息化改進」,可以把業務工人「暗訪員」替換成業務實體「監控系統」,事後安排監督員觀看錄像並評價。

圖17 改進方案4.2-引進監控系統代替暗訪人員

在市場上購買通用的監控系統應該可以滿足需求。

4.3 更進一步的信息化改進,可以把護士這個業務工人去掉,用業務實體「超級輸液機」和「無人運葯小車」代替。

圖18 改進方案4.3-引進超級輸液機和無人運葯小車

從圖18可以映射出「超級輸液機」的用例:

圖19 超級輸液機的用例

可能的類圖如下:

圖20 超級輸液機的類圖

由上可見,針對一個「痛點」,可以有很多改進的可能。不同的可能中,是否需要引進信息系統,引進新的信息系統還是在原有信息系統上改進,又有不同的選擇。不管是哪一種選擇,推導的思路是清晰的。

未完待續……

接下來的論題:

四、內外不分,對問題域(Problem Domain)的誤用

五、需求、分析……是階段嗎

……