结对项目小记

——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. [Demo_01] MapReduce 实现密码 Top10 统计

    0. 说明 通过 MapReduce 实现密码 Top10 统计 通过两次 MapReduce 实现 1. 流程图 2. 程序编写 密码 Top10 统计代码

  2. Maven将依赖包、jar/war包及配置文件输出到指定目录

    使用Maven插件将依赖包 jar包 war包及配置文件输出到指定目录 写在前面 ​ 最近遇到一个朋友遇到一个项目需要将 maven 的依赖包和配置文件分开打包然后用脚本执行程序.这样的好处在于可以随 ...

  3. Python基础知识:模块

    目录 JSON模块&pickle模块 requests模块 time模块 datetime模块 logging模块 os模块 sys模块 hashlib模块 re模块.正则表达式 config ...

  4. ubuntu 14.04安装zabbix3.0以及汉化

    文章出处借鉴于 http://www.cnblogs.com/-10086/p/5317524.html 1.下载deb # wget http://repo.zabbix.com/zabbix/3. ...

  5. Kali下Ettercap 使用教程+DNS欺骗攻击

    一.Ettercap 使用教程 EtterCap是一个基于ARP地址欺骗方式的网络嗅探工具.它具有动态连接嗅探.动态内容过滤和许多其他有趣的技巧.它支持对许多协议的主动和被动分析,并包含许多用于网络和 ...

  6. 在pycharm中每次运行代码不使用console而使用run

    问题:在pycharm中点击run运行程序,发现没有打开run窗口,而是打开的Python console窗口. 解决方法:打开菜单栏run->edit configurations,把下图中的 ...

  7. [ISE 14.7] _pn.exe 崩溃问题 点击浏览崩溃问题

    前言 装了大半天的ISE 14.7 结果新建工程的时候只要点击浏览文件夹,直接无响应,其实和其他_pn.exe崩溃是一样的. 解决方法 第一步:非常重要,进行文件备份,将"F:\Xilinx ...

  8. React学习笔记_01

    使用Facebook的create-react-app快速构建React开发环境 前言: create-react-app:来自Facebook官方的零配置命令行工具 create-react-app ...

  9. Hadoop 基本概念

    一.Hadoop 简介 Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构,它可以使用户在不了解分布式底层细节的情況下开发分布式程序,充分利用集群的威力进行高速运算和存储. 从其定 ...

  10. Iris框架源码阅读和分析

    iris包结构简介 iris包含了很多包,下面这些是分析过程中接触到的东西. 能力有限,多多包涵,欢迎联系QQ:2922530320 一起交流 context包包含: Context (接口) con ...