用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂

Posted 嵌入式软件实战派

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂相关的知识,希望对你有一定的参考价值。

四大名著之一《水浒传》,我想很多人都看过吧,你是不是对“西门庆和潘金莲的桥段”反复琢磨呢?哈哈,我想你是个好学的人,施耐庵也不惜重墨描绘这一章节。

王婆的“十分光”计谋简直让我“虎躯一震”,瞬间感慨这婆子肯定是一个思维缜密的程序员,软件界少了她都黯淡了不少。

你没看过《水浒传》也没关系,《金x梅》也有相同的情节,后者算是基于前者的二次开发了,描述更刺激,对,我是说王婆是个狠角色。

Note:《水浒传》的第二十四回“王婆贪贿说风情 郓哥不忿闹茶肆”和《金x梅》的第三回“定挨光王婆受贿 设圈套浪子私挑”有相同的情节。

上车坐稳扶好,下面用A-Spice的方式解读下这个故事情节。

为了到了更刺激更震撼的理解体验,我们先复习下什么是V模型。不要想歪,不是女主的深V也不是大V,是A-Spice里面的V模型,管理设计流程用的,或者你戳这文章看《A-Spice中性感的V》。

完全不懂A-Spice或者V-Cycle也没关系,你看下图,按V字母笔顺就是产品和软件的开发过程。

话说,《水浒传》是讲忠义豪杰的故事的,为了更能让故事情节更加“引人入胜”,于是“甲方”提了个需求:

撮合潘金莲和西门庆搞点不可描述的事情,以凸显武松的嫉恶如仇,然后逼上梁山。

要求“乙方”要想办法实现这个需求。

“甲方”的需求往往就这么简陋无比,作为优秀的“乙方”不能看着需求就直接瞎掰,还需要进一步去挖掘更多信息。这个“进一步挖掘更多信息的过程”就叫SYS.1 需求挖掘。即在整个开发过程保持各方沟通以获得更多需求信息,保持你做的跟甲方要的是同一个。

那么这个故事,怎么挖掘需求?就好像做项目,要知道项目的背景,为什么要搞一段潘金莲和西门庆之间的龌龊之事。

那你就要去看看《水浒传》的上一回,就是武松打虎回来之后的事。在这里,挖掘点重要信息:

  1. 潘金莲原是清河县某大户的使女,这大户想潜规则她,但她不愿意,向主人婆报告了这事。这大户一怒之下,将潘金莲“送给”了武大郎,不用钱的那种(羡慕吧,不要臆想哈)。

  2. 这武大郎是谁?“矮矬穷”,原文说是“三寸丁谷树皮”。

  3. 漂亮媳妇配矮丑丈夫容易惹麻烦,从清河县搬到阳谷县。

  4. 武松是武大郎弟弟,高大威猛,醉打吊睛白额虎。

  5. 潘金莲看着武松胸肌勃勃,激发了其雌性荷尔蒙,芳心荡漾,想方设法勾引武松。

  6. 武松是谁,堂堂正正的男子汉,怎么可以做这等勾当。于是在他出差之前,告诉他哥哥要看好这媳妇,不要被人勾走了哦。

  7. ...

以上,就是把这些信息挖掘出来,用粗略点的图示可以大概勾画出来人物的关系和行为动作:

正在上传…重新上传取消

这还要挖掘下系统硬件上的信息,大户家和武大郎家是在清河县住的,而王婆、武松和后面出场的西门庆在阳谷县住的。

怎么才能客户的需求顺理成章地实现呢?这就需要做需求分析了,即SYS.2 系统需求分析过程。

其实系统需求分析和需求挖掘是分不开的。前者注重“分析”,有疑问需要跟甲方沟通,继续挖掘更详细的信息,即后者注重“挖掘”。做项目过程中一般通过QA的方式跟甲方澄清需求,甲方也会通过CR方式来增加或变更需求。

那么,系统需求分析,做些啥?

讲点项目上的话题:系统需求分析跟后面要讲的软件需求分析是有区别的。前者注重系统层面的需求,后者关注软件上的需求。能不能说前者包含后者。内容上是可以的,但是细节、逻辑表达上是不行的。这导致有些公司,只有需求分析这个岗位,而不分系统需求还是软件需求,节省不少人力成本。但是严格按A-Spice流程做项目是有问题的,对下面的软件设计和测试都有非常大的影响。

挖掘出的一堆需求,不一定全部都有用,需要提取分析,做好整理。例如清河县的大户一家,其实没必要关注的了,只需做个参考,知道潘金莲的来历即可。后面潘金莲勾引小叔子武松,这条需求有没有用。有用,可以给潘增加一个属性,即不安分、水性杨花等,容易出轨。

武松提醒其大哥,要看好嫂嫂。那么就给了建议,天还没黑就关窗拉帘子了。

就在此时,关键信息来了,关窗的时候,木棍不小心掉下了,又恰好砸到了西门庆的头上,那么西门庆抬头一看,哎呀不得了,就这样迷上了这小娘子。这西门庆偏偏又是个破落户,特点好色。这个潘金莲偏偏又是个水性杨花。

就这样,故事快要发生了,差点啥来着。

王婆,就这样出现了,是武大郎邻居,干过媒婆角色,业务能力奇强,没有撮合不了的。这能力强的人往往表面不表现在这一行的,对,她开个了茶坊,平时苍蝇都没几只都无所谓,不影响她是干媒婆角色的。

说到这,系统需求可以整理出哪些?

  1. 潘金莲水性杨花,不爱武大郎,却被管住了,按奈不住要出轨;

  2. 西门是个破落户,有点钱,特别好色,按奈不住要拈花惹草;

  3. 王婆,拉皮条能力一绝,还贪财;

  4. 武大郎家有个门窗,木棍是搞活动的,容易掉;

  5. 这个门窗是正对着外面大街的;

  6. 武大郎家和王婆的茶坊很近,算是邻居;

  7. 西门庆被潘金莲木棍砸到,抬头望,被迷住;

  8. 西门庆跟王婆很熟,常在茶坊喝茶;

  9. 王婆看出西门庆的心事;

  10. 王婆给西门庆献计。

这里,做系统需求分析的时候要做好分类,有静态的有动态的,有硬件需求也有软件需求,同时要做好需求可行性分析。

我们这里把人物和其活动归类为软件需求,家、茶坊以及门窗木棍等这类的当做是硬件需求。

可行性呢?就是这些需求分析下来,能不能让王婆撮合这对J夫Y妇干出不可描述的事。其实上面的分析已经分析出来了,一个水性杨花,一个好色,一个擅长撮合,都是邻里街坊。你说,可行么?

接下来,要干嘛呢?大家不要猴急,接下来是SYS.3 系统架构设计

要将上面系统需求表达到系统框架中,例如这个静态的系统框图:

那要不要动态行为图呢,我觉得系统层面的,是要的。限于篇幅,我们再软件架构处在讲解吧。

这里还要提的,系统设计也有很多要求的,不仅仅是这个框图,还有需求的部署,资源预估,例如干成这勾当要多少银子,买点布料让潘金莲做针线等等。还有这系统方案后面怎么实施,如何测试验证等。

系统方面的,就简要讲这么多吧。下面讲重点,软件过程的设计。

接下来就是SWE.1 软件需求分析了。

也许还是很多人要问,软件需求跟系统需求的区别。

软件需求是来源于系统需求和系统架构的,但是侧重点不一样。

例如,系统需求的1/2/3/7/8/9/10都可以认为是软件需求,对其加以在软件层面的分析即可。例如这个人物的设计,可以将其设计成一个类,带着很多属性(水性杨花、好色等)和方法(开窗、喝茶、献计等)。

也许你会认为,这不是软件设计的事情吗,其实你是在软件设计的时候把软件需求的事干了而已。

这里,我们要重点研究献计这个方法,可以理解它是一个很重要的算法,在王婆这类里面实现。

