`
yh_private
  • 浏览: 38581 次
  • 性别: Icon_minigender_1
  • 来自: 长春
最近访客 更多访客>>
社区版块
存档分类
最新评论

体验结对编程

阅读更多
体验结对编程一周多的时间,遇到诸多问题和大家分享一下。
两名程序员,
一名为编程老手,有丰富的开发经验经常可以提供一些非常好的想法,只是对业务不够熟悉。
另一个是个菜鸟,但进入团队时间较早对业务也相对熟悉。

两人形成互补型结对组。
故事:
由于老手(A)并不熟悉业务,而且时间箱规定时间紧迫,第一周由菜鸟程序员(B)进行主要的开发工作,
AB两人在会议室简单沟通需求和场景后,进入开发阶段。B希望可以一边开发一边让A尽快熟悉业务以及相关API,
B(菜鸟)在开发时遇到一些关键需求时总要停下来和A程序员交流,包括使用到以前定义好的类和业务上下文。
有时两人会因为过去的代码不够简洁而讨论新的方案。
直到周六的下午(时间箱规定周六交付一个可以使用的版本),程序员B突然拍着自己的脑门大叫一声:晕~!!忘了一个需求。而且是关键性需求。
这导致近3天的工作付诸东流。需要重新考虑。
周六下午。程序员B很是郁闷。在会议室里苦苦思索为什么会出现遗漏。。。。。。

原因分析:由于老手A并不熟悉业务上下文,不能参与前期准备。只有程序员B知道下一步应该做什么。而B在开发中经常与A交流关于业务上的事情,导致编程思路不流畅。经常需要分神去解释和讨论,经过一段时间之后又回到自己的代码上。
开发过程由原来的:测试——开发——重构——测试   
变成了:测试——开发——讲解——讨论——开发——重构——测试  两次开发之间经历了漫长的讨论与讲解。导致菜鸟程序员精力不够,甚至出现致命的遗留问题。

之后两个人在会议室里分析了问题的原因,由于此时已经经过了一周的结对开发,程序员A也对需求渐渐明朗起来。
此时两人都意识到这样的开发过程过于缓慢。原计划2天完成的任务干了3天还遗漏需求。经过商讨决定下周实行新办法:两人一起站在白板前探讨需求,程序员A不明确的地方由B在这个时候进行说明,以及两个人的讨论都在这个时间进行,开发回归  测试——开发——重构——测试 
分享到:
评论
5 楼 魔力猫咪 2008-06-07  
慢慢摸索吧。人件里有一句话说得好,当你CMM已经到3的时候,你要做的就是接一个能让你CMM到2的项目,什么时候你这个项目也到3了,那么就是你的项目开发水平获得了极大提高。
尝试新技术的时候遇到一些混乱是正常的。老方法转向新方法的时候,首先是混乱,然后才是看到改进的效果。所以在太急的项目上用新技术新方法要小心。弄不好会起反效果。
4 楼 yh_private 2008-06-06  
非常感谢猫咪 的关注,你所说的问题正是我们下周准备改进的关键问题。
在开始编码前讨论部分需求,使程序员AB都充分了解需求,第一周我们没有故事没有卡片,完全是一个人在开发中途又加了很讨论的时间,分散了很多精力。可能是过多了,我并不是说要把所有问题全部都在会议室里讨论清楚,只是需求和过去的API,我希望可以在编码时B不需要向A讲述 本次编码内容以外的事情。保证精力集中在这次的代码上,可以是质量上的讨论,或者结构上的讨论,但不要过去API的讲解和过去为什么要这么做之类的事情。
我们会在下周加强故事卡片。

第一次很多事情都需要摸索,虽然书中提供了很多。。
3 楼 魔力猫咪 2008-06-06  
不过国内的结对和敏捷还是很少的,你们能勇于尝试这很好。推荐《结对编程技术》一书,你们按照上面的实践改进你们的结对,我觉得能够大大改善你们的效率。最后,欢迎到http://pair.group.iteye.com/。这是我开的一个结对编程圈子。
2 楼 魔力猫咪 2008-06-06  
敏捷开发、迭代、结对这些技术都是很不错的开发方式。不过我们要注意的是,你在采用这些方法前,是否已经做好了准备?我觉得如果团队连瀑布也不能保证的话,可以先用瀑布模型,在瀑布模型里尝试结对,然后再去尝试敏捷开发。我觉得你们这次的问题在于没学会爬就开始跑了,跌倒时意料之中的。需求应该是明确的说明书(敏捷里用一个个故事卡片),而不是只装在某个人的脑袋里,开始编码前应该有设计。如果公司举办个聚会或者你心里想着和女朋友看电影,是否也会把需求丢掉呢?
1 楼 魔力猫咪 2008-06-06  
虽然结对的初期因为磨合问题造成速度比两个人单独速度要低,但是代码的质量是可以保证的。虽然老程序员不熟悉业务,但是他在开发中可以避免新手编写出质量低劣的代码,而老手则通过结对可以比单独看需求能更快进入角色。我觉得你们这次写的代码的质量绝对比任何一个人单独写要好。无论是效率还是缺陷,应该都比你们单独低。
至于丢失需求,我觉得你们不能怪交流。你们没有需求的说明书吗?敏捷也有故事卡片的。你不能只用脑袋记录,那样丢了也不新鲜。还有,设计应该在开始编码前完成吧?如果你们在开始编码前完成设计,我觉得需求是不会丢的。敏捷不要求一次把所有的东西设计完,但是不是不要设计直接开干。
我觉得你们的问题在于没有严格遵循开发方式。敏捷是把一个大瀑布变成无数小瀑布,不是彻底不要。你们应该是把交流贯彻分析需求、建模、开发测试、编码、测试这所有过程。当迭代完成后再和用户交流,开始第二次迭代。
还有,在最后,如果你们把交流只局限于开发前,那么就不是结对了。很可惜,你们因为一个愚蠢的原因放弃了结对开发。其实你们应该再仔细看一下你们结对编写的代码,再和自己以前单独的代码好好比一比,除去那个被你们忘掉的需求,是不是比你们单独写要好得多呢?

相关推荐

    Lab 1:结对编程实验报告.pdf

    【描述】:“结对编程实验报告.pdf”是XXX工业大学计算机科学与技术学院和哈工大计算机学院在《软件工程》课程中进行的一项实验活动,旨在让学生通过实际操作体验结对编程的实践过程。 【标签】:无 【部分内容】...

    我与ChatGPT结对编程的体验.docx

    我与ChatGPT结对编程的体验.docx

    我与ChatGPT结对编程的体验.zip

    我与ChatGPT结对编程的体验.zip

    2018级《软件过程与工具4.5学分》实验1-要求1

    通过这个实验,学生们将能够实践软件开发的增量方法,体验结对编程的好处,同时学会如何有效地管理项目文档,以及如何按照规定的时间表和格式提交工作。这为他们未来在IT行业中进行团队协作和项目管理奠定了基础。

    Python_aider是在您的终端中的AI结对编程.zip

    Python_aider是一个创新的工具,它将人工智能技术与编程环境相结合,为用户提供了一种全新的结对编程体验。在您的终端中运行Python_aider,您可以享受到AI的智能辅助,提升编程效率,解决编码过程中遇到的问题。 ...

    turtle-tango:远程结对编程 Google-Docs 风格

    【标题解析】:“turtle-tango”是一个项目名称,暗示...总之,“turtle-tango”项目为远程结对编程提供了一个便捷的工具,通过JavaScript技术和Google Docs式的用户体验,使得开发者能够高效协作,共同解决复杂问题。

    Boris_Bikes_Challenge:与制造商结对编程-第3周

    【标题】:“Boris_Bikes_Challenge:与制造商结对编程-第3周” 这个挑战是针对编程爱好者和IT专业人士设计的,旨在提高他们的编程技能,特别是与制造商合作的协同编程能力。"Boris_Bikes_Challenge"可能是指一个与...

    分布式 宿舍管理系统 +RMI+ExtJS 补上jar包

    分布式宿舍管理系统是一款基于Java技术构建的应用,通过使用RMI(Remote Method Invocation)远程方法调用技术和...通过解压并导入这些jar包,开发者可以直接运行系统,无需额外配置,从而快速体验和评估系统功能。

    Screenhero

    它允许两个用户同时操控一台计算机的屏幕,极大地提升了团队成员之间的协作效率,特别是在编程领域,可以实现无缝对接的结对编程体验。 **一、屏幕共享功能** Screenhero的核心功能是屏幕共享。通过该软件,用户...

    极限编程在Android开发过程中的应用.pdf

    在实施要领方面,极限编程强调里程碑的设定、原子发布、统一描述语言、极简设计、测试驱动、重构、结对编程、代码共享和代码集成等。里程碑是基于Google发布的Android版本周期来决定功能计划的发布时间。原子发布则...

    2018级《软件过程与工具4.5学分》实验1-评分标准1

    这个实验旨在让学生亲身体验增量模型在实际软件项目开发中的价值,并掌握结对编程的方法。实验中,学生可以自由选择建模工具,推荐使用开源的StarUML。 实验评分标准十分详细,总分为100分,涵盖了多个方面: 1. ...

    陈煌榕-21172160031

    现代软件工程是一个高度协作、逻辑严密的领域,它强调团队合作和有效的开发流程。...无论是敏捷开发、结对编程,还是用户体验和编码解析,每一个环节都要求我们精益求精,以创造出更好的软件产品。

    师徒结对优秀徒弟发言稿精选.doc

    英语组的同事们,无论是在清明假期还是工作之余,都无私地给予我帮助,共同打磨课程,让我深深体验到团队的力量。对比其他学校的同行,我更加意识到,集体智慧和协作精神是个人成功的关键。 在IT行业中,我们同样...

    如何测试网页上的搜索功能.docx编程资料

    - 通过结对编程的方式,两个开发人员可以共同检查代码,提高代码质量并减少错误。 **3. 加强沟通** - 测试人员与开发人员之间应保持密切沟通,确保测试案例与实际需求相符。 #### 五、测试策略 **1. 二八法则** ...

    硝烟中的Scrum和XP

    他们还尝试了XP实践一一体验不同方式的持续构建、结对编程、测试驱动开发等,阐述了如何结合使用XP与Serum。 小书的特色在于实践,对正在实施Serum敏捷软件开发的读者具有一定的参考价。值和指导作用。

    软件开发技术-PPT课件.ppt

    结对编程的好处是可以提高软件的可靠性和可维护性。 设计模式(Design Pattern) 设计模式是一种软件设计方法,它提供了一些通用的设计方案。设计模式可以提高软件的可维护性和可扩展性。 重构(Refactoring) ...

Global site tag (gtag.js) - Google Analytics