结对编程_结对编程/ - CSDN
精华内容
参与话题
  • 结对编程

    千次阅读 2013-03-21 22:22:13
    结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试,能编写出质量更高的代码。   简介 结对编程技术是一个非常简单和直观的概念,能达到事半功倍的...
    结对编程技术是指两位程序员肩并肩地坐在同一台电脑前合作完成同一个设计、同一个算法、同一段代码或同一组测试,能编写出质量更高的代码。
     
    简介
    结对编程技术是一个非常简单和直观的概念,能达到事半功倍的工作效果。但是,人与人之间的合作不是一件简单的事情——尤其当人们都早已习惯了独自工作的时候、实施结对编程技术将给软件项目的开发工作带来好处.只是这些好处必须经过缜密的思考和计划才能真正体现出来。而另一方面,两个有经验的人可能会发现配对编程里没有什么技能的转移,但是让他们在不同的抽象层次解决同一个问题会让他们更快地找到解决方案,而且错误更少。
    两个程序员具有相同的缺点和盲点的可能性很小,所以我们当我们采用结对编程的时候会获得一个强大的解决方案。而这个解决方案恰恰是其它软件工程方法学中所没有的。
    在我们平时的编程当中,如果遇到一个非常难解决的问题(困难到对该项目产生厌烦的态度),那么你势必会希望录求帮助,无论是从信息量庞大的Internet网络里,还是从身边的技术大师里,你都会拼了老命去解决(前提是你有对计算机知识的势爱)。这个时候不妨采用结对编程试一下,其它的不说,可能感觉就不同。
     
    优势
    其实结对编程坐起来很简单也很有趣,找个水平差的不太远的程序员和自己配成一对。只用一台计算机,大家选一个人坐在键盘前面负责输入,另一个人坐在后面口述。两个人要不断的交流,频率不应低于一分钟一次。整个的设计思想由后面只动口不动手的人主导,而由操键盘的人做实现。由于人的思维速度是快于输入代码的速度的。那么观看的人可以有空闲的时间做额外的思考,观察代码写的有没有问题,结构有没有问题。
    如果程序员的经验积累足够,是很容易看出存在潜在问题的代码的,即表面上实现了功能,但实际上是一种糟糕的做法。这在XP中被称为代码坏味道,在 Martin Fowler的《重构》一书中有详细的介绍。两个有经验的程序员同时在一起工作,看起来好像浪费了一个人的时间:但实际上的效果确实完成了更高质量的代码。程序编的不那么容易出BUG,而且代码页写得更为优雅和紧凑.
    关于结对编程,发现了一些新的受益之处。首先,它可以促进参与项目的程序员自身的提高,一对程序员工作的时候,水平较低的一方会潜移默化地受水平略高的程序员影响,学到一些新的东西。而水平高的一方同样因为不断地把自己的想法说出来而整理了自己的思路。
    其次,一定时间周期地打乱配对,让参与项目的人员相互转换位置,使得维护繁杂的文档变得不那么重要。大家分组打乱后,口头的交流很容易让所有人都熟悉每个模块,这样对于公司也很有好处,项目中万一有人离开,也不至于影响到整个项目。最后,开发过程变得更为有趣,任何人的交流变得很多,大家关系更为融洽。
    另外想补充一点的是,讲解XP的书籍上都没有提到,但是实际上却存在的一点:结对编程使得程序员被迫提高了工作效率。如果单独工作,在遇到困难的时候,并不是所有人都立刻积极地去解决问题,这时或许会上网和网友聊聊天,看看无关的网站等等。有可能因为工作的打断,大半天的时间都浪费了。看起来,程序员每天都在加班,实际有效工作时间往往还打不到6个小时。而结对编程有一种相互督促的作用,在一边工作疲惫状态不好使,另一边会起一个鼓励和激发斗志的作用。
    而且两个人共用一台电脑,略带私人性质的聊天活动都会很自觉地不去进行了。结果一天下来,新实验结对编程的程序员都会喊累,神经紧绷8个小时的工作不累才怪。
    从这个角度看,严格限制结对编程的程序员不准加班是合理的,实际上,开始每天甚至不必限制8小时工作,每天这样工作6小时队项目同样是非常高效的。
    当两个人不断的互换角色,以至于最后谁也记不清哪行代码是谁敲的;团队内循环的分组以至于分不清到底那个模块该谁负责;反而大家的感觉会不错。整个项目的代码是团队共有,而不再是个人作品了。
     
    但结对的推广与实现,会遇到极大程度客观条件的挑战,一些可能遇到的问题:
    1)结对的效率,结对之后我们发现,2个人一起工作能够完成的工作可能等于分开做的70%~80%左右,

    2)结对过程中,大家都很不愿意更换结对对象,至于结对对象的更换,最好是每个任务结束之后更换结对的对象。

    3)并不是所有功能编写都适合使用结对编程,正如第一条所说,带来一定的效率问题,老板可能不乐意了。
    展开全文
  • 什么是结对编程

    2019-10-05 21:05:52
    结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员...

    结对编程(英语:Pair programming)是一种敏捷软件开发的方法,两个程序员在一个计算机上共同工作。一个人输入代码,而另一个人审查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。
    在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的“战术”方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。
    结对编程是极端编程的组成部分。

    展开全文
  • 结对编程的好处与坏处

    千次阅读 2018-01-06 14:34:25
    0关注「实验楼」,每天分享一个项目教程 结对编程的概念已经存在很长一段时间,已经有许多公司认同这种编程方式,但也有许多公司表示他们不考虑采用。正文共:1137 字 预计阅读时间:3 分钟结对编程是软件开发过程...
        

    0关注「实验楼」,每天分享一个项目教程   

    结对编程的概念已经存在很长一段时间,已经有许多公司认同这种编程方式,但也有许多公司表示他们不考虑采用。

    正文共:1137 字 

    预计阅读时间:3 分钟

    ?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

    结对编程是软件开发过程中所使用的一种技术,两名程序开发人员共享同一台工作站。其中一个扮演驾驶者(Driver)的角色,进行代码编写,另一个扮演观察员(Observer)或导航员(Navigator)的角色,对代码进行评测。他们可以轮流编写代码和测试案例,还可以坐在一起交流思想,解决问题,而不会想偷懒去刷手机。

    结对编程的概念已经存在很长一段时间,已经有许多公司认同这种编程方式,但也有许多公司表示他们不考虑采用。结对编程需要花费的时间可能比个人编程更长,但产生的 bug 比个人编程少;它需要公司付出多一倍的人力,但编程的效率会比个人编程高。这是一个比较有争议的编程方式,不同公司的需求不同,对结对编程的看法就不一样。

    国外有位开发者 Sam Harris 对结对编程的利弊做出了客观的总结分析,总结内容如下:

    结对编程的好处

    1、互相鼓励,不容易沮丧:团队工作能增加成员的工作积极性。因为在面对问题的时候,会有人一起分担,共同尝试新的策略。

    2、互相监督,不容易偷懒:两个人一起工作需要互相配合,如果想偷懒去干别的,就会拖延工作进度。

    3、互相学习编程技巧:在编程中,相互讨论,可以更快更有效地解决问题,互相请教对方,可以得到能力上的互补。

    4、可以培养和训练新人:让资深开发者和新手一起工作,可以让新人更快上手。

    5、多双眼睛,少点 bug:两人互相监督工作,可以增强代码和产品质量,并有效的减少 BUG。

    结对编程的坏处

    1、与合不来的人一起编程容易发生争执,不利于团队和谐。

    2、经验丰富的老手可能会对新手产生不满的情绪。

    3、一山不容二虎,开发者之间可能就某一问题发生分歧,产生矛盾,造成不必要的内耗。

    4、开发人员可能会在工作时交谈一些与工作无关的事,分散注意力,造成效率低下。

    等等……

    因此,是否采用结对编程需要根据公司的情况进行定夺。并且,结对编程的时间需要合理安排,时间太长(8 小时及以上)容易产生疲劳,时间太短(低于 1 小时)都没进入工作状态。


    640?


    出处:程序师

    链接:http://www.techug.com/post/pair-programming-2.html


    推荐阅读:


    ?wx_fmt=1

    展开全文
  • 结对编程——完工感言

    千次阅读 2019-04-11 15:38:36
    首先,来讲一讲从个人项目到结对编程的过度,我们两个人一个使用C++写的个人项目,另一个人用的是java,我们知道,就目前阶段来看,用java实现ui远比C++要简单的多,所以值得庆幸的是我们队伍中有一个...

    引言

      回顾以前的程序开发,我们基本都是单独一个人分析需求,设计算法,编写程序到debug,通过这一次新的开发模式,两个人一起完成一个项目,虽然时间不长,但还是感觉受益良多。

    首先,来讲一讲从个人项目到结对编程的过度,我们两个人一个使用C++写的个人项目,另一个人用的是java,我们知道,就目前阶段来看,用java实现ui远比C++要简单的多,所以值得庆幸的是我们队伍中有一个人使用了java,所以从语言上来说基本没什么问题了。并且在实现个人项目的时候,就已经考虑到了用户界面,所以在结对编程实现的时候就是相对简单了许多。所以主要问题就集结在了对算式逻辑的优化和短信验证等其他模块了。


    个人项目的继承与复用

    既然结对项目是对个人项目的延申,我们先来看看有哪些是可以从个人项目中复用的。

    从需求上来看,结对编程项目和个人项目的需求大致相似,对于大部分代码我们能够很好的进行重复利用,并且因为我们已经再个人项目中超额完成了UI界面的实现,所以我们的目标就变成了对个人项目的进一步优化。

    我们的贡献与优化主要体现在以下几方面:

    1. 程序的模块重构和代码的解耦
      个人项目由于时间仓促,虽然也分了模块进行编写,但是模块之间的独立性没有很好的体现,为了做出低耦合的代码,我们决定对代码进行了重构,模块被我们分为以下几个部分;
      从大角度来讲,我们的总体模块分割可以用下图表示:
       在这里插入图片描述

    这样分化模块的好处是我们可以单独实现单个模块,而不用依此考虑,使得代码变的更加规整,并且我们在调试时只需要调试单独的一个模块,效率更高,程序的鲁棒性更加强大。

    1. UI界面的完善
      对于UI界面,内部我们也细分了单独的模块,分割大致如下:
      在这里插入图片描述
      Java实现UI的难度在于界面监听机制和组建布局都需要我们自己手写实现,我们没有依赖于QT,虽然难度和工程量很大,但是加深了我们对UI等响应机制的理解。

    2. 算术生成的创新与改进
      这也是程序的核心模块之一,关于算式生成,起初的思路是先生成小学题目,而后初中题目是在小学题目上添加根号等实现,然后高中题目同理又是基于初中题目生成。这样做的想法可能比较简单与普遍,但是这样做也带来了许多问题,比如括号意义性问题,式子是否有意义性问题,这些问题在生成题目时很难被考虑解决,并且这个最大的问题是当我们要去计算一个表达式的值时,我们要先将所有的单操作运算都计算出来后,根据后缀表达式计算四则运算的值,将算式生成与答案计算分离,委实麻烦。
      基于这些考虑,我们两个转换了一下思路,观察式子计算,我们构想这样的方法,式子是由一些列的操作符和操作数构成的,而不管初中高中还是小学,都是四则运算的演变,我们可以将每个操作数看作一个对象,这样三者的区别就在于对象的不同,二元操作符可以将两个对象合并为一个对象,于是式子的生成就可以看做对象的不断合并,那我们可以边生成式子边计算答案,基于这种想法,我们实现了这样的代码,并且惊喜的是,这样做带来了意外的好处,我们的括号意义性考虑极为简单(因为同一个对象不会连套两个括号),另外,由于我们将操作数进行了抽象,所以我们的代码实现基本只需要小学实现即可,初中和高中都是只要重写操作数生成方法即可,代码实现极为方便。
      附图:一个题目生成的完整流程(奇数行式子,偶数行答案)
      在这里插入图片描述

    3. 短信验证
      这里的也是极为波折,主要是包的导入教程不详细走了许多弯路,但都已克服。

    4. 账号注册登陆
      既然有注册功能,自然也有账号登陆过程,在登陆过程中我们的优化主要如下:
      1.对于账号不存在的,我们提示账号不存在。
      在这里插入图片描述
      2.对于账号存在而密码错误,我们提示密码错误。
      在这里插入图片描述
      3.在进行注册时,我们会检查账号是否存在,如果存在则无法注册。
      在这里插入图片描述


    结对分析

    • 结对编程的利与弊
      结对编程的好处就是可以结合两个人的思想,比如在设计算法的时候,有很多情况都是结合了两个人的思想。还有就是在编程的时候,一个人编程另一个人在旁边能够及时的发现错误,大大提高了编程的效率。两个人一起编程可以提高积极性,一个人有时候在面对很多诱惑的时候就会怠慢很多。坏处就是沟通磨合需要一定的时间,不过我们是室友,所以在沟通调节,统一思想方面就很顺利。

    • 经验和教训

    1. 合理分配任务

      不能所有的任务都抛给一个人,只有合作愉快了才能有后续的继续合作

    2. 要互相尊重
      不要在对方提出观点的时候立马就否认掉,要先分析,既然提出来肯定有亮点的地方,如果不好,哪里不好,如何改进。合作的时候能够得到同伴的肯定,能够提高积极性和自信。

    3. 需求分析很重要
      需求分析是软件设计、实现、测试直至维护的主要基础。良好的分析活动有助于避免或尽早剔除早期错误,从而提高软件生产率,降低开发成本,改进软件质量。


    总结

    一个人走的更快,一群人走的更远,个人编程和结对编程就像如此,个人的项目虽然完成很快,但是两个人做的项目更加精美,到这里为止这次结对编程画上圆满的句号。
    最后,代码托管github:https://github.com/Royean/CalculationGen-Pro

    展开全文
  • 请停止结对编程

    千次阅读 2018-08-26 14:20:02
    这是一个风和日丽的星期天下午,Ben 和 Martin 本应该在 Costa 咖啡馆喝一杯下午茶,一起聊聊周末的计划,然而 PM 的一个微信通知打乱了这一切。原来产品出现了一个bug需要紧急修复,下班之前必须要搞定。...
  • 敏捷开发之结对编程最佳实践

    千次阅读 2011-07-12 19:29:45
    讲到结对编程,我想大家首先想到的是XP极限编程中描述的,两位程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起完成编码工作。这种编程方式为众多敏捷爱好者所向往,但实际工作中尝试...
  • 结对编程,对我来说是个很新奇的概念,自李巍老师在课上给我们引入这个全新的概念以后,我一直在思考,为什么结对编程很好,可以提升编程的质量和效率。我在这两周也有很多的编码,我也想同时分享在我的博客里面。 ...
  • 结对编程是什么? 在此模式下,一对程序员并肩作战,平等互补进行开发工作。两个程序员并排坐在一台电脑前,同对一台显示器,使用同一个键盘,同一个鼠标进行工作。一起分析,一起测试,一起设计,一起编程。 这个...
  • 在我做咨询工作的三年半时间里,我(跟客户)谈论结对编程的时间比其他任何话题都多。一般来讲,客户的开发人员都从来没有结对过,也根本没有这个念头。而且更糟的是,那些搞商务的总觉得两个人坐在一台机器前面是...
  • 对于结对编程和两人合作的感想 小组成员:20165321,20165324 感想如下: 20165324: 链接:现代软件工程讲义 3 结对编程和两人合作,软件工程讲义 3 两人合作(2) 要会做汉堡包 认识: 说来惭愧,看见作业安排时,...
  • 结对编程作业总结

    2019-06-29 13:30:43
    小组人员: 王翔 10061176  刘明 10061141 一、结对编程的优缺点 每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各...具体地说,结对编程有如...
  • 本文主要从提升项目质量、促进知识传递及减少项目风险等角度出发,讲述作者所在团队在结对编程实践中的一些经历,以及如何避免或减少其所带来的负面影响。 你了解结对编程吗?你尝试过结对编程实践吗?也许你还未曾...
  • 结对编程的利与弊

    2020-05-08 14:27:40
    我在Menlo Innovations的暑假课程 杰玛·埃文斯 ( Gemma Evans)在Unsplash上拍摄的照片 许多程序员对结对编程持怀疑态度:敏捷软件开发技术,其中两个程序员在一个工作站上工作。 这是我经常听到的反馈类型: “这...
  • ThoughtWorks 结对编程

    千次阅读 2017-06-04 22:08:41
    可能就是某个懒散的下午,打开电脑,不知道做什么,打开牛客看了看,随即看到结对编程,不知道是做什么的,点开看了看;页面很好,不想中国人写的; 鬼使神差的就报名了,点进去看了看,居然 还有题;而且第一道题...
  • 如何爱上结对编程

    2019-07-05 10:04:16
    结对编程是什么。 结对编程的五大好处。 结对编程的三种形式。 结对编程的六个习惯。 通过本场Chat,你会知道: 为什么结对后,两个开发人员老死不相往来。 为什么结对时,总有一个人没有参与感。 如何才能让开发...
  • 这两天来参加了个结对编程比赛,完成之后觉得有些体会需要书写出来沉淀下。 结对编程大家应该有听过,两个人同用一台电脑,一人敲代码,一人旁边观看,至于观看的人做些什么就有很多的选择了,这个方式还是对效率有...
  • Code Review 与 结对编程

    2019-07-18 10:56:19
    这篇文章的起因是在《“敏捷中国史”交流群》里的一个争论,我希望能够通过这篇文章说明自己的一个观点:相对于结对编程,Code Review是一种更加合理与普适性的研发实践。 背景情况介绍 基于变更的Code Review ...
  • 1. 联系结对编程,体验敏捷开发中的两人合作; 2. 两人一组,自由组合; 3. 使用一台计算机,共同编码,完成实验要求; 4. 在工作期间,两人的角色至少切换6次; 5. 使用JAVA+ECLIPSE编程。 心得...
  • 百度百科对结对编程的介绍为:结对编程技术是指两位程序员坐在同一工作台前开发软件。与两位程序员各自独立工作相比,结对编程能编写出质量更高的代码。 我和一位小组成员利用结对编程一起完成了如下题目: 题目: ...
  • 敏捷方法有很多种,结对编程就是其中最有名的一个。讲到结对编程,我想大家首先想到的是XP极限编程中描述的,两位程序员并排坐在一台电脑前,面对同一个显示器,使用同一个键盘,同一个鼠标一起完成编码工作。这种...
1 2 3 4 5 ... 20
收藏数 22,270
精华内容 8,908
关键字:

结对编程