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

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

你没看过《水浒传》也没关系,《金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思路解读“西门庆和潘金莲的不可描述之事”,不信你看不懂相关推荐

  1. 百度对网站就像西门庆对潘金莲

    百度对网站就像西门庆对潘金莲[@more@]百度推出了视频开放协议,对百度来说,很好,内容都过来了,而且都是按照标准,对网站来说,很好,按照标准给百度输送内容,流量会上升.其实,这招一些垂直搜索引擎页 ...

  2. 小菜成长记---【proxy 代理模式 ---西门庆干潘金莲——王婆做代理】

    西门庆找潘金莲,潘金莲肯定不会答应,咋办找个王婆做代理呗. 西门庆干潘金莲的事我就不说了大家心里明的像镜似的.. 程序代码实现如下: 定义女人接口,以及方法. 潘金莲实现女人接口,以及方法. 王婆实现 ...

  3. OSChina 周四乱弹 ——潘金莲告西门庆

    2019独角兽企业重金招聘Python工程师标准>>> [今日歌曲] 把今天一直听得歌分享给你们听听好了. @凝小紫 : #毎日の歌# <花香> <花香>- ...

  4. 顶会论文看不懂?阿里巴巴技术专家为你全方位解读!

    简介: 由阿里云开发者社区联合新零售智能引擎事业群共同打造的<KDD 论文精华解读>电子书重磅发布!覆盖推荐系统.图神经网络预训练.买家秀视频标题生成.在线电视剧的受众竞争力预测和分析等 ...

  5. wdlinux mysql 日志_mysql,_mysql自动关闭,日志看不懂,希望大神解读下,mysql - phpStudy...

    mysql自动关闭,日志看不懂,希望大神解读下 Version: '5.5.48' socket: '/tmp/mysql.sock' port: 3306 Source distribution 1 ...

  6. 国科大学习资料--模式识别与机器学习(黄庆明)--第一次随堂测答案(期末必看)

    国科大学习资料–模式识别与机器学习(黄庆明)–第一次随堂测答案(期末必看) 国科大学习资料–模式识别与机器学习(黄庆明)–第一次随堂测答案(期末必看) 国科大学习资料–模式识别与机器学习(黄庆明)–第 ...

  7. Spice Model 解读

    Spice Model 含义解读--FET 在进行模拟集成电路设计时,有时需要估算管子的尺寸等参数,这时就需要去查看pdk文件中的Spice model,而对于初学者来说,由于不熟悉,有时会找不到需要 ...

  8. 《剑与远征》设计思路解读:“挂机”“简单”与“单机”

    前言 填我之前挖的坑而写的文章,作为去年的积累回顾了.全文12900字左右吧. 对AFK这个游戏,玩和研究一段时间了,最深的体会是,精简,和细节.精简的系统,目标设置,强制循环的架设.大量细节来优化各 ...

  9. load average多少是正常_对 cpu 与 load 的理解及线上问题处理思路解读

    (给ImportNew加星标,提高Java技能) 转自:五月的仓颉 前言 2019双11还有几天就要到来了,大家也都知道服务器在大促期间由于流量的增加势必导致机器的cpu与load变高.因此趁着这个时 ...

最新文章

  1. Containerd 的前世今生和保姆级入门教程
  2. Ionic实战 自动升级APP(Android版)
  3. TSM12M触摸芯片注意事项
  4. qt 安装mysql_qt 安装mysql数据库
  5. How to remove ROM cfg in MAME
  6. linux 下后台运行python脚本
  7. 暴跌343亿,被吐槽太土!中国最惨的老品牌,还有救吗?
  8. 精品软件推荐 Desktop Central - Free Windows Admin Tools
  9. 压力测试就是一种破坏性的性能测试
  10. Swing的Look And Feel机制研究
  11. TM/QQ默认表情全部丢失的解决办法
  12. c# list转为json_C#中List集合转换JSON
  13. linux shell 数字雨,cmd命令如何实现数字雨的效果
  14. 如何使用正则表达式?
  15. CSS学习笔记之练习 2.25
  16. 战火与秩序迁城显示服务器忙,战火与秩序怎么迁城 迁城方法和迁城技巧分享[图]...
  17. 2021“创芯中国”集成电路创新挑战赛芯片测试赛项(华南赛区)正式打响
  18. 【元胞自动机】元胞自动机地铁火灾疏散模型【含Matlab源码 246期】
  19. 怎么复制window上的内容到linux,怎样将文件从window系统复制到远程linux系统上
  20. 一些杂乱的C语言算法

热门文章

  1. ElasticSearch之别名_aliases
  2. WireShark的过滤语法
  3. 车载以太网转换器 100/1000BASE-T1 转换器
  4. 学校智慧校园平台管理系统小程序开发制作
  5. DIV根据里面文字自动撑开
  6. Java之Eclipse实现——在海绵宝宝的比基尼海滩里投喂鱼食
  7. 微信推出“腾讯电子签”具有提醒对方还钱
  8. YY创始人携手极客公园调坎QQ企鹅
  9. 南京航空大学c语言课程设计,南京航空航天大学C语言课程设计报告.doc
  10. 电子DIY:用单片机设计一款USB游戏手柄