我们组比较特殊。。三人结对

github:https://github.com/qingchanghan/WPFUI_Metro

po一张照片:

石浩然,韩青长、陈彦吉

(台式机真的很高端,分屏贼帅)

1.结对编程的优点和缺点:

  优点:

  随时沟通交流,当遇到复杂的代码逻辑时,两个人比一个人能更好地理清代码思路。

  一个人乱了另一个人不会乱,或者很难出现两个人一起乱,正确率整体、代码质量很高。

  可以实现编程接力,在确定好todo项目后,可以交接工作,续航时间更长。一节更比六节长。

  在心理上相互鼓励相互支持,在取得阶段性进展后,喜悦×n,贼开心。
  缺点:
  当结对编程的双方能力、性格、关注点有较大差距,且deadline紧迫时,不能更好地发挥结对编程相互指导的作用。

2.每一个人的优点和缺点

  石浩然:心胸宽广,学习能力强,解决问题有独特的思路,但是由于完成个人项目时没有考虑到自己的代码会被他人用作扩展的基础,因此代码逻辑较复杂。

  韩青长:学习能力强,实践能力强,目前没发现什么缺点。

  陈彦吉:没什么优点。。缺点是心胸狭隘,比较怕麻烦。。

以下为结对项目博客中的共同部分。

3.INFORMATION HIDING

  当开发一个完整的程序时,可将程序的每个组成部分封装在一个模块中,每个模块尽量少地对外展示模块内部的数据与对数据的处理,以此提高代码的复用性、可维护性。减少外界可见的信息,以保持模块的独立性,以此降低耦合 。

  从具体实现来说,我们确保某些成员变量和功能为private,并尽可能保证高层类只会调用底层类中特定的几个可供外界访问函数,而将其他方法封装在内部,限制了高层类对底层类的调用。

4.INTERFACE DESIGN

  依稀记得OO曾经上过这个。。

  接口设计一共有六大原则。原则说的都很清楚。。但是具体我们如何使用还是要多摸索。。

  以下整理自博客

  一.单一职责原则
      根据实际需求划分职责,尽量做到职责单一
  二.里氏替换原则
      所有引用基类的地方必须能透明地使用其子类的对象
  三.依赖倒置原则
      高层模块不应依赖底层模块,两者都应依赖其抽象
      抽象不应该依赖细节,细节应该依赖抽象
  四.接口隔离原则
      接口尽量小,不要建立大接口,同时接口中方法尽量少,将接口隔离起来,将整体框架进行有效划分。
  五.最少知识原则
      跟information hiding有异曲同工之妙,此原则的使用可以降低程序耦合
  六.开闭原则
      一个软件实体如类、模块和函数应该对扩展开放,对修改关闭,编程前对不同的模块确立明确的逻辑分工,为变化预留位置
      但是我们这一次由于大结构简单,因此没有设计接口,所以这些原则没有得到很好的实践。。希望能在以后的团队项目中积累相关经验 

5.LOOSE COUPLING
尽可能全面地把握耦合度的高低,平衡好耦合和内聚程度,以确保可读性、服用性、可维护性的提升
不可一味强调低耦合,例如程序中发生变更概率很小的地方,不宜强行低耦合。
还有程序中一些为大函数服务的小函数,小函数本身是依附大函数存在的,本身不会和其他模块建立过多的依赖关系,此时在耦合度上最好也做相应折衷(好吧。。主要是因为我怕麻烦)

6.DESIGN BY CONTRACT

design by contract把类与被调用类之间的关系看作契约,规定了双方的权力与义务,这一方法被认为是构建OO软件系统方法的核心。
另外,
我们通过一些知乎回答了解到的契约式设计:
目的:
在设计程序时明确规定一个模块单元在调用前后应当处于何种状态,属于一种设计风格或是语法规范
思路:强调前置条件、后置条件和不变式,当违反这些操作时程序会抛出异常。
 
优点是:契约式编程使代码标准化、规范化,提高了程序工程化程度。
同时,对于测试者,在我们这次作业中,我们通过在不满足前置条件的情况下抛出异常,便于测试者测试。
 
缺点是有点麻烦。。

