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

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. App单个页面的最佳文本框个数是多少个?

    [1].不同大小的手机屏幕,对应的App每页最佳文本框个数,是不同的. [1.1]如果是iPhone4的屏幕尺寸,分辨率为640x960px的时候, 文本框个数最大值为:2个文本框 [计算公式] 第 ...

  2. Android使用SQLite数据库(3)

    插入新数据到SQLite数据库,首先定义一个ContentValues变量,然后使用put方法: public void put (String key, String value) 其中key是字段 ...

  3. 修正 ListView 搜寻问题

    问题:如果 SearchEdit 里已输入过搜寻字,再新建 ListView 项目后,会无法显示. 适用:Delphi XE5 源码下载:[原创]修正ListView搜寻问题.zip procedur ...

  4. Oracle 数据库基础学习 (五) 多表查询

    多表查询:查询结果需要用到两个或者以上表,此时需要多表连接,产生多表查询 1.内连接(等值连接) 示例:将两个表内容连接显示 select * from dept d, emp e where d.d ...

  5. Oracle 数据库基础学习 (四) group by的使用

      group by分组查询 示例:要求查询出每个部门的编号,人数,以及最高和最低工资  select deptno, count(empno), max(sal), min(sal) from em ...

  6. JS json的使用

    json的定义 json能够通过4种基本数据类型以及2种结构化数据表示   字符串 "footbar" 不能使用单引号 数值 125.4 只支持10进制 布尔 true  fals ...

  7. ubuntu 下安装redis 以及php扩展

      下载redis wget http://download.redis.io/redis-stable.tar.gz   tar xzf redis-stable.tar.gz cd redis-s ...

  8. 基于HTML5 geolocation 实现的天气预报功能

    最近一直在学习HTML5,因为8月份要开发手机项目了.所以先把HTML5学习下. 基本思路: 1. 用户未设置任何城市之前,根据HTML5 geolocation 获取用户所在的地理位置. 2. 根据 ...

  9. (原) tmux安装与使用

    本文为原创文章,转载请注明出处,谢谢 tmux安装 1.yum search tmux 2.yum install package (package为选择要安装的包名,如上图“tmux.x86_64” ...

  10. springmvc 多数据源 SSM java redis

      A集成代码生成器 [正反双向(单表.主表.明细表.树形表,开发利器)+快速构建表单; freemaker模版技术 ,0个代码不用写,生成完整的一个模块,带页面.建表sql脚本,处理类,servic ...