基于本体的软件设计方法
这是我在浙江大学写软件工程硕士论文的核心内容,虽然答辨(我女儿以为是大便)老师叫我把这些内容要去掉,但我坚持把它写在里面,内容如下:
基于本体的软件设计方法的价值观认为软件开发过程最核心内容为“寻找软件需求的本质”即“本体”,并用“最快的方法开发出软件产品”,即“软件最终源代码”。
软件开发的核心工作只有两个,即“构建本体概念”和“开发最终源代码”,其它任何文档、环境、过程均为这两个工作服务,起辅助作用。
基于本体的软件设计方法过程概述如下:
1对于任何软件开发,首先构建软件“开发对象的本体概念”。
构建本体概念可以使用W3C推出的WOL(网络本体语言)规范进行,可以利用象Protégé这样的设计软件进行。
2所有客户协作、需求沟通以及开发设计中的交流内容均为“开发对象的本体概念”。
其它任何文档,如需求文档、设计文档、UML建模、测试文档等等均为“开发对象本体概念”服务,只要能形成恰当的本体概念,这些文档均可有可无。问题的冲突和解决都反应到“开发对象的本体概念”上。
3基于“开发对象的本体概念”使用各种开发方法构建软件“产品源代码”。
在各种开发方法中可以使用暴布式,迭代式,也可以使用RUP,CMM过程改进等等,当然首先推荐使用敏捷方法因为它更快。
4当“开发对象的本体概念”发生变化后,则首先重构和修改“开发对象的本体概念”,并同时对“产品源代码”进行重构和修改,实现本体概念和代码的连动。
对于软件开发对象的理解会随着软件开发的进行发生变化,这种变化是不可避免的,也就是说软件变更是不可避免的。变更出现时需要先对本体概念进行重构和修改,同时对源代码进行同样的重构和修改。我们需要使用各种重构手段,而不是使用拆东墙补西墙的方式。
5整个过程中,需求、设计、建模、架构、编码、测试等各种开发阶段是平等的,可以先行,也可以后行,没有先后之分,均为核心内容即“本体概念”和“源代码”服务。
最为明显的例子就是“测试驱动开发”,把测试排在了整个开发的前面!而其它用例驱动,特性驱动,模型驱动等都只是某一方面先行而已。
以上基于本体软件的基本哲学思想是“自由”和“平等”,过程是“自由”的,开发关系是“平等的”,目标是一致的。
我认为基于本体的软件开发中最为重要的事项有三个,分别为:
1命名
所有类、对象、方法、变量的命名需要同本体保持一致,在现代的开发工具包括Protégé, Visual Studio等都对命名的重构支持的挺好。
2重构
当对软件对象概念理解发生变化时需要重构本体和软件,使其保持概念一致,即人月神话所谓的“概念完整性”。
3自说明代码
利用测试驱动所做的测试其实是一种辅助的自说明代码,使用契约式设计行成能运行时检查的最好自说明文档,使用良好的编程风格从而无需各种辅助文档的帮助即看懂源代码,从而加速软件开发。
(注:原文请到我自已建的blog http://eeblog.net/o 查看)