7.单元测试与代码覆盖率

  这次结对编程,由于函数之间的调用关系较为复杂,因此我们仅对最主要的几个函数进行了测试如下是测试函数 。
 
  一般来说通过assert.areequal方法可以测试大多数运算操作的值是否正确
  [TestMethod()]
  public void ReadDataTest()
  [TestMethod()]
  public void BuildGragphTest()
  [TestMethod()]
  public void FindNearestTransStaTest()
  [TestMethod()]
  public void DijkstraPathTest()
  [TestMethod()]
  public void BFSPathTest()
  [TestMethod()]
  public void MakePathSectionTest()
  [TestMethod()]
  public void isSameLineTest()
  [TestMethod()]
  public void GetLinkedStationsTest()
  [TestMethod()]
  public void GetShortestLinkedStationsTest()
  另外,我们也测试了功能函数在遇到错误的输入时是否按照规定情况抛出了我们事先设定的异常,
  我们设定了如下的异常:
  1.某些情况下操作返回的空值引发的空引用异常
  2.站点名称输入错误的站点输入异常
  3.地图文件没有被正确开启的文件未被打开的异常
  4.地图文件内部格式不符合规范的异常
  5.内存溢出的异常

8.UML类图

9.关于我们的附加题和程序的一些特色

  9.1我们一开始完成了一个winform开发的版本,比较粗糙,但实现了基本功能,之后采用了石浩然同学通过WPF开发的界面,简洁美观,功能强大,不得不说他确实花了很多心思在UI上,这里特别鸣谢石浩然同学

  9.2关于我们的附加题。我们只需要一开始读入的txt按照我们要求的格式,并且提供一张与txt文件对应的地铁线路图,我们就可以实现其他城市的出行规划。

  这里说一下我们的实现方法:txt文件中除了站点和线路,还要有每个站在线路图中的坐标,我们后期要根据这个坐标在图上显示相应的站与动画效果

  9.3在winform版中,我们将站点设置为按钮并固定在了地图上,用户可以通过点击地图或输入文本框来设置起点和重点,在WPF版中,由于鼠标的点击时间与图片的拖动绑定了,因此我们省去点击地图的功能,只能通过输入文本框来进行。

  9.4石浩然同学比较厉害,完成了-a的功能,并通过多线程,实现了程序可在后台计算-a,同时在前台计算用户的其他请求,当计算完成后再输出-a结果。不得不说他真的很厉害。。。特别鸣谢。。

10.个人总结

  因为我们这一组是三人结对,所以比起两人结对,我们可能更偏向团队编程一些。在被deadline追赶的这几天里,我深刻地认识到了自己性格上的缺陷。

  由于代码复审给我留下的印象不是很好,导致我可能对他存在一些偏见,当在决定使用他的代码为基础扩展时,我有一些抵触情绪,后来因为为了修复他的代码他和另一位同学给代码做出了较大修改,我的抵触情绪加剧了,但是不论是最后的UI还是功能,他的贡献确实是排在第一位的。这里确实要说一句辛苦了!

  在结对中,我想的更多的可能是取舍的问题:代码简洁与代码高效是我们追求的两个维度,但是在很多情况下这两个难以两全齐美,所以在真正开发而且deadline紧迫时,我们应该怎样做取舍?根据什么做取舍?如何保证我们取了大的,舍了小的,不让自己亏本?以及以后团队编程中的一些编程规范的问题。

  于是我想,这次结对编程对我来说可能更多的是对团队编程的一次预演,如何融洽团队,调节自身情绪,跳出偏见,公平公正地看待问题是我目前来说需要注意和改进的。以及这一次结对编程我做的真的很少,希望团队任务中我能多承担一些任务。

  

  

