结对编程的理解

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

相关文章

认识、理解、分类——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

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

【C++高阶】C++类型转换全攻略:深入理解并高效应用

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C++ “ 登神长阶 ” 🤡往期回顾🤡:C++ 智能指针 🌹🌹期待您的关注 🌹🌹 ❀C++的类型转换 📒1. C语言中的类型转换📚2. C++强制类型转换⛰️static_cast🌞reinterpret_cast⭐const_cast🍁dynamic_cast 📜3. C++强制类型转换的原因📝

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。

Go Playground 在线编程环境

For all examples in this and the next chapter, we will use Go Playground. Go Playground represents a web service that can run programs written in Go. It can be opened in a web browser using the follow

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

如何通俗理解注意力机制?

1、注意力机制(Attention Mechanism)是机器学习和深度学习中一种模拟人类注意力的方法,用于提高模型在处理大量信息时的效率和效果。通俗地理解,它就像是在一堆信息中找到最重要的部分,把注意力集中在这些关键点上,从而更好地完成任务。以下是几个简单的比喻来帮助理解注意力机制: 2、寻找重点:想象一下,你在阅读一篇文章的时候,有些段落特别重要,你会特别注意这些段落,反复阅读,而对其他部分

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)