Monthly Archives: December 2006

明天有雨

晚霞照亮了天
彩虹挂在我身边
下过雨的心情只想黑夜快快来临

血色的天际
没有月亮独自寻觅
混沌从天地开合之初流浪到这里

我的心里翻了天
远远近近都是白色闪电
惊天霹雳像远山那边男孩的呐喊

明天总该有雨吧
不然只有我一个人在哭
请不要再安排彩虹
生命中没有那样的演出

明天你不再来了吧
这样好不只我一个人孤单
鹊桥相合在七月初七
我的生命中没有那一天

测试驱动开发和软件开发流程模型

我终于决定不再继续看极限编程大师 Kent Beck 所写的那本 Test Driven Development: By Example 了。因为我实在无法忍受我与作者在软件开发流程模型上的分歧。但这并不妨碍我认同并实践作者所谓“测试先行”的理念。我是一个趋近完美主义者,因此我更喜欢像设计模式那样偏重设计的方法论,我不能认可一个靠不断修改而成长起来的软件。

按照 Kent Beck 极端的测试驱动开发模型,一个软件应该是这样写出来的:

  • 写测试代码
  • 编译测试代码,编译无法通过(因为没有实现代码。)
  • 写一份最简单的实现代码,让编译通过

迭代地修改代码以减少实现代码的重复度,降低实现代码和测试代码之间的耦合度。

就是这样,一个软件被一点一点修改而成。他强调了在这个过程中有两个主意事项:第一,在添加任何功能之前都要先写测试,除非代码是用于调试的,这也就是所谓测试先行的概念;第二,当编译无法通过时尽量不要再写新的测试。

我之所以不认同这个模型,就是因为其中间产生了大量的迭代过程,而这些过程很可能只在头脑中出现,或者根本就不曾出现。这些过程一方面增加了开发的消耗,也在某种程度上引入了更多的不确定性。但是其中测试先行的做法,能最大程度保证单元测试的完整性与正确性。

因此,我理想中的开发流程模型应该是这样的:

  • 用户需求调研,导出成软件需求
  • 根据软件需求进行设计
  • 根据设计编写测试用例
  • 根据测试用例编写测试代码
  • 构建软件框架使测试代码能够编译通过
  • 写 Mock 来保证测试用例代码准确无误
  • 按部就班地写程序,用测试用例来保证所写的代码准确无误

这其中可以按照极限编程的思想以一个可独立发布可运行的模块作为单位,这样可以有效地控制模块的大小,还可以避免出现过度设计的问题

在 Sourceforge 项目空间上部署 MediaWiki 2

《在 Sourceforge 项目空间上部署 MediaWiki》的第一部分在这里。

造成 MediaWiki 不能向 config 目录写文件的原因,估计是 Sourceforge 服务器没有开放这样的权限。幸亏,MediaWiki 提供了一个变通的办法。找到下面的这些代码,把他们注释掉:

这样一来,当目录没有写权限的时候,操作不会被取消,而是生成的配置文件会以文本的形式被打印在页面上。把这些代码拷贝、粘贴到一个名为 LocalSettings.php 的文件,然后上传到 MediaWiki 的根目录,在我们这个例子中也就是 /home/groups/s/sa/sample/htdocs/wiki/ 就可以了。

最后还需要解决一下 session 的问题。由于 Sourceforge 使用了服务器集群,所以把 session 保存在内存中是有问题的,所以需要用文件来存储 session:

在 /tmp/persistent/ 下面创建一个用来保存 session 的目录,例如 /tmp/persistent/sample/sessions。这里的 sample 就是你的项目的 unix name。因为这个名称是唯一的,所以不用担心会跟别人的重复。但注意千万不要把它建在你的 project 目录下,因为他们是不能被 web 服务器写入的。

确保这个目录是可写的,也就是执行一下 chmod a+w /tmp/persistent/sample/sessions。sample 仍然是项目的 unix name。
告诉 MediaWiki 使用这个目录来存放 session,方法是在 LocalSettings.php 文件的开始处添加 session_save_path(“/tmp/persistent/sample/sessions/”); 注意不要丢掉 sessions 后面的那个 “/”。如果你这样做之后,在编辑或查看页面的时候退出,碰到空白页面,请把 ini_set( “include_path”, “.:$IP:$IP/includes:$IP/languages” ); 添加在上一步的 session_save_path 之前。

这样,你的 Wiki 就基本上可以在 Sourceforge 的项目空间上运行了,不过还有很多问题这里没有涉及到,比如:如何配置邮件系统、如何修改网站的 logo、或者是一些碰到的其他的问题。更多内容请详见 Running MediaWiki on Sourceforge.net。(中国大陆地区访问可能会有障碍。)