结对编程-地铁续(有种上个学期OO的既视感)的更多相关文章

  1. 结对编程UI

    GitHub:https://github.com/zsl1996/UI/commits/master 一.            实验内容 这是交付给最终用户的软件,有一定的界面和必要的辅助功能.完 ...

  2. 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]

    作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...

  3. 结对编程-stage_2

    教学班 罗杰.任建班周五3.4节 gitlab项目地址 Here it is. 成员 周远航(3004) 李辰洋(3477) 结对编程体验 经过了上一阶段的磨合,第二阶段我们的配合更加流畅,也熟悉了对 ...

  4. Week4 结对编程

    1.照片 1.1  结对编程参与者:李文涛.黎柏文 1.2  展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...

  5. 第二次作业:结对编程,四则运算的GUI实现

    小伙伴:201421123031 余洋 201421123044  潘志坚  题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是W ...

  6. [2019BUAA软工助教]结对编程 - 小结

    [2019BUAA软工助教]结对编程 - 小结 一.评分规则 博客 博客共五十分 序号 要求 分值 1 在文章开头给出Github项目地址 1 2 在开始实现程序之前,在下述PSP表格记录下你估计将在 ...

  7. 结对编程 学习手记ver1.2

        团队成员: 226 高雅智 164刘浩然: 一 结对编程 辛辛苦苦搞了好久的时间,就是没有人家的快,明明算法都差不多,哎~~~ 结对的优势,在于双方互相督促,对于代码能贡献自己的能力,人多力量 ...

  8. 软件工程启程篇章:结对编程和进阶四则运算(197 & 199)

    0x01 :序言:无关的事 I wrote a sign called "Dead End" in front of myself, but love crossed it wit ...

  9. 2017-2018-2 1723《程序设计与数据结构》第十一周作业 & 实验三 & (总体)第三周结对编程 总结

    作业地址 第十一次作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1933 (作业界面已评分,可随时查看,如果对自己的评分有 ...

随机推荐

  1. 基于MVC4+EasyUI的Web开发框架经验总结(9)--在Datagrid里面实现外键字段的转义操作

    我们在使用EasyUI的时候,很多情况下需要使用到表格控件datagrid,这个控件控件非常强大,使用起来很简洁,但是我在使用中,发现对于一个表里面的外键字段进行转义,并显示引用表的一些名称的操作,却 ...

  2. 数据库SQL server规则的创建、查看、修改和规则的绑定与松绑、删除

    用CREATE RULE语句创建规则 创建雇佣日期规则 hire_date_rule CREATE RULE hire_date_rule AS @hire_date>='1980-01-01' ...

  3. Delphi 收藏

    日前整理仓库,翻出了一些 Delphi 产品,以前购买的 Delphi 都有实体产品,包含说明书.光碟片.还有一些广告文宣,而且相当厚实,版本的演进,从外包装也能感受到,到目前的 XE5 版,只剩一个 ...

  4. Get,Post请求中文乱码问题有效解决方法

    本文主要介绍如何有效解决web请求中的乱码问题,其实解决方法有很多种,不同的请求类型解决方法也不相同. 本文只介绍最方便的一种: 1.先修改jsp中的编码方式 2.针对Post方式提交的请求如果出现乱 ...

  5. Java基础复习笔记系列 三

    前几节都是基础中的基础,从第三讲的笔记开始,每次笔记针对Java的一个知识块儿.  Java异常处理 1.什么是异常? 异常是指运行期出的错误.比如说:除以一个0:数组越界:读取的文件不存在. 异常处 ...

  6. mysql安装中出现的问题,

    花了一天的时间明天mysql的安装方法: 自己的错误: 主要原因: (1):bin文件坏境配置出现了问题,没有重新在系统中配置文件 解决方法:右击电脑——属性——高级系统设置——变量配置——在path ...

  7. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

  8. mongodb命令使用大全(常用命令)

    数据库常用命令 1.Help查看命令提示 help db.help(); db.yourColl.help(); db.youColl.find().help(); rs.help(); 2.切换/创 ...

  9. jQuery validate 根据 asp.net MVC的验证提取简单快捷的验证方式(jquery.validate.unobtrusive.js)

    最近在学习asp.netMVC,发现其中的验证方式书写方便快捷,应用简单,易学好懂. 验证方式基于jQuery的validate 验证方式,也可以说是对jQuery validate的验证方式的扩展, ...

  10. Guacamole之本地安装Guacamole(二)

    摘要 在网上看到一篇Guacamole官方手册的翻译,但是找不到后续,于是想自己也翻译几篇,有时间的话,会尽量多翻译一些. 原文地址:http://guacamole.incubator.apache ...