Pair_Work Project
结对项目小记
——by 12061227 康 12061179 宇帆
结对编程就是一种敏捷软件开发的方法,两个人在一个计算机上共同工作。一个人输入,而另一个人检查他输入的每一行代码。输入代码的人称作驾驶员,审查代码的人称作观察员(或导航员)。两个程序员经常互换角色。
在结对编程中,观察员同时考虑工作的战略性方向,提出改进的意见,或将来可能出现的问题以便处理。这样使得驾驶者可以集中全部注意力在完成当前任务的"战术"方面。观察员当作安全网和指南。结对编程对开发程序有很多好处。比如增加纪律性,写出更好的代码等。
结对编程的优点在于每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。在结对编程中,因为有随时的复审和交流,程序各方面的质量取决于一对程序员中各方面水平较高的那一位。这样,程序中的错误就会少得多,程序的初始质量会高很多,这样会省下很多以后修改、测试的时间。具体地说,结对编程有如下的好处:
两个人的激烈讨论产生了很多灵感,在我们在讨论中,常常会想到非常好的点子来解决在编程过程中不断出现的新问题。
对我们自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感。
在心理上, 当有另一个人在你身边和你紧密配合, 做同样一件事情的时候, 你不好意思开小差, 也不好意思糊弄。
增强代码和产品质量,并有效的减少BUG。
总之,如果运用得当,结对编程能得到更高的投入产出比(Return of Investment)。
结对编程的缺点我认为在于
完成同一个功能的代码可能不同人实现的方式是不一样的,假设他们写出来的都是很优质的代码。这个时候就需要结对双方都能够意识到并承认这一点。结对的本质是用两个人的大脑拼接出最优质的代码,如果代码已经是最优了,那就无需对这段代码妄加评论了。这样就产生了反效益的产出
有时候,程序员们会对一个问题各执己见,争吵不休,影响工作效率
有些程序员不喜欢在工作的时候身后/或旁边 有人盯着,有一种被监视的感觉。
有的人认为编码要进行独立思考,而独立思考过程是一个私人的问题,有问题可以在专门的会议上讨论,但当你在分析处理具体问题时候总有人在旁边啰里八嗦的时候不会感到愉快。
有经验的人更喜欢单刀直入,找个人来站在他背后看着他可能会让他感到非常的不适,最终导致编程时受到情绪影响,反而出现反作用。
安康同学的优点在于:1.工作非常认真 2.工作过程中积极向上,充满热情。3.工作效率奇高,有很多非常好的点子。
刘宇帆同学的优点在于:1.工作态度良好,所以很少发生争执。 2.对工作方向态度乐观 3.具有较好的分析能力
刘宇帆同学的缺点在于:个人技术能力不够强
Information Hiding, interface design, loose coupling 的应用
Information Hiding即数据隐藏,在面向对象的程序设计过程中,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的。在面向对象方法中,信息隐蔽是通过对象的封装性来实现的。实现方法可以是类的成员变量的可见性统一成private,并设计相应的属性。
interface design即接口设计,它的优点在于使程序具有良好的封装性,便于扩展功能而不影响原来的类是封装的一个主要的好处,就是增加软件代码的内聚性。通过增加内聚性,进而提高可复用性和可扩展性。接口能够提供给后面的程序设计一个宏观的控制,我们通过接口能很快的知道电梯、乘客的调度方案、请求都有哪些属性,要实现哪些方法,而不用关心具体的实现细节。
loose coupling即松耦合,软件功能模块的设计和划分按照OO(面向对象)的思想,遵循"强内聚,弱耦合"的原则,也就是尽量将相互依赖的类放在一个命名空间(包)中,内部结构和联系要尽量紧密——强内聚;对外模块尽量与其他方法或功能减少 耦合---弱耦合 ,以便功能上或代码上可以达到重用,再组合新功能的时候,可以像搭积木一样,分别拿出去再重用,而不会太关联其他。
Pair Work中的Design by Contract, Code Contract
在Design by Contract(契约式设计)的模式中,这是一种设计计算机软件的方法。这种方法要求软件设计者为软件组件定义正式的,精确的并且可验证的接口,这样,为传统的抽象数据类型又增加了先验条件、后验条件和不变式。这种方法的名字里用到的"契约"或者说"契约"是一种比喻,因为它和商业契约的情况有点类似。
在这种模式下,优点是使用者和被调用者地位平等,双方必须彼此履行义务,才可以行驶权利。契约所核查的,是"为保证正确性所必须满足的条件",因此,当契约被破坏时,只表明一件事:软件系统中有bug。双方都有必须履行的义务,也有使用的权利,这样就保证了双方代码的质量,提高了软件工程的效率和质量。
在Design by Contract(契约式设计)的模式中缺点也是不可避免的,由于契约的限制比较大,在有的模式存在有改动的时候变更的部分会更多,而且契约式编程需要一种机制来验证契约的成立与否。而断言显然是最好的选择,但是并不是所有的程序语言都有断言机制。那么强行使用语言进行模仿就势必造成代码的冗余和可读性的降低。
UML类图
Pair_Work Project的更多相关文章
- .NET Core系列 : 2 、project.json 这葫芦里卖的什么药
.NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...
- 记一个mvn奇怪错误: Archive for required library: 'D:/mvn/repos/junit/junit/3.8.1/junit-3.8.1.jar' in project 'xxx' cannot be read or is not a valid ZIP file
我的maven 项目有一个红色感叹号, 而且Problems 存在 errors : Description Resource Path Location Type Archive for requi ...
- ASP.NET Core project.json imports 是什么意思?
示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...
- PhpStorm和WAMP配置调试参数,问题描述Error. Interpreter is not specified or invalid. Press “Fix” to edit your project configuration.
PhpStorm和WAMP配置调试参数 问题描述: Error. Interpreter is not specified or invalid. Press “Fix” to edit your p ...
- Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)
作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...
- CSharpGL(20)用unProject和Project实现鼠标拖拽图元
CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...
- Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事
前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...
- My First Android Application Project 第一个安卓应用
一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...
- ASP.NET Core中的project.json何去何从?
Shawn Wildermuth (https://wildermuth.com/2016/05/12/The-Future-of-project-json-in-ASP-NET-Core) If y ...
随机推荐
- C#中的console类输入输出功能
Console.WriteLine() 直接将括号内内容显示在控制台界面中(相当于C语言printf()吧) Console.ReadLine()获取控制台用户自己输入的内容(功能和C语言scanf( ...
- 使用navicat 连接mysql出现1251错误
最近需要用MYSQL,使用navicat 连接时总出现1251错误,在网上查了一些别人的方法并试过 以下方法是正确的. 方法来自:https://blog.csdn.net/XDMFC/article ...
- 17秋 软件工程 团队第五次作业 Alpha Scrum12
各个成员今日完成的任务 Alpha版本完成. 项目的发布说明 本版本的新功能 1.部门人员管理,包括纳新申请与审核: 2.部门活动发布与查看: 3.部门活动相册: 4.子部门信息录入. 软件对运行环境 ...
- 建立标准编码规则(三)-CodeFixProvider 给代码分析器增加修复建议
给代码分析器增加修复建议 既然代码分析器,向代码编写者提出了错误或警告,那么有没有可能向代码编写者提交有效的改进建议? 相对于 DiagnosticAnalyzer,代码修复继承与 CodeFixPr ...
- D - C Looooops POJ - 2115 欧几里德拓展
题意:就是看看for(; ;)多久停止. 最让我蛋疼的是1L和1LL的区别!让我足足wa了12发! 1L 是long类型的, 1LL为long long类型的! 思路: 这就是欧几里德扩展的标准式子了 ...
- 【转】MySQL 当记录不存在时insert,当记录存在时update
MySQL当记录不存在时insert,当记录存在时更新:网上基本有三种解决方法 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句 ...
- Arduino IDE for ESP8266 项目云盒子 (1)AP直接模式
手机直接连接esp8266辐射的WIFI,通信. https://item.taobao.com/item.htm?spm=a230r.1.14.20.eYblO3&id=5219451024 ...
- django -- 推荐商品算法
协同过滤算法之基于物品的推荐算法 目前有关个性化推荐算法主要分为三大类:1.基于协同过滤的推荐:2.基于内容过滤的推荐和3.社会化推荐. 本文主要讨论基于协同过滤的推荐,而该算法也可以划分为两类: 1 ...
- 配置Linux下vim自动缩进等功能
从终端打开配置文件: vim ~/.vimrc 添加如下代码: set tabstop=4 set softtabstop=4 set shiftwidth=4 set autoindent set ...
- Java部署环境搭建(Linux)
环境搭建必须jdk.tomcat.mysql(基础) 额外的软件包项目中可能用到 jdk:它包含jre和开发所需完整类库. tomcat:它是一个web容器,项目通常往webapps下扔,便于外界访问 ...