Extreme Programming ,极限编程,有个很好听的缩写名称,为XP。
呃,不过显然不是去模仿 Microsoft Windows XP操作系统名称,因为极限编程理念的提出是1996年,远远早于XP系统的出现。
我目前是大一软件工程学院的学生,虽说是只有大一,不过我们学院程序设计老师,呃,在教我们 Java 的同时,一直向我们灌输软件工程的思想。
对我们的编程风格反复要求,甚是严格。
软件工程? 嗯……当然是强调 Teamwork 。我们又不是一个人在战斗,嘿嘿,所以合作非常重要。
软件工程的基本思路是面对一个项目,先做需求分析,然后是设计,然后是写代码,最后当然少不了测试和维护。
一群人写代码,用坐一起不?
根据传统的软件工程理论,显然是不用。因为嘛,写代码是自己的事情,偶尔交流用下QQ,嘿嘿,多方便!
一群人写代码,分工一定要非常明确吗?
根据传统的软件工程理论,显示是,否则……各写各的,将来怎么可能凑成一个完整的程序呢。
这确实是个问题,于是乎,有人专门做面向对象的分析与设计(OOAD),建立出一个完整的 UML 图。然后明确分配任务——
A 同学,你写这一块,B同志,你完成那一块……
不过问题还是有,不过也没关系,暂时这里不列举了,因为解决方案也已经是相当完善的啦。
有了并发版本控制系统(CVS)和 Microsoft Visual SourceSafe ,有了许多逆向软件工程的辅助软件,代码框架是现成的,只需要写如何去实现,而且多多复用,这个才是程序员的事情,嘿嘿,反正我不去规划这个什么什么的。
代码写好,需要相互交流了,用什么?
呃,这里先不管传统软件工程项目怎么解决,先说说我们学校我们学院早已习惯的——
规格化说明。
规格化说明(Specification)可以理解多是注释,而且格式相当整齐,抽去实现代码不看,看上去比 javadoc 提取后的规格文档还要清晰,每一个方法头,加上注释,给了我们许多信息:
1,方法名
2,参数及其类型
3,异常规格说明
(Java 中的 throws 子句 或者 C++ 的 throw 子句,不过 C++ 不加声明表示可能抛出任何异常,绝非像 Java 那样承诺不抛任何异常!)
4,注释中的 Requires-clause 告诉了方法调用的限制,比如引用参数不能为 null 等。
5,注释中的 Modifies-clause 告诉了方法可能会对你传入的参数做哪些变动。
(姑且我们把 this 也认为是一个参数吧,起码是一个隐喻的)
6,注释中的 Effects-clause ,这个才是关键。就是这个方法是用来做什么的。
……
那么一个人写完代码,只要让同伴看下这所谓的 Specification ,交流就方便多了。
呃 ……
说了,这么多,怎么越扯跟标题 XP 越远啊 ……
表打我,这里嘛,主要是做个铺垫,嘿嘿
关于XP的一些个人理解,就写在 (2) 部分咯。