`
kidiaoer
  • 浏览: 825330 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

结队编程

阅读更多
结队编程是XP极限编程的一个关键实践,如果把结对编程放到整个XP里面会更容易体现出它的价值,所以我觉得分析结对编程的一个整体思路是:

1、适用场景:
XP的适用性在哪里,什么样的项目中适合采用XP,在这样的项目中XP可以起到什么作用。
如果离开了适用场景,XP的适用性都要重新考虑,所以就更不用谈结对编程了;

2、实施条件:
从理论上我们面对的项目可以从XP那里得到很大的价值,但实际中我们的团队具不具备实施XP的条件,即并不是什么样的团队都可以采用XP,特别是结对编程;

3、结对编程的位置和价值:
结队编程在整个XP中的地位,它和其他哪些关键实践有着相辅相成的关系,它可以应对项目实施的哪些问题;

4、结对编程遇到的问题:
结队编程在实施的过程中,会遇到这样那样的阻碍和问题,这些阻碍和问题,可能是因为不恰当的使用引起,可能是因为对XP关键实践的局部采用引起,或其他。

1、适合场景:
适合采用XP的项目特征为:规模小,时间紧,需求变化多,质量要求高
而且我觉得这些特征不是“或”的关系,而是“并”的关系。
如果只是规模小、时间紧,但是需求变化不大,那么敏捷所强调的“拥抱变化”就谈不上了;
如果只是需求变化多,但是时间比较充足,那么可以侧重原形驱动方法;
如果规模比较大,需要几十个/上百个人、半年甚至一两年的项目,那么采用稍微重量级的RUP,还是要稳妥些。

所以如果我们怀疑XP以及结对编程的价值或者实施性的时候,可以考虑考虑我们面对的项目,是不是适合采用XP来开发,在这里我觉得应该强调的特征是需求变化多。

2、实施条件:
在实施条件上,我觉得团队需要具有XP的文化是很重要的,团队成员需要达成一个共识,就是认同XP开发会给项目以及自己带来价值,这种共识需要若干个因素,如团队意思/共享意识等等。
此外XP对团队成员的技术水平要求也较高

如果团队不具有XP的思想意识,以及必要的技术水平的话,那么就更谈不到结队编程的效果了(当然部分水平相当的人还是可以在适当的情况下,采用局部结对编程)

3、结对编程的位置和价值
在XP中,一个关键的假设就是“只注重眼前需求的简单设计而通过重构来适应需求变化”的代价和成本小于“对系统进行充分详细的设计,但是随着需求的变化设计失效”的代价和成本。
所以结队编程的价值在于,我们无法在项目的初期进行一个详细的设计,即使完成一个设计,随着需求的变化,设计也是需要频繁的改动,因此与其我们花费大量的时间和精力来维护不稳定的设计文档的一致性,不如我们简化、延迟设计,用简单的实现来满足当前的需求,而依赖重构来适应需求的变化。
所以结队编程的价值在于:
1、使代码实现的无错误、且最简单;
2、更好的、更有效地使代码扩展性好、易于重构;
3、进行及时、有效的重构,避免单人开发的惰性而不愿重构。

如果我们觉得我们已经有了很成熟的设计,很稳定的架构,可以说我们的系统不需要重构就可以满足所有需求,那么我觉得结队编程的采用价值就大幅度下降了;
如果我们觉得我们的需求会不断变化,我们的设计需要不断的进行调整和代码重构,那么结对编程是这种重构最好的保障和伙伴。

4、结对编程遇到的问题:
结队编程会带来效率的降低
在一个具有实施XP能力的团队,出现这样的问题往往是

i、由于人员的变动,来了新成员
在这种情况下,前期确实会对其搭档产生一定的影响,但是磨刀不误砍柴工,通过结队编程,可以最快的使新成员进入状态,通过后期的高效完全可以弥补前期的消极影响;

ii、后面坐着的人跟不上写代码的人的思路,写代码的人要不断对其讲解
结队编程不仅仅只是一起写代码,在写代码之前也需要一起对需求进行探讨,一起讨论设计方案,达成共识之后才再一起写测试用例,一起编码,一起测试。
如果出现跟不上的情况,那么赶紧停下来,需要讨论的时候到了。

iii、由于每个人有不同的习惯风格,坐在后面的人不习惯写代码人的代码风格
这正是XP另一个关键实践的必要性:代码规范。在采用XP方法后,要求所有成员编写的代码都想出自于一个人之手写的,这样才能使代码本身就是设计,方便所有成员沟通维护。
通过代码规范之后,也才使XP强调的另一个关键实践“代码共同拥有”成为有效。

iv、结对搭档步调不一样,如一个人有事或打电话,或去洗手间,另一个同伴岂不空闲
如果一个人有事那么另一个人可以对设计与实现重新进行思考,思考仍然是软件开发中最重要的事情之一。
此外自己也休息一下,也不是一件很坏的事,呵呵。

结对编程很累
结对编程确实是强度非常大的一件事情,在结对的时候我们就不可能边写代码边带着耳机听音乐了,呵呵。
但是结对可以使两个人精神更加集中,可以扩展思路以创造更简单,更严谨,更便于修改重构的代码,所以这正应对了项目时间紧的要求。
因为XP是一件强度很大的过程,所以XP强调40小时/周的另一实践


总结
上面写得太多了,好像重点不太突出,我觉得是不是采用结队编程,一条关键的依据是:
判断我们代码需不需要重构,如果需要,结对编程就会提供很好的价值,包括代码正确性、严谨性、可扩展性等等,为代码的重构提供很好的基础,并且结队编程克服不想对自己代码进行重构的惰性。
如果判断我们对系统架构设计,已经有了很成熟的经验,且需求的变更不会对设计造成太大影响,那么结对编程就消弱了采用的意义。
分享到:
评论

相关推荐

    华为OD机试C卷- 结队编程(Java & JS & Python & C).md-私信看全套OD代码及解析

    ### 华为OD机试C卷 - 结队编程(多语言实现) #### 题目背景与要求 本题目属于华为OD(Outsourcing Development)机试中的一个具体案例,旨在评估应聘者对于数据结构与算法的理解程度及其编程能力。题目要求通过...

    【免费题库】华为OD机试 - 结队编程(Java & JS & Python & C & C++).html

    【免费题库】华为OD机试 - 结队编程(Java & JS & Python & C & C++).html

    (D卷,200分)- 结队编程(Java & JS & Python & C).png

    华为OD正版题库,CD卷,2024原题库。超低价可下载包含多种代码和解析,不用购买高价的专栏,任何问题可私信

    C++网络编程资料整理

    C++ 网络编程.pdf sock新手进阶编程.chm 精通Windows API-函数、接口、编程实例.pdf

    [详细完整版]21软件工程.doc

    结队编程有哪些好处?有哪些不足? 15.什么是瀑布模型?它的主要特点是什么? 16.什么是增量提交模型?有什么优点? 17.螺旋模型有什么特征?并说明它的优缺点。 18.统一过程模型的有哪几个阶段?每个阶段的任务是...

    敏捷释放软件价值

    - **持续的代码评审**和结队编程,确保代码质量。 - **全面的单元测试**,提高软件的可靠性。 - **持续的设计和重构**,保持系统的简洁性。 - **频繁的集成和测试**,减少集成风险。 - **计划游戏**,通过迭代规划和...

    MobHoard:向玩家发送成群结队的怪物

    《MobHoard:Java编程实现向玩家发送成群结队的怪物系统》 在游戏开发领域,创造丰富多样的敌人和战斗体验是至关重要的。"MobHoard"项目旨在为玩家提供一种机制,通过Java编程语言,能够有效地管理和控制游戏中的...

    【Unity插件资源】 Agents Navigation 3.1.1.unitypackage

    成群结队(对齐,凝聚) 3D 分离 2D/3D 碰撞 2D/3D 我可以在非ECS/Dots代码中使用它吗? 可以,有一个混合工作流程,游戏对象与实体同步。这也允许在面向对象的编程中使用这个包。当然,可以预料的是,性能会稍微差...

    flocking_diamonds_p5:p5.j​​s 草图动画成群结队的彩色钻石

    标题 "flocking_diamonds_p5:p5.js 草图动画成群结队的彩色钻石" 描述了一个使用p5.js库创建的互动艺术作品。这个项目展示了一种算法,该算法使得彩色钻石在屏幕上形成类似鸟群或鱼群的行为,即所谓的“群集行为”或...

    flocking_diamonds:处理草图动画成群结队的彩色钻石

    Processing 是一个开源编程语言和环境,专门用于视觉艺术、数据可视化和交互设计。这个项目可能是为了演示群集行为(也称为“群居”或“flocking”)的概念,这是一种模拟生物群体运动的算法。 描述中提到的“植绒...

    python游戏外星人大战

    在“外星人大战”游戏中,外星人会成群结队地从屏幕顶部向下移动,玩家需要操控飞船躲避外星人并发射子弹进行攻击。当外星人触及屏幕底部或被全部消灭时,游戏状态会发生变化。此外,可能还包括额外的挑战,如特殊的...

    alien_invasion.zip

    外星人根据设定的规则成群结队地移动,形成入侵的阵型。 8. **bullet.py**: 子弹类在此定义,包括发射、移动和检测碰撞的逻辑。当玩家按下射击键时,飞船发射子弹,如果子弹与外星人碰撞,则外星人被消除,同时...

    大学搞笑顺口溜2020.docx

    3. 团队合作:“逃课成群结队”或许是一种幽默的表达,但在实际工作中,团队协作是必不可少的。IT项目往往需要团队成员间的紧密配合,培养良好的团队精神对个人职业发展至关重要。 4. 技能多元化:顺口溜中的“办公...

    介绍了pygame实现飞机大战,文中示例代码介绍的非常详细.zip

    3. **敌人和敌机群**:敌人可以单独出现,也可以成群结队。每架敌机都有自己的AI来决定移动路径和射击时机。 4. **碰撞检测**:pygame提供了`colliderect`函数进行矩形碰撞检测,我们可以用它来判断飞机与子弹、...

    实用的工作述职报告模板汇编5篇.docx

    在IT行业中,虽然述职报告可能不如编程代码、系统设计或者项目管理那么直接关联,但它仍然是一个重要的沟通工具,尤其对于IT部门的管理者来说。 在本文中,我们看到的是一个教育机构的工作述职报告,其内容主要涵盖...

    alien_invasion.rar

    2. 外星人(Aliens):游戏的主要敌人,成群结队地从屏幕顶部向下移动。 3. 子弹(Bullets):玩家发射的子弹,向上移动,用于击中外星人。 4. 墙壁(Borders):定义了游戏区域的边界,防止飞船或外星人超出屏幕...

    PESE2:为 Serious Sam 解析错误 2 mod

    在"严重山姆"这款游戏中,玩家通常会面临成群结队的敌人,因此对服务器和客户端的处理能力有着极高的要求。Erlang的并发机制使得游戏服务器可以同时处理多个玩家的指令,保证游戏体验的顺畅。此外,Erlang的热代码...

Global site tag (gtag.js) - Google Analytics