用A-Spice思路解讀“西門慶和潘金蓮的不可描述之事”,不信你看不懂
四大名著之一《水滸傳》,我想很多人都看過吧,你是不是對(duì)“西門慶和潘金蓮的橋段”反復(fù)琢磨呢?哈哈,我想你是個(gè)好學(xué)的人,施耐庵也不惜重墨描繪這一章節(jié)。
王婆的“十分光”計(jì)謀簡直讓我“虎軀一震”,瞬間感慨這婆子肯定是一個(gè)思維縝密的程序員,軟件界少了她都黯淡了不少。
你沒看過《水滸傳》也沒關(guān)系,《金x梅》也有相同的情節(jié),后者算是基于前者的二次開發(fā)了,描述更刺激,對(duì),我是說王婆是個(gè)狠角色。
Note:《水滸傳》的第二十四回“王婆貪賄說風(fēng)情 鄆哥不忿鬧茶肆”和《金x梅》的第三回“定挨光王婆受賄 設(shè)圈套浪子私挑”有相同的情節(jié)。
上車坐穩(wěn)扶好,下面用A-Spice的方式解讀下這個(gè)故事情節(jié)。
為了到了更刺激更震撼的理解體驗(yàn),我們先復(fù)習(xí)下什么是V模型。不要想歪,不是女主的深V也不是大V,是A-Spice里面的V模型,管理設(shè)計(jì)流程用的,或者你戳這文章看《A-Spice中性感的V》。完全不懂A-Spice或者V-Cycle也沒關(guān)系,你看下圖,按V字母筆順就是產(chǎn)品和軟件的開發(fā)過程。
話說,《水滸傳》是講忠義豪杰的故事的,為了更能讓故事情節(jié)更加“引人入勝”,于是“甲方”提了個(gè)需求:
撮合潘金蓮和西門慶搞點(diǎn)不可描述的事情,以凸顯武松的嫉惡如仇,然后逼上梁山。
要求“乙方”要想辦法實(shí)現(xiàn)這個(gè)需求。
“甲方”的需求往往就這么簡陋無比,作為優(yōu)秀的“乙方”不能看著需求就直接瞎掰,還需要進(jìn)一步去挖掘更多信息。這個(gè)“進(jìn)一步挖掘更多信息的過程”就叫SYS.1 需求挖掘。即在整個(gè)開發(fā)過程保持各方溝通以獲得更多需求信息,保持你做的跟甲方要的是同一個(gè)。
那么這個(gè)故事,怎么挖掘需求?就好像做項(xiàng)目,要知道項(xiàng)目的背景,為什么要搞一段潘金蓮和西門慶之間的齷齪之事。
那你就要去看看《水滸傳》的上一回,就是武松打虎回來之后的事。在這里,挖掘點(diǎn)重要信息:
-
潘金蓮原是清河縣某大戶的使女,這大戶想潛規(guī)則她,但她不愿意,向主人婆報(bào)告了這事。這大戶一怒之下,將潘金蓮“送給”了武大郎,不用錢的那種(羨慕吧,不要臆想哈)。
- 這武大郎是誰?“矮矬窮”,原文說是“三寸丁谷樹皮”。
- 漂亮媳婦配矮丑丈夫容易惹麻煩,從清河縣搬到陽谷縣。
- 武松是武大郎弟弟,高大威猛,醉打吊睛白額虎。
- 潘金蓮看著武松胸肌勃勃,激發(fā)了其雌性荷爾蒙,芳心蕩漾,想方設(shè)法勾引武松。
- 武松是誰,堂堂正正的男子漢,怎么可以做這等勾當(dāng)。于是在他出差之前,告訴他哥哥要看好這媳婦,不要被人勾走了哦。
-
...
以上,就是把這些信息挖掘出來,用粗略點(diǎn)的圖示可以大概勾畫出來人物的關(guān)系和行為動(dòng)作:
這還要挖掘下系統(tǒng)硬件上的信息,大戶家和武大郎家是在清河縣住的,而王婆、武松和后面出場(chǎng)的西門慶在陽谷縣住的。
怎么才能客戶的需求順理成章地實(shí)現(xiàn)呢?這就需要做需求分析了,即SYS.2 系統(tǒng)需求分析過程。
其實(shí)系統(tǒng)需求分析和需求挖掘是分不開的。前者注重“分析”,有疑問需要跟甲方溝通,繼續(xù)挖掘更詳細(xì)的信息,即后者注重“挖掘”。做項(xiàng)目過程中一般通過QA的方式跟甲方澄清需求,甲方也會(huì)通過CR方式來增加或變更需求。
那么,系統(tǒng)需求分析,做些啥?
講點(diǎn)項(xiàng)目上的話題:系統(tǒng)需求分析跟后面要講的軟件需求分析是有區(qū)別的。前者注重系統(tǒng)層面的需求,后者關(guān)注軟件上的需求。能不能說前者包含后者。內(nèi)容上是可以的,但是細(xì)節(jié)、邏輯表達(dá)上是不行的。這導(dǎo)致有些公司,只有需求分析這個(gè)崗位,而不分系統(tǒng)需求還是軟件需求,節(jié)省不少人力成本。但是嚴(yán)格按A-Spice流程做項(xiàng)目是有問題的,對(duì)下面的軟件設(shè)計(jì)和測(cè)試都有非常大的影響。
挖掘出的一堆需求,不一定全部都有用,需要提取分析,做好整理。例如清河縣的大戶一家,其實(shí)沒必要關(guān)注的了,只需做個(gè)參考,知道潘金蓮的來歷即可。后面潘金蓮勾引小叔子武松,這條需求有沒有用。有用,可以給潘增加一個(gè)屬性,即不安分、水性楊花等,容易出軌。
武松提醒其大哥,要看好嫂嫂。那么就給了建議,天還沒黑就關(guān)窗拉簾子了。
就在此時(shí),關(guān)鍵信息來了,關(guān)窗的時(shí)候,木棍不小心掉下了,又恰好砸到了西門慶的頭上,那么西門慶抬頭一看,哎呀不得了,就這樣迷上了這小娘子。這西門慶偏偏又是個(gè)破落戶,特點(diǎn)好色。這個(gè)潘金蓮偏偏又是個(gè)水性楊花。
就這樣,故事快要發(fā)生了,差點(diǎn)啥來著。
王婆,就這樣出現(xiàn)了,是武大郎鄰居,干過媒婆角色,業(yè)務(wù)能力奇強(qiáng),沒有撮合不了的。這能力強(qiáng)的人往往表面不表現(xiàn)在這一行的,對(duì),她開個(gè)了茶坊,平時(shí)蒼蠅都沒幾只都無所謂,不影響她是干媒婆角色的。
說到這,系統(tǒng)需求可以整理出哪些?
-
潘金蓮水性楊花,不愛武大郎,卻被管住了,按奈不住要出軌;
- 西門是個(gè)破落戶,有點(diǎn)錢,特別好色,按奈不住要拈花惹草;
- 王婆,拉皮條能力一絕,還貪財(cái);
- 武大郎家有個(gè)門窗,木棍是搞活動(dòng)的,容易掉;
- 這個(gè)門窗是正對(duì)著外面大街的;
- 武大郎家和王婆的茶坊很近,算是鄰居;
- 西門慶被潘金蓮木棍砸到,抬頭望,被迷??;
- 西門慶跟王婆很熟,常在茶坊喝茶;
- 王婆看出西門慶的心事;
-
王婆給西門慶獻(xiàn)計(jì)。
這里,做系統(tǒng)需求分析的時(shí)候要做好分類,有靜態(tài)的有動(dòng)態(tài)的,有硬件需求也有軟件需求,同時(shí)要做好需求可行性分析。
我們這里把人物和其活動(dòng)歸類為軟件需求,家、茶坊以及門窗木棍等這類的當(dāng)做是硬件需求。
可行性呢?就是這些需求分析下來,能不能讓王婆撮合這對(duì)J夫Y婦干出不可描述的事。其實(shí)上面的分析已經(jīng)分析出來了,一個(gè)水性楊花,一個(gè)好色,一個(gè)擅長撮合,都是鄰里街坊。你說,可行么?
接下來,要干嘛呢?大家不要猴急,接下來是SYS.3 系統(tǒng)架構(gòu)設(shè)計(jì)。
要將上面系統(tǒng)需求表達(dá)到系統(tǒng)框架中,例如這個(gè)靜態(tài)的系統(tǒng)框圖:
那要不要?jiǎng)討B(tài)行為圖呢,我覺得系統(tǒng)層面的,是要的。限于篇幅,我們?cè)佘浖軜?gòu)處在講解吧。
這里還要提的,系統(tǒng)設(shè)計(jì)也有很多要求的,不僅僅是這個(gè)框圖,還有需求的部署,資源預(yù)估,例如干成這勾當(dāng)要多少銀子,買點(diǎn)布料讓潘金蓮做針線等等。還有這系統(tǒng)方案后面怎么實(shí)施,如何測(cè)試驗(yàn)證等。
系統(tǒng)方面的,就簡要講這么多吧。下面講重點(diǎn),軟件過程的設(shè)計(jì)。
接下來就是SWE.1 軟件需求分析了。
也許還是很多人要問,軟件需求跟系統(tǒng)需求的區(qū)別。
軟件需求是來源于系統(tǒng)需求和系統(tǒng)架構(gòu)的,但是側(cè)重點(diǎn)不一樣。
例如,系統(tǒng)需求的1/2/3/7/8/9/10都可以認(rèn)為是軟件需求,對(duì)其加以在軟件層面的分析即可。例如這個(gè)人物的設(shè)計(jì),可以將其設(shè)計(jì)成一個(gè)類,帶著很多屬性(水性楊花、好色等)和方法(開窗、喝茶、獻(xiàn)計(jì)等)。
也許你會(huì)認(rèn)為,這不是軟件設(shè)計(jì)的事情嗎,其實(shí)你是在軟件設(shè)計(jì)的時(shí)候把軟件需求的事干了而已。
這里,我們要重點(diǎn)研究獻(xiàn)計(jì)這個(gè)方法,可以理解它是一個(gè)很重要的算法,在王婆這類里面實(shí)現(xiàn)。
原文說,這個(gè)計(jì)謀叫做“十分光”計(jì)。我把幾千字的計(jì)謀內(nèi)容提煉以下:
-
一分光:西門慶送點(diǎn)衣料給王婆做壽衣,王婆約潘金蓮來做針線活,看她肯不肯;
- 二分光:做針線的地點(diǎn)約在王婆家,看肯不肯;
- 三分光:第二日看潘金蓮是否繼續(xù)愿意在王婆家做針線;
- 四分光:第三日,西門慶出現(xiàn),看看潘金蓮是否回避回家;
- 五分光:王婆夸西門慶發(fā)善心,西門慶夸潘金蓮針線活好,看能否聊下去;
- 六分光:王婆出去買酒,買零食,看潘金蓮是否回避回家;
- 七分光:王婆要潘金蓮跟西門慶獨(dú)處,聊聊天,看潘金蓮是否回避回家;
- 八分光:吃酒嗑瓜子,看潘金蓮愿不愿意跟西門慶坐同桌;
- 九分光:吃到差不多,突然沒酒了,王婆去買酒,把這兩人關(guān)一屋子,看啥反應(yīng);
-
十分光:西門慶甜言蜜語、得寸進(jìn)尺,看啥反應(yīng)……
到這一步,軟件分析其實(shí)已經(jīng)很詳細(xì)了,這個(gè)算法思路也很清晰的了。
你按奈不住要寫代碼來實(shí)現(xiàn)這段不可描述的事情了?別急,接下來是SWE.2 軟件架構(gòu)設(shè)計(jì)。
軟件架構(gòu)設(shè)計(jì)討論跟系統(tǒng)架構(gòu)設(shè)計(jì)的討論很相似,前者是關(guān)注軟件層面的。
我們可以把每個(gè)類設(shè)計(jì)成一個(gè)組件,并把類的接口定義清楚。
上專業(yè)的設(shè)計(jì)工具EA,為了簡要說明這個(gè)不可描述的情節(jié),部分需求沒有完全體現(xiàn)在這架構(gòu)里面。(這里省略了WuDalang的角色)
還可以通過類圖的Interface來強(qiáng)調(diào)這個(gè)“十分光”計(jì)(TenSteps_Trap)以上是簡單的靜態(tài)圖描述,還要做動(dòng)態(tài)行為描述:
注意這個(gè)動(dòng)態(tài)時(shí)序的接口要和組件提供的接口一一對(duì)應(yīng),如果前后不一致就是做設(shè)計(jì)不嚴(yán)謹(jǐn)。
除了組件框圖、類圖和時(shí)序圖,還要有其他的設(shè)計(jì),例如資源預(yù)估,線程任務(wù)等。(本文重點(diǎn)討論不可描述的情節(jié),其他工作暫且省略)
接下來,能寫代碼了嗎?看你急的,SWE.3 軟件詳細(xì)設(shè)計(jì)才是下一步(心急吃不了熱豆腐)。
一般,詳細(xì)設(shè)計(jì)用什么方法做呢?類圖和流程圖是最常用的,還有接口描述以及其注意事項(xiàng)。以下挑幾個(gè)來講解:
1. 類圖
2. 接口說明
接口名 |
bool TenSteps_Trap(int money) |
說明 |
“十分光”計(jì)謀?!暗厕吖庾铍y,十分光時(shí),使錢到九分九厘,也有難成就處?!边@計(jì)謀“端的強(qiáng)如孫武子教女兵,十捉九著?!本褪潜容^費(fèi)錢。 |
參數(shù) |
money 買酒買零食的錢,還有衣料錢,酬謝金等 |
返回值 |
成功與否 |
注意事項(xiàng) |
須占一個(gè)線程,非可重入函數(shù)。中途遇到拒絕退出,不可強(qiáng)求。 |
3. 流程圖
可以寫代碼了嗎?我知道你忍不住了,下面就是Coding了。
從這里看,Coding只占整個(gè)A-Spice很小一部分。所以說走A-Spice流程的項(xiàng)目需要比不需要A-Spice流程的多很多很多時(shí)間。
以上的,“十分光”計(jì)流程圖足夠清晰了嗎?并不是。流程圖里面的01,02...10,以及“不可描述”部分都是一個(gè)單元,應(yīng)該要設(shè)計(jì)對(duì)應(yīng)子函數(shù)的。
對(duì)于“十分光”計(jì)流程圖的邏輯,是不是一眼看出,通過10對(duì)“if-else”語句就搞定了?
其實(shí)這里有N種實(shí)現(xiàn)方法,最原始最直觀最遵守規(guī)則的是這樣的:
bool TenSteps_Trap(int money){ if(do_needlework()) // 01 { if(at_wangpohome(day1)) // 02 { if(at_wangpohome(day2)) // 03 { if(PanJinlian.meet_happy_with(XimenQing)) // 04 { if(PanJinlian.chat_happy_with(XimenQing)) // 05 { if(at_wangpohome(Wangpo_leave)) // 06 { if(PanJinlian.state_along_with(XimenQing)) // 07 { if(at_the_same_table(PanjinLian, XimenQing)) // 08 { if(lock_in_a_room(PanjinLian, XimenQing)) // 09 { if(XimenQing.molest(PanjinLian)) // 10 { run_xxoo_thread() } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); } } else { go_exit(); }}
本文只討論A-Spice的不可描述,其他的函數(shù)實(shí)現(xiàn)方式,另找時(shí)間討論。
以上就是設(shè)計(jì)過程域的內(nèi)容,即V-Cycle左邊的內(nèi)容,那右邊就是測(cè)試的內(nèi)容。
這計(jì)謀設(shè)計(jì)好后,王婆還真按照這套路實(shí)施一遍,還沒啥差錯(cuò),比設(shè)想的更加順暢。小說生活里面的情節(jié)是無法測(cè)試的,運(yùn)行測(cè)試就是真實(shí)執(zhí)行了。
《水滸傳》還真有描述后續(xù)的執(zhí)行情況,而《金x梅》輸出更多不可描述的logs。
我說王婆是個(gè)狠人,她還藏著一個(gè)環(huán)節(jié)沒寫在A-Spice的詳細(xì)設(shè)計(jì)中。