结对项目小记

——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的更多相关文章

  1. .NET Core系列 : 2 、project.json 这葫芦里卖的什么药

    .NET Core系列 : 1..NET Core 环境搭建和命令行CLI入门 介绍了.NET Core环境,本文介绍.NET Core中最重要的一个配置文件project.json的相关内容.我们可 ...

  2. 记一个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 ...

  3. ASP.NET Core project.json imports 是什么意思?

    示例代码: "frameworks": { "netcoreapp1.0.0": { "imports" : "portable- ...

  4. 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 ...

  5. Crystal Clear Applied: The Seven Properties of Running an Agile Project (转载)

    作者Alistair Cockburn, Crystal Clear的7个成功要素,写得挺好. 敏捷方法的关注点,大家可以参考,太激动所以转载了. 原文:http://www.informit.com ...

  6. CSharpGL(20)用unProject和Project实现鼠标拖拽图元

    CSharpGL(20)用unProject和Project实现鼠标拖拽图元 效果图 例如,你可以把Big Dipper这个模型拽成下面这个样子. 配合旋转,还可以继续拖拽成这样. 当然,能拖拽的不只 ...

  7. Microsoft Visual Studio 2013 — Project搭载IIS配置的那些事

    前段时间在改Bug打开一个project时,发生了一件奇怪的事,好好的一直不能加载solution底下的这个project,错误如下图所示:大致的意思就是这个project的web server被配置 ...

  8. My First Android Application Project 第一个安卓应用

    一.前言: 安卓(Android):是一种基于Linux的自由及开放源代码的操作系统,主要用在移动设备上,如手机.平板电脑.其他的设备也有使用安卓操作系统,比如:电视机,游戏机.数码相机等等. 二.具 ...

  9. ASP.NET Core中的project.json何去何从?

    Shawn Wildermuth (https://wildermuth.com/2016/05/12/The-Future-of-project-json-in-ASP-NET-Core) If y ...

随机推荐

  1. JavaScript 中的匿名函数((function() {})();)与变量的作用域

    以前都是直接用前端框架Bootstrap,突然想看看Javascript,发现javascript是个非常有趣的东西,这里把刚碰到的一个小问题的理解做下笔录(废话不多说,上代码). /** * Exa ...

  2. 基于LNMP(fastcgi协议)环境部署、原理介绍以及fastcgi_cache配置以及upstream模块负载均衡讲解

    ngx_http_proxy_module只能反向代理后端使用HTTP协议的主机.而ngx_http_fastcgi_module只能反向代理后端使用FPM或者使用FastCGI协议的客户端. 一.部 ...

  3. Mybatis&orcale update语句中接收参数为对象

    Mybatis的 mapper.xml 中 update 语句使用 if 标签判断对像属性是否为空值. UserDTO是传过来参数的类型,userDTO是在mapperDao接口中给更新方法的参数起的 ...

  4. TG可能会用到的动态规划-简易自学

    最新更新 完整校订版见此 戳我阅读 以下为未核对不完整版本. 因版权原因,完整精校版不向所有公众开放. 请从您找到本博客的地址查找附带密码(比如简书分享了本网址,请您从简书分享页底部查询密码),感谢您 ...

  5. Beta冲刺! Day1 - 磨刀

    Beta冲刺! Day1 - 磨刀 今日已完成 晨瑶:罗列Beta计划.和新人交接.任务安排 昭锡:无 永盛:服务器出现一些 mysql 的问题,伟鹏的爬取脚本没办法远程链接到服务器,在修 立强:学习 ...

  6. Python程序的编写方式

    直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...

  7. 多个Linux发行版安装ss服务端

    本文仅做技术探讨,请在遵守相应的法律法规的前提下使用. Centos 7一键安装脚本 简单快捷,随机生成密码,默认端口默认加密类型 bash <(curl -s http://morning.w ...

  8. leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree

    104: class Solution { public: int maxDepth(TreeNode* root) { if(root == NULL) ; int left = maxDepth( ...

  9. 安装webpack和webpack打包(此文转自Henery)

    Henery博客地址为:http://blog.csdn.net/henery_002 写的很详细,可以做参考 最近要做项目优化了,尤其是前端这块,许多js需要模块化管理和相应的优化 1.输入如下地址 ...

  10. 关于MySQL卸载重新安装的问题

    大体上一共分为3步,那么我们就美其名曰——三步走搞定MySQL安装 为什么说3步呢,如果你非要计较说我一次就重新安装成功了,就当我没说,这些是说给那些经常安装失败的同学看的! 切记,如若不想再以后My ...