极限编程的十二大实践是极限编程者们积累的宝贵经验,它们体现了极限编程管理的精髓,对极限编程具有深远的指导意义。这些实践并非刻板遵守的教条,其价值在于为软件过程管理带来实实在在的益处。
小版本发布:为了快速迭代并与客户展示开发进展,小版本发布成为了一种高效的交流方式。客户可以针对小版本提出精准反馈。虽然小版本将模块细化,可能会影响到软件的整体连贯性,但合理的总体规划至关重要。
规划游戏:这里的“游戏”指的是客户需求的管理方式。客户以编写故事的形式提出需求,开发人员则通过分析故事来设定优先级并进行技术实现。游戏规则可以根据需要多次调整,每次迭代后都进行重新修订。客户故事不仅是开发人员与客户的沟通焦点,更是版本设计的依据,因此其管理必须高效且沟通顺畅。
现场客户参与:极限编程强调客户的参与。因为客户需求是由客户自己负责的,所以客户需要在开发现场与团队一起工作,并为每次迭代提供实时反馈。
隐喻的重要性:为了确保项目参与者对抽象概念的理解一致,隐喻扮演着至关重要的角色。业务术语对开发人员来说可能不熟悉,而软件开发术语对客户来说可能难以理解。明确双方使用的隐喻是避免误解的关键。
简单设计原则:极限编程强调跟踪客户需求的变化。由于需求是不断变化的,因此不必过度考虑扩展性开发,而应追求简单设计,以满足当前需求为主。简单设计本身也为短期迭代提供了便利。过多的“通用”因素会增加软件复杂度,延长开发周期。简单设计的要点包括:通过测试、避免重复代码、明确编码目的以及尽可能减少对象类和方法。由于采用简单设计,极限编程不要求复杂的设计文档。
重构的必要性:为了整体软件的先行测试,重构是极限编程中测试后编码的必然要求。对于一些模块,可以先进行简单模拟以通过编译,达到测试的目的。随后对模块进行具体优化,包括模块代码的优化和具体代码的开发。重构类似于物理学中的概念,即在不影响外部特性的前提下重新优化内部结构。这里的外部特性就是保证测试的通过。
测试驱动开发:极限编程以测试为起点,为了展示客户需求的实现,优先设计测试程序。测试从客户实用角度出发,考虑软件界面,直接体现客户需求,并帮助客户理解软件过程。测试驱动开发意味着客户需求驱动软件开发。
持续集成是关键:集成意味着软件的展示和提交。由于采用测试驱动开发和小版本的方式,持续集成(整体测试)成为与客户沟通的依据,也是客户提出反馈意见的基础。持续集成也是完成阶段开发任务的重要标志。
结对编程的争议与优势:结对编程是极限编程中最具争议的实践之一。两名程序员共用一台计算机进行编程,一人编码时另一人检查,以增加专人审计来提高软件编码质量。两人角色经常互换,以维持开发者的工作热情。这种编程方式对培养新人和开发复杂软件非常有效。
代码共有与团队协同:在极限编程中,没有严格的文档管理,代码为整个开发团队所共有。这有利于开发人员流动管理,因为每个人都熟悉所有的编码。
编码标准的统一性:作为开发团队中每个人的工作,编码的可读性至关重要。虽然没有详细的文档,但统一的标准和习惯是必要的,类似于编码人员的隐喻。
每周40小时工作制的理念:极限编程认为编程应该是愉快的工作,鼓励避免过度加班。小版本的设计也是为了在固定时间内完成工作安排。这种理念体现了对工作效率和工作生活平衡的重视。 |