易数编程之梅花1弄
《梅花易数》
一物从来有一身,一身还有一乾坤。
能知万物备于我,肯把三才别立根。
天向一中分造化,人于心上起经纶。
仙人亦有两般话,道不虚传只在人。
最近在看《梅花易数》,它有简单的算数和推理,比较适合用程序表达出来。
另外,它还有很多经典的案例,可以作为程序验证的实例,是行为驱动开发天然的输入。
梅花易数、行为驱动开发,这两个结合起来会产生什么样的效果,我们拭目以待。
一、梅花易数
《梅花易数》是中国古代占卜法之一。现在的八卦象数、梅花心易都是梅花易数的别称。相传为宋代易学家邵雍所著,是一部以易学中的数学为基础,结合易学中的“象学”进行占卜的书,相传邵雍运用时每卦必中,屡试不爽。梅花易数依先天八卦数理,即乾一,兑二,离三,震四,巽五,坎六,艮七,坤八,随时随地皆可起卦,取卦方式多种多样。
二、行为驱动开发(BDD)
BDD 作为一种设计方法,可以有效的改善设计,并在系统的演化过程中为团队指明前进方向。[1]
行为驱动开发的根基是一种“通用语言”。这种通用语言同时被客户和开发者用来定义系统的行为。由于客户和开发者使用同一种“语言”来描述同一个系统,可以最大程度避免表达不一致带来的问题。表达不一致是软件开发中最常见的问题,由此造成的结果就是开发人员最终做出来的东西就不是客户期望的。使用通用语言,客户和开发者可以一起定义出系统的行为,从而做出符合客户需求的设计。但如果光有设计,而没有验证的手段,就无法检验我们的实现是不是符合设计。所以 BDD还是要和测试结合在一起,用系统行为的定义来验证实现代码。
行为驱动开发是测试驱动开发的进化,但关注的核心是设计。行为驱动开发中,定义系统的行为是主要工作,而对系统行为的描述则变成了测试标准。在行为驱动开发中,我们需要使用通用语言来定义系统行为。
三、环境准备
1、java jdk
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
2、IntelliJ IDEA
http://www.jetbrains.com.cn/idea.html
安装社区版即可,安装完成后,别忘了装上cucumber插件。
四、行为驱动开发
1、起卦法:年月日时起卦
即以农历之年月日总和除以八,以余数为卦数求上卦;以年月日时总和除以八,以余数为卦数求下卦,再以年月日时总和除以六,以余数为动爻。
例:农历壬申年四月十一日巳时起卦:申年9数,巳时6数。
上卦为:(年+月+日)÷8,取余数。 即:(9+4+11)÷8,此处无余数。
下卦为:(年+月+日+时)÷8,取余数。 即:(9+4+11+6)÷8,余数为7为艮卦。
动爻数为:(年+月+日+时)÷6,取余数。 即:(9+4+11+6)除以6,此处无余数。
此卦为:上卦为坤,下卦为艮,动爻为上爻。
2、实例:观梅占
年月日时起卦实例,观梅占,这是我们行为驱动的第一个场景。
辰年十二月十七日申时,康节先生偶观梅,见二雀争枝坠地。先生曰:“不动不占,不因事不占。今二雀争枝坠地,怪也。”因占之,辰年五数,十二月十二数,十七日十七数,共三十四数,除四八三十二,余二,属兑,为上卦,加申时九数,总得四十三数,五八除四十,余得三数,为离,作下卦。又上下总四十三数,以六除,六七四十二,余一为动爻,是为泽火革。初爻变咸,互见乾巽。
断之曰:“详此卦,明晚当有女子折花,园丁不知而逐之,女子失惊坠地,逐伤其股。右兑金为体,离火克之。互中巽木,复三起离火,则克体之卦气盛。兑为少女,因知女子之被伤,而互中巽木,又逢乾金兑金克之,则巽木被伤,而巽为股,故有伤股之应。幸变为艮土,兑金得生,知女子但被伤,而不至凶危也。
3、Feature
下面我们用行为驱动的方式来描述年月日时起卦的Feature文件。
备注:maven工程记得添加Cucumber依赖
![](https://img.haomeiwen.com/i726915/b89efc1fb866806e.png)
4、运行Feature文件
在工程上上右键运行所有Feature,可以通过Feature文件驱动测试。注意:这时候工程中只有一个Feature,没有测试代码,也没有业务代码。
![](https://img.haomeiwen.com/i726915/cc2601f07a0f3a9a.png)
这时候会提示你有错误,有测试步骤未实现:
![](https://img.haomeiwen.com/i726915/3bdc01a88fde176d.png)
把上面提示的代码片段拷贝到测试代码里面,创建测试步骤,把抛出异常的代码去掉,再执行一遍。
![](https://img.haomeiwen.com/i726915/3511c4f17cf07dbf.png)
注意:Junit方式运行Cucumber还需要一个Java测试文件,参考:
![](https://img.haomeiwen.com/i726915/59dd8d687e747634.png)
第一阶段结束。
下一篇:易数编程之梅花2弄
参考: