Lab 1结对编程实验报告.docx

上传人:b****3 文档编号:973889 上传时间:2022-10-14 格式:DOCX 页数:10 大小:105.21KB
下载 相关 举报
Lab 1结对编程实验报告.docx_第1页
第1页 / 共10页
Lab 1结对编程实验报告.docx_第2页
第2页 / 共10页
Lab 1结对编程实验报告.docx_第3页
第3页 / 共10页
Lab 1结对编程实验报告.docx_第4页
第4页 / 共10页
Lab 1结对编程实验报告.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

Lab 1结对编程实验报告.docx

《Lab 1结对编程实验报告.docx》由会员分享,可在线阅读,更多相关《Lab 1结对编程实验报告.docx(10页珍藏版)》请在冰豆网上搜索。

Lab 1结对编程实验报告.docx

Lab1结对编程实验报告

XXX工业大学计算机科学与技术学院

《软件工程》

Lab1:

结对编程

[文档全部完成之后,请更新上述区域]

1实验要求

练习结对编程(pairprogramming),体验敏捷开发中的两人合作;

两人一组,自由组合;

使用一台计算机,共同编码,完成实验要求;

在工作期间,两人的角色至少切换4次;使用JAVA+Eclipse编程。

2待求解问题描述与数学模型

输入1:

一个服务流程,由一组活动及其之间的关系构成,使用DAG

输入2:

针对每个服务活动的候选服务集,各服务有功能和QoS信息;

输入3:

客户针对服务流程的QoS需求;

输出:

满足QoS需求的服务选择方案(使用DAG表示);

计算方式:

Q=TR–TP/100,其中TR为最终方案的总体可靠性,TP为最终方案的总价格,Q值越大越好。

3算法与数据结构设计

3.1设计思路

主要思想为深度优先搜索,用到的数据是根据数据表第四个值(即价格)有小到大排好序的数据,以排好序的各个字母最小的价格值对应的Q值作为初始判断条件值。

寻找一条完整路径可以划分为两个部分,一部分是还没有搜索到最后一个字母,另一个是到了最后一个字母搜索。

第一部分搜索存在三种情况,一是搜索字母对应的500个数据时还没有到达第500个数据,这样在不满足条件的情况下,可以继续向下一个数据搜索;另一个是如果已经到达最后一个数据即第500个数据,仍然没有满足条件,此时需要去路径上一级字母标记(记录字母的下标)的下个数据开始寻找;三是在满足条件的情况下,此时只需保存记录,同时向路径的下一级字母展开搜索即可。

第二部分搜索是到达最后一个字母,需遍历所有的数据。

如果满足条件不仅需要保存记录,还需要更新Q值作为新的判断条件;如果不满足条件,返回上一级字母标记的下一个数据开始继续搜索。

搜索完成后,根据记录可以得到各个字母对应的下标,即得到最优路径。

3.2算法流程图

递归

此流程为寻找一个服务流程的最优解。

多个流程时,只需循环多次即可

3.3核心数据结构

一维数组g[],h[],二维数组p[][],r[][],c[][],index[][]

3.4时间复杂度分析

假设一个服务流程有n个节点,每个节点对应有m个不同的候选服务。

首先程序开始有将数据排序,用到的是选择排序,时间复杂度为:

o(m*m*n)

算法用到的是剪枝法,最坏时间复杂度应该为o(m^n),考虑到实际约束条件和排好序的结果,程序不会每个点都运行到,所以时间会远小于上述值。

4实验结果

4.1流程的图示化展示

第一组

(A-355,B-91),(A-355,C-308),(C-308,D-124),(B-91,G-162),(D-124,G-162),

第二组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(B-91,G-390),(D-405,G-390),(E-420,H-432),(G-390,K-89),(H-432,K-89)

第三组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(C-308,F-420),(B-91,G-390),(D-405,G-390),(E-420,H-454),(F-420,I-396),(F-420,J-79),(G-390,K-89),(H-454,K-89),(K-89,L-231),(I-396,L-231),(J-79,L-231)

第四组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(C-308,F-420),(B-91,G-390),(D-405,G-390),(E-420,H-454),(F-420,I-396),(F-420,J-311),(G-390,K-89),(H-454,K-89),(K-89,L-231),(I-396,L-231),(J-311,L-231),(G-390,M-444),(I-396,M-444),(M-444,N-256),(L-231,N-256),

4.2需求

(0.9,20)

(0.8,40)

(0.6,70)

(0.4,80)

4.3最终的服务选择结果流程4

第一组

(A-355,B-91),(A-355,C-308),(C-308,D-124),(B-91,G-162),(D-124,G-162),

第二组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(B-91,G-390),(D-405,G-390),(E-420,H-432),(G-390,K-89),(H-432,K-89)

第三组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(C-308,F-420),(B-91,G-390),(D-405,G-390),(E-420,H-454),(F-420,I-396),(F-420,J-79),(G-390,K-89),(H-454,K-89),(K-89,L-231),(I-396,L-231),(J-79,L-231)

第四组

(A-355,B-91),(A-355,C-308),(C-308,D-405),(C-308,E-420),(C-308,F-420),(B-91,G-390),(D-405,G-390),(E-420,H-454),(F-420,I-396),(F-420,J-311),(G-390,K-89),(H-454,K-89),(K-89,L-231),(I-396,L-231),(J-311,L-231),(G-390,M-444),(I-396,M-444),(M-444,N-256),(L-231,N-256),

4.4最终结果的全局QoS属性

第一组Reliability=0.9410939999999992,Cost=8.409999999999727,Q=0.8569940000000019

第二组

Reliability=0.9316830599999871,Cost=12.39999999999211,Q=0.8076830600000661

第三组

Reliability=0.8949710300124106,Cost=20.629999996449083,Q=0.6886710300479197

第四组

Reliability=0.8770716093348236,Cost=23.30999998085399,Q=0.6439716095262837

4.5算法执行时间

运行时间:

16803ms

5编程语言与环境

Java语言

Myeclipse2014

6结对编程

6.1分组依据

为何你们两位组成了结对编程的小组?

从性格、能力、编程技能等方面简要介绍。

陈焱锋的优点:

(1)特别的认真;

(2)幽默,跟他一起工作挺好玩的

缺点:

交流少

我的优点:

(1)乐观;

(2)交流能力还行

我的缺点:

算法数据结构薄弱

分组依据:

我俩之间可以形成互补,共同完成任务

6.2角色切换与任务分工

6.3工作照片

6.4工作日志

由领航员负责记录,记录结对编程期间的遇到的问题、两人如何通过交流合作解决每个问题的。

可增加表格的行。

时间

问题描述

最终解决方法

两人如何通过交流找到解决方法

9.19

reQ文件以字符串读入后,难以将数字取出存到double型数组里(例如:

0.9包含三个字符)

利用Str.replace()

Float.valueOf()

两个函数对数据进行处理,最后提取出期望的数组

一人查阅书籍,一人搜网络上的解决方法,综合得到目前方案

9.20

写完算法代码之后运行时一直跑不出结果,而调试过程中发现程序能跑,只不过数据太大,需要时间太多

将文件中读进来的数据先进行排序,这样在循环和判断里面可以剔除大量不合格数据,大大提高了效率

开始时候两人交流尝试使用更多的限制条件来约束,但是收效不高。

最后考虑可以排好序再进行搜索可以大大提高效率

6.5对结对编程的体会

(1)首先应该是结对编程的高效率了,结对编程的时候,两个人可以分开做不同的unit,也可以同时做相同的unit。

在项目的一些简单的unit,一个人能够很简单的unit就可以分给不同的人去做;对于核心的unit,比如说此次项目电梯调度的算法部分,这是一个核心的部分,需要我们共同讨论,经过讨论后再去实现,或者两个人分别写出自己的想法,用代码实现,这时候,综合两个人效率高的那个人的算法。

另外,在结对编程时候,有一定相互监督作用,比起一个写程序,更不会想去玩一些其它的东西。

(2)想法源于两个人的激烈讨论,很多时候,我们在讨论中,常常忽然就会有一个灵感突然来袭,或者是会有一些之前不懂得地方,可能一下就懂了。

(3)结对编程的时候乐子多,我们合作的很开心,这样能提高我们的激情,同时也就提高了效率,工作起来很带劲

(4)在调试的时候,不再是一个人调试时那样无奈了,遇到了bug时,两个人一起,上面那张相片就是我们两个人在调试时候留下的,这时候,有两个人的经验,应付这些bug就能更得心应手一些了。

后期维护起来也更加方便。

7计划与实际进度

任务编号

计划时间长度(分钟)

实际耗费时间(分钟)

提前或延期的原因分析

1

180

360

读取数据处理较多

2

360

720

调试过程中出现许多bug,重构

3

180

240

写进文件时出现问题

8小结

结对编程这个概念我还是第一次听说。

最开始接触pairprogramming的时候,我有一个很大的疑问”这样做不是浪费了一个人的劳动力吗?

但是经过了这次结对编程的经历,我原来的想法实在是“toosimple,naive”存在就有其道理,结对编程必然有其可取之处。

我在与陈焱锋合作的过程中,深刻体会到了结对编程的优势,它把两个人的力量合在一起,在提高开发速度的同时,也保证了代码质量,同时两个人也都能从对方身上学到很多东西。

当自己一个人写程序的时候,难免会犯一些很愚蠢的小错误,而这些小错误反倒需要大量的时间来debug,效率非常的低。

然而,当两个人坐在一起的时候,那些非常可笑的错误出现的几率就很小了,省去了很多debug的时间。

而且,经过两个人的讨论得到的方案肯定跟靠谱。

同时,两个人在一起的时候,一个人写累了可以换一换角色,效果也不错。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1