原文说,这个计谋叫做“十分光”计。我把几千字的计谋内容提炼以下:

  1. 一分光:西门庆送点衣料给王婆做寿衣,王婆约潘金莲来做针线活,看她肯不肯;

  2. 二分光:做针线的地点约在王婆家,看肯不肯;

  3. 三分光:第二日看潘金莲是否继续愿意在王婆家做针线;

  4. 四分光:第三日,西门庆出现,看看潘金莲是否回避回家;

  5. 五分光:王婆夸西门庆发善心,西门庆夸潘金莲针线活好,看能否聊下去;

  6. 六分光:王婆出去买酒,买零食,看潘金莲是否回避回家;

  7. 七分光:王婆要潘金莲跟西门庆独处,聊聊天,看潘金莲是否回避回家;

  8. 八分光:吃酒嗑瓜子,看潘金莲愿不愿意跟西门庆坐同桌;

  9. 九分光:吃到差不多,突然没酒了,王婆去买酒,把这两人关一屋子,看啥反应;

  10. 十分光:西门庆甜言蜜语、得寸进尺,看啥反应……

到这一步,软件分析其实已经很详细了,这个算法思路也很清晰的了。

你按奈不住要写代码来实现这段不可描述的事情了?别急,接下来是SWE.2 软件架构设计

软件架构设计讨论跟系统架构设计的讨论很相似,前者是关注软件层面的。

我们可以把每个类设计成一个组件,并把类的接口定义清楚。

上专业的设计工具EA,为了简要说明这个不可描述的情节,部分需求没有完全体现在这架构里面。(这里省略了WuDalang的角色)

还可以通过类图的Interface来强调这个“十分光”计(TenSteps_Trap)

以上是简单的静态图描述,还要做动态行为描述:

注意这个动态时序的接口要和组件提供的接口一一对应,如果前后不一致就是做设计不严谨。

除了组件框图、类图和时序图,还要有其他的设计,例如资源预估,线程任务等。(本文重点讨论不可描述的情节,其他工作暂且省略)

接下来,能写代码了吗?看你急的,SWE.3 软件详细设计才是下一步(心急吃不了热豆腐)。

一般,详细设计用什么方法做呢?类图和流程图是最常用的,还有接口描述以及其注意事项。以下挑几个来讲解:

1. 类图

2. 接口说明

接口名bool TenSteps_Trap(int money)
说明“十分光”计谋。“但凡捱光最难,十分光时,使钱到九分九厘,也有难成就处。”这计谋“端的强如孙武子教女兵,十捉九着。”就是比较费钱。
参数money 买酒买零食的钱,还有衣料钱,酬谢金等
返回值成功与否
注意事项须占一个线程,非可重入函数。中途遇到拒绝退出,不可强求。

3. 流程图

可以写代码了吗?我知道你忍不住了,下面就是Coding了。

从这里看,Coding只占整个A-Spice很小一部分。所以说走A-Spice流程的项目需要比不需要A-Spice流程的多很多很多时间。

以上的,“十分光”计流程图足够清晰了吗?并不是。流程图里面的01,02...10,以及“不可描述”部分都是一个单元,应该要设计对应子函数的。

对于“十分光”计流程图的逻辑,是不是一眼看出,通过10对“if-else”语句就搞定了?

其实这里有N种实现方法,最原始最直观最遵守规则的是这样的:

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的不可描述,其他的函数实现方式,另找时间讨论。

以上就是设计过程域的内容,即V-Cycle左边的内容,那右边就是测试的内容。

这计谋设计好后,王婆还真按照这套路实施一遍,还没啥差错,比设想的更加顺畅。小说生活里面的情节是无法测试的,运行测试就是真实执行了。

《水浒传》还真有描述后续的执行情况,而《金x梅》输出更多不可描述的logs。

我说王婆是个狠人,她还藏着一个环节没写在A-Spice的详细设计中。

你猜是哪个?咳咳,话说这雌儿与……

当下二人云雨才罢,正欲各整衣襟,只见王婆推开房门入来……

欲知后事如何,且听下回分解。

 

以上是关于用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂的主要内容,如果未能解决你的问题,请参考以下文章

用A-Spice思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂

为什么那么多人讨厌A-Spice

为什么那么多人讨厌A-Spice

为什么那么多人讨厌A-Spice

针对结构映射的SVM算法:核心思路解读

针对结构映射的SVM算法:核心思路解读