“设计”工作应该放在迭代中吗?

在教练敏捷团队的过程中,一些团队反映“某些用户故事不好拆分,无法在一个迭代内完成”。对于这些故事,一些团队的做法是先指定资深人员作为“设计师”,他从“需求分析师”或业务方拿到需求后,花上1个迭代的时间进行“设计”,然后由他将编码任务进一步分配给“开发人员”,并且负责验收代码。这些故事往往就会持续1~2个迭代才能完成,甚至还来不及测试。

继续阅读 More

设计已死? (Is Design Dead?)

对于很多初步接触极限编程(Extreme Programming, XP)的同学来说,XP似乎宣告了程序设计的死亡。不仅限于很多设计行为被嘲笑为“冗余的前期设计”(Big Up Front Design),而且连像UML,灵活的框架(Framework),甚至连模式(patterns)这些设计技巧都被轻视乃至被完全忽视。实际上,XP中包括很多的设计,只是不同于以往软件开发流程中的做法。XP通过允许进化的实践技巧使演进式设计(evolutionary design)成为一种可行的设计策略。它还为设计人员(Designers)提供了新的挑战与技巧,令他们去学习如何使设计简单,如何利用重构保持设计的整洁,如何在一个演进的形式下使用模式。

继续阅读 More

源代码就是设计 (Source code is the design)

至今,我仍能记起当我顿悟并最终产生下面文章时所在的地方。那是1986年的夏天,我在加利福尼亚中国湖海军武器中心担任临时顾问。在这期间,我有幸参加了一个关于Ada的研讨会。讨论当中,有一位听众提出了一个具有代表性的问题,“软件开发者是工程师吗?”我不记得当时的回答,但是我却记得当时并没有真正解答这个问题。于是,我就退出讨论,开始思考我会怎样回答这样一个问题。现在,我无法肯定当时我为什么会记起几乎10年前曾经在Datamation杂志上阅读过的一篇论文,不过促使我记起的应该是后续讨论中的某些东西。这篇论文阐述了工程师为什么必须是好的作家(我记得该论文谈论就是这个问题——好久没有看了),但是我从该论文中得到的关键一点是:作者认为工程过程的最终结果是文档。换句话说,工程师生产的是文档,不是实物。其他人根据这些文档去制造实物。于是,我就在困惑中提出了一个问题,“除了软件项目正常产生的所有文档以外,还有可以被认为是真正的工程文档的东西吗?”我给出的回答是,“是的,有这样的文档存在,并且只有一份——源代码。”

继续阅读 More