PairProject——结对编程
成员:12061162 王骜
12061225 钟毅恒
一、合作过程中的照片
、
二、结对编程的优缺点
优点:
1)在编程过程中,任何一段代码都不断地复审,同时避免了将写代码的责任抛给一个人的问题,而是属于两个人,可以帮助建立集体拥有代码的意识。
2)结对编程的过程也是一个互相督促的过程,每个人都可以监督,督促对方的工作。由于这种督促的压力,使得双方都可以更认真地工作,频繁交流讨论对方的代码以防止出现纰漏,提高自身的代码质量。
3)为了避免一个人长时间进行同一项工作会产生疲劳的现象,结对编程中两个程序员还可以互换角色,轮换驾驶员和领航员的角色,从而长时间保证较高的工作效率。
缺点:
1)如果两个人的共同时间比较少的话,互相等待,影响效率,采用结对编程的方式反而比较浪费时间。
2)如果是一个需要花时间长期钻研的项目,采用结对编程的方式反而会影响一个人的思路,适得其反。
三、每个人的优缺点
王骜
优点:
1) 代码编写能力强,有丰富的代码编写经验
2) 刻苦勤奋,锲而不舍
3) 逻辑思维活跃,能有创新的想法
缺点:
1) 调试较费时间,调试代码的能力有待提高
钟毅恒
优点:
1) 勤奋好学,能边学习C#同时编写代码
2) 能够虚心听取partner提出的意见
3) 较细心
缺点:
1) 代码编写能力较弱,编写量有待提高
四、 看教科书和其它资料中关于 Information Hiding, interface design, loose coupling 的章节并说明怎样利用好这些设计方法。
information hiding(信息隐蔽)
每个模块应该对其他所有模块隐蔽自己的设计决策。换句话说,模块应该规定并设计成为在模块中包含的信息(算法和数据)不被不需要这些信息的其他模块访问。
通过定义一系列独立的模块可以得到有效的模块化,独立模块相互之间只交流实现软件功能所必需的那些信息。还可以加强对模块内过程细节的访问约束和对模块所使用的任何局部的数据结构的访问约束。
在随后软件维护过程中,修改过程中不小心产生的错误不至于传播到软件的其他位置。
interface design(接口设计)
接口设计包括三个重要的元素:
1.用户界面(UI)
包含美学元素,人机工程元素和技术元素,通常UI使整个应用体系结构中独一无二的子系统。
2.和其他系统,设备,网络或其他信息生成者或使用者的外部接口。
需要关于发送和接收信息的实体的确定信息。在所有情况下,这些信息都要在需求工程中收集,并且开始时还要检验这些信息。
3.各种设计构件之间的内部接口。
分析类的设计实现表示所有操作和信息传递模式,使得不同类的操作之间能够进行通信和协作。每个消息的设计必须提供必不可少的信息传递和已被请求操作的特定功能需求。
loose coupling (松耦合)
在设计模型内,协作应该保持在一个可以接受的最小范围内。即通常,一个子系统内的设计类对其他子系统中的类应仅有有限的了解。一个类中的方法应该只向周边类中的方法发送消息,而不是直接的套用周边类中的方法内部的内容。
松耦合,就是在对象之间既要保持一定的通信,也要有一定地独立性。但在程序设计中不能一味地追求松耦合,这样会使程序粒度过低,使得程序庞大繁杂,适得其反。
在这次的程序设计中,Scheduler的算法不能仅仅适用于测试用例,如果电梯的部数变化,场景变化,Scheduler也不用修改,因此,即使知道现在的电梯是4部,也不能在算法中直接使用4,而是应该使用电梯的Count()值。并且算法的实际也不能仅仅使用于测试案例,应该有更大地适用范围。
Scheduler和Elevator类虽然密切相关,但是二者还是主要通过通信来相互控制,并没有直接进行引用。
描述这些契约式设计做法的优缺点, 说明你是如何把它们融入你的作业中的。
契约式设计的提出,主要基于软件可靠性方面的考虑。可靠性包括正确性和健壮性,正确性指软件按照需求规格执行的能力,健壮性指软件对需求规格中未声明状况的处理能力。
优点:
- 文档。在文档中不仅包含签名描述,也能包含契约描述,如果能更进一步象VisualStudio智能提示那样呈现,能减少很多编码过程中犯下错误。
- 测试、调试、品质保证。NUnit是比较完善的断言测试框架,如果语言本身提供契约式设计支持,我们可以使单元测试中断言的覆盖范围更广泛(考虑一般都是开发者自己做单元测试),能够帮助发现更多隐性的缺陷,断言测试代码的编写会更简洁。
缺点:
契约式设计过于死板,不容易让创意得到实现,也不容易添加新的功能,因为函数功能已经约定好。
在作业中我们应用契约式设计主要体现在对用户输入数据的接收上,这就好比商业契约,用户和程序员之间呈现一种相对平等的关系,即如果用户没有遵守程序员在程序开头所定下的准则,那么程序员所编写的程序也没有义务必须给用户呈现一个满意的结果。
契约式设计在本次工程中的应用
刚开始我和柴泽华对算法进行了讨论,确定了算法的主线。之后,为了达到契约式设计的目的,我们进一步细化算法,几乎以伪代码的方式实现了算法,这个伪代码就是我们的契约。
在实践中,我们发现,契约式设计使得代码的编写一次成型,貌似很好。但是,这个契约式的代码的结果并不理想,当我们想对它进行小规模地修改时,发现它牵一发而动全身。最后不得不重新写一份代码,以获得良好的结果。
可以看出,契约式设计虽然保证了正确,但是对于不断适应外部新环境的开发,以及探索地、创新地开发并不适用。而现在软件开发所面对的环境就是一种不断变化的环境,契约式设计可能会逐渐不能适应。
五、通过截屏显示你是如何用VS 的unit test 来保证你写的类的质量的。显示unit test 对你的写的类(class) 的覆盖率
单元测试结果:
类的覆盖率:
最终覆盖率达到了92.50%。
六、画出UML 图显示各个实体之间的关系
七、
实现你的算法并说明你的算法的关键 (不必列出源代码), 以及独到之处。
算法的关键:
优化BUS算法,把所有已进队的指令扫一遍,找出最近的顺路需停靠楼层(即有乘客从楼层外部发出请求或从电梯内部发出停靠楼层指令的楼层),然后判断,若此楼层为电梯可停靠楼层,就把电梯所要停靠的下一楼层设为该楼层。
然后,因为最近的所需停靠楼层初始值为21或-1,若指令扫一遍以后这个值没有改变,则表示当前方向楼层没有需要停靠的,则把电梯运行方向改变,继续搜索下一停靠楼层。
独到之处:
首先对最近顺路需停靠楼层的定义使电梯更贴近实际情况,而若电梯当前方向上没有需停靠楼层,则电梯运行方向改变,这使得乘客的等待时间大幅度减少,是性能提高路上一次质的飞跃。
PairProject——结对编程的更多相关文章
- 关于软件工程结对编程作业 PairProject : Elevator Scheduler(电梯调度算法的实现与测试)的总结
1)结对编程队友 1106xxxx 张扬 1106xxxx 杨军 其中,此项目的编程实现主要由前者完成. 2)关于结对编程 结对编程的优点: 最直接的一点:在结对编程中,由于有另一个人在你身边和你配合 ...
- 结对编程--基于android平台的黄金点游戏
游戏内容: 阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫“黄金点”的游戏: N个同学(N通常大于10),每人写一个0~100之间的有理数 (不包括0或1 ...
- 结对编程-地铁续(有种上个学期OO的既视感)
我们组比较特殊..三人结对 github:https://github.com/qingchanghan/WPFUI_Metro po一张照片: 石浩然,韩青长.陈彦吉 (台式机真的很高端,分屏贼帅) ...
- 结对编程项目——四则运算vs版
结对编程项目--四则运算vs版 1)小伙伴信息: 学号:130201238 赵莹 博客地址:点我进入 小伙伴的博客 2)实现的功能: 实现带有用户界面的四则运算:将原只能在 ...
- 结对编程—黄金点游戏WinForm单机版
本小游戏场景来自邹欣老师的<移山之道>一书: "阿超的课都是下午两点钟,这时班上不少的同学都昏昏欲睡,为了让大家兴奋起来,阿超让同学玩一个叫"黄金点"的游戏: ...
- Week4 结对编程
1.照片 1.1 结对编程参与者:李文涛.黎柏文 1.2 展示照片 2.结对编程的优点&缺点 2.1 优点 2.1.1.两人分工合作,减少了工作量 2.1.2.结对编程的伙伴往往能提供不同 ...
- 结对编程——关于Fault、Error、Failure程序设计
一.问题描述: 构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error •触发Error,但是不能产生Fai ...
- GUI、模块化与结对编程(homework-03)
摘要: 在本次作业博客里,我将主要阐述作业3的收获.作业3表面是将之前的程序转换为图形界面(之前程序见http://www.cnblogs.com/shone/p/3348372.html),然而本质 ...
- BJDP结对编程活动
7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ...
随机推荐
- tkinter学习系列之(七)Frame与Labelframe 控件
目录 目录 前言 (一)Frame (二)Labelframe 目录 前言 Frame与Labelframe都是容器,用来存放其他控件,也是用来更好的管理布局. 我一般是用来存放一组相关的控件,让Fr ...
- js根据鼠标和键盘判断页面是否长时间未进行操作
<script> var count = 0; var outTime = 1;//分钟 window.setInterval(go, 1000); function go() { cou ...
- sql语句如何将多个空格字符替换成一个空格字符
很多时候,数据表中某个字段的值会带有一个或多个空格字符串的情况,面对多样化的需求,我们可能需要将这些空格字符串去除,当然,这很好说,我们可以直接用replace(' ','')将单个空格变成无就可以了 ...
- CF 932E Team Work
原题题面 题目大意:求\(\sum\limits_{i=0}^{n}C_{n}^{i}i^{k}\). 我们根据套路\(n^{k}=\sum\limits_{i=0}^{k}C_{n}^{i}i!S_ ...
- MessageQueue 相关概念
/** * Implements a thread-local storage, that is, a variable for which each thread * has its own v ...
- 20145236《网络对抗》Exp8 WEB基础实践
20145236<网路对抗>Exp8 WEB基础实践 一.基础问题回答 什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框. ...
- java开发过程问题及解决
1.junit做测试时候报异常: junit.framework.AssertionFailedError: No tests found in com.mq.original.OriginalMqP ...
- js删除数组元素、清空数组的简单方法
一.清空数组 ? 1 2 3 var ary = [1,2,3,4]; ary.splice(0,ary.length);//清空数组 console.log(ary); // 输出 [],空数组,即 ...
- P1823 [COI2007] Patrik 音乐会的等待 单调栈 洛谷luogu
题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ...
- P1160 队列安排 luogu洛谷
题目描述 一个学校里老师要将班上NNN个同学排成一列,同学被编号为1∼N1\sim N1∼N,他采取如下的方法: 先将111号同学安排进队列,这时队列中只有他一个人: 2−N2-N2−N号同学依次入列 ...