结对编程的理解

2024-04-12 18:18
文章标签 理解 编程 结对

本文主要是介绍结对编程的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在项目中,对结对编程的理解:

  1、职业态度有很好的改进。由于缺少了单人独处的环境,两个人的合作更专注于工作,职业态度是编程人员的首要精神,对代码的质量起关键作用。员工聊QQ的、看新闻的、不务专业的、工作义务式的现象没有了。取而代之的是工作变的积极,学习也热情了,并且充满成就感。如果有很好的企业文化来配合,例如进行一些合作性的运动,足球,篮球等,更能促进职业态度改进,达到以团体带动个体的效果。

  2、1+1>2。结对编程,在每一时刻都是一个程序员在编程,说效率如何高,也只是1+1>1,但是否大于2呢?答案是肯定的。首先,一个人的编程,平均很难实现1>80%×1的工作效力。但是在和同伴一起工作时,必须保持思维一直高度集中,所以平均都可以达到1>80%×1的个人效力,同时有了一遍代码评审,使得出错几率就降低,减少了bug的产生。也由于两个人的思想汇集,能创造了很多新编程算法或结构重用等。所以着眼于整个项目来看,这个实践确实大大提高了效率。

  3、软件质量有明显的改进。

  1)代码的坏味道减少。首先是对编码的规范的遵守。结对编程改掉了一些人的编码的坏习惯(例如:不注释),也同时融合了每个人的编程优点。其次,代码的层次,和语法变得优美了。一些不耐烦的代码没有了,一些重复出现的代码没有了,改重用的代码重用了,改重构的代码重构了。

  2)程序执行效力提高了。结对编程是两个人的脑力劳动,可以相互学习,相互研究,所以我们在一起,常常会去试验新的编码方式,以寻找最好的方法。而且有什么想法通过交流后两个人都觉得可行,就可以写出测试用例,再来写出实现;所以不论在解决问题的时间和方法上,都比以前做得更快更好。

  3)减少了bug的产生。Bug的产生首先在于理解上,两人编程,需要两人去理解,同时两个人要经过讨论,形成一致思想,才可以编程,使得在理解错误的风险上减少。其次两人编程就等于已经有了一遍代码评审,出错几率降低了很多。所以结对编程能有效的减少了bug的产生。

  当然,在结对编程的过程中,也遇到了一些困难

  1、 如何将结对编程有效的融合到开发流程中

  我们团队加上项目经理和美工,一共6人,可以有2组配对(不包括经理,美工)。开发流程如下:

        

  那么如何进行结对开发呢,在那些流程中结队开发呢?

  1)我们进行以模块为单位,即是一组人负责一个模块的设计,和编码

  2)尽量将性格融合的,技术互补的配对。并且在不同阶段,有针对性的组合,可以起到很好的作用。比如,一个严谨,谨慎的人,配上一个喜欢创新的人。

  3)两人中,地位是平等的,只有经验多寡之分,没有地位高低之分

  4)工作时,两人必须使用一台电脑,一天中必须要有大于4小时的合作时间,即是要最少共同工作半天。

  5)将项目中的难点,分配给搭配默契并且经验丰富的组去负责。

  6)分析设计时,由两人讨论通过并签名。(在项目讨论会上必须由两人讲解)

  7)编码前,两人必须有达成共同的思想

  8)编码时先写测试,再写实现

  9)任务出错或不能完成,应由双方共同负责,不能相互指责

  10)两人意见不同时,可由上司帮助解决,最好不要各执己见

  11)每次测试时,从新组合配对人员,但不能由设计编码的人负责测试自己编写的模块但可以写测试文档。

  12)上司多点鼓励,结对人员相互鼓励,可以产生共同的荣誉感,责任感。

 这是我们项目配对的情况

  

  项目完成后,统计了结对编程与没有结对编程的数据对比。

  

  注:A项目与B项目在规模上和复杂度上相差不大。

  对上表进行分析得到以下结论:

  1)设计阶段,结对编程比没有使用结对编程慢。因为,两人的讨论更多,想法更多,方案也更多,设计的也更加全面。尽管慢,但是效果和质量明显比没有使用结对编程的质量好。

  2)编码阶段,结对编程比没有使用结对编程快。我想主要体现在两人可以保持思维一直高度集中,和对遇到问题解决的速度上。并且是一个逐渐融合的过程,两人融合的快,编码的速度也快。

  3)测试阶段,结对编程比没有使用结对编程快。从Bug数可以肯定,结对编程对软件质量有所提高。在测试时间上也缩短,得益于bug数的减少,修改时间减少和回归的次数减少。

  2、结对编程中两人不合作问题。

  在开始运作结对编程上,这个问题特别烦人。在新人中倒是很好解决,在公司呆的久的员工反成了问题。习惯了单打独斗的,旁边有一个人总是显的不习惯。还有,在性格上不是问题,大家都是一定文化层次的人,很容易融合。但是在生活上,反成了问题,比如一些坏习惯,个性等。我进行如下的解决方法

  1)营造团结,和谐,活跃的环境,让大家多点自我表现的机会,使大家充满自信,勇于发言,勇于表达自己的意见。

  2)多进行团体活动,下班打篮球,周末有空去一起喝茶聊天(从来没有加班)。做集体运动,使其有共同目标,还相互理解,拉进距离。聊天可以轻松玩笑的指出一些人的坏习惯。

  3)多多对小组鼓励奖励,使他们有共同荣誉感,责任心。

  4)实在不行,就赶人吧!(我没有用过)。

  3、结对编程中两人编程水平问题。

  这是很多人提问最多的问题,我很牛,也要结对吗?又或者我是新手,可以结对吗?其实结对编程的内涵为一种共享;一种技术,经验,知识的共享。通过共同商讨、解决问题,来提高沟通,交流,来降低误解和疏远。所以这不是问题,问题的本身在于共享精神,要求大家没有私心,要求大家互相帮助。不管菜鸟与菜鸟,或者老鸟与菜鸟,老鸟与老鸟的结对,都不会有问题。尽管两人编程水平问题有所差异,那也是工作的方式不同罢了,专家级的两个人,更多的是创新,一老一小,更多的是教育,两个菜鸟那就是更多是在唱歌,就像过河的小马。

  最后,谈谈公司文化对结对编程的影响。首先要明白,不是什么公司都可以进行结对编程。结对编程是XP的核心实践之一,但很多人执怀疑态度和观望态度。我觉得软件公司的企业文化对是否能成功执行结对编程是一个关键因素。如果下面三个问题都回答是,你可以试试实施结对编程。

  1、是否有一个可以能畅所欲言的,和谐平等的,相对民主的环境?

  2、是否有一种相互交流,相互研究,共享代码,共享知识的氛围?

  3、是否致力于一种共同成长,开放共享的学习型组织?

这篇关于结对编程的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897880

相关文章

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor