1、Lab 1结对编程实验报告XXX工业大学计算机科学与技术学院软件工程Lab 1:结对编程文档全部完成之后,请更新上述区域1实验要求练习结对编程(pair programming),体验敏捷开发中的两人合作;两人一组,自由组合;使用一台计算机,共同编码,完成实验要求;在工作期间,两人的角色至少切换4次;使用JAVA+Eclipse编程。2待求解问题描述与数学模型输入1:一个服务流程,由一组活动及其之间的关系构成,使用DAG输入2:针对每个服务活动的候选服务集,各服务有功能和QoS信息;输入3:客户针对服务流程的QoS需求;输出:满足QoS需求的服务选择方案(使用DAG表示) ;计算方式:Q =
2、TR TP/100,其中TR为最终方案的总体可靠性,TP为最终方案的总价格,Q值越大越好。3算法与数据结构设计3.1设计思路主要思想为深度优先搜索,用到的数据是根据数据表第四个值(即价格)有小到大排好序的数据,以排好序的各个字母最小的价格值对应的Q值作为初始判断条件值。寻找一条完整路径可以划分为两个部分,一部分是还没有搜索到最后一个字母,另一个是到了最后一个字母搜索。第一部分搜索存在三种情况,一是搜索字母对应的500个数据时还没有到达第500个数据,这样在不满足条件的情况下,可以继续向下一个数据搜索;另一个是如果已经到达最后一个数据即第500个数据,仍然没有满足条件,此时需要去路径上一级字母标
3、记(记录字母的下标)的下个数据开始寻找;三是在满足条件的情况下,此时只需保存记录,同时向路径的下一级字母展开搜索即可。第二部分搜索是到达最后一个字母,需遍历所有的数据。如果满足条件不仅需要保存记录,还需要更新Q值作为新的判断条件;如果不满足条件,返回上一级字母标记的下一个数据开始继续搜索。搜索完成后,根据记录可以得到各个字母对应的下标,即得到最优路径。3.2算法流程图 递归此流程为寻找一个服务流程的最优解。多个流程时,只需循环多次即可3.3核心数据结构一维数组g,h,二维数组p,r,c,index3.4时间复杂度分析假设一个服务流程有n个节点,每个节点对应有m个不同的候选服务。首先程序开始有将
4、数据排序,用到的是选择排序,时间复杂度为:o(m*m*n)算法用到的是剪枝法,最坏时间复杂度应该为o(mn),考虑到实际约束条件和排好序的结果,程序不会每个点都运行到,所以时间会远小于上述值。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-43
5、2,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
6、-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),
7、第二组(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-2
8、31),(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最终结
9、果的全局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
10、 ,Q=0.64397160952628374.5算法执行时间运行时间 :16803ms5编程语言与环境Java语言Myeclipse20146结对编程6.1分组依据为何你们两位组成了结对编程的小组?从性格、能力、编程技能等方面简要介绍。陈焱锋的优点:(1)特别的认真;(2)幽默,跟他一起工作挺好玩的 缺点:交流少我的优点:(1)乐观;(2)交流能力还行我的缺点:算法数据结构薄弱分组依据:我俩之间可以形成互补,共同完成任务6.2角色切换与任务分工6.3工作照片6.4工作日志由领航员负责记录,记录结对编程期间的遇到的问题、两人如何通过交流合作解决每个问题的。可增加表格的行。时间问题描述最终解决方
11、法两人如何通过交流找到解决方法9.19reQ文件以字符串读入后,难以将数字取出存到double型数组里(例如:0.9包含三个字符)利用Str.replace()Float.valueOf()两个函数对数据进行处理,最后提取出期望的数组一人查阅书籍,一人搜网络上的解决方法,综合得到目前方案9.20写完算法代码之后运行时一直跑不出结果,而调试过程中发现程序能跑,只不过数据太大,需要时间太多将文件中读进来的数据先进行排序,这样在循环和判断里面可以剔除大量不合格数据,大大提高了效率开始时候两人交流尝试使用更多的限制条件来约束,但是收效不高。最后考虑可以排好序再进行搜索可以大大提高效率6.5对结对编程的
12、体会(1)首先应该是结对编程的高效率了,结对编程的时候,两个人可以分开做不同的unit,也可以同时做相同的unit。在项目的一些简单的 unit,一个人能够很简单的unit就可以分给不同的人去做;对于核心的unit,比如说此次项目电梯调度的算法部分,这是一个核心的部分,需要我们共 同讨论,经过讨论后再去实现,或者两个人分别写出自己的想法,用代码实现,这时候,综合两个人效率高的那个人的算法。另外,在结对编程时候,有一定相互监 督作用,比起一个写程序,更不会想去玩一些其它的东西。(2)想法源于两个人的激烈讨论,很多时候,我们在讨论中,常常忽然就会有一个灵感突然来袭,或者是会有一些之前不懂得地方,可
13、能一下就懂了。(3)结对编程的时候乐子多,我们合作的很开心,这样能提高我们的激情,同时也就提高了效率,工作起来很带劲(4)在调试的时候,不再是一个人调试时那样无奈了,遇到了bug时,两个人一起,上面那张相片就是我们两个人在调试时候留下的,这时候,有两个人的经验,应付这些bug就能更得心应手一些了。后期维护起来也更加方便。7计划与实际进度任务编号计划时间长度(分钟)实际耗费时间(分钟)提前或延期的原因分析1180360读取数据处理较多2360720调试过程中出现许多bug,重构3180240写进文件时出现问题8小结结对编程这个概念我还是第一次听说。最开始接触pair programming的时候
14、,我有一个很大的疑问”这样做不是浪费了一个人的劳动力吗?但是经过了这次结对编程的经历,我原来的想法实在是“too simple, naive”存在就有其道理,结对编程必然有其可取之处。我在与陈焱锋合作的过程中,深刻体会到了结对编程的优势,它把两个人的力量合在一起,在提高开发速度的同时,也保证了代码质量,同时两个人也都能从对方身上学到很多东西。当自己一个人写程序的时候,难免会犯一些很愚蠢的小错误,而这些小错误反倒需要大量的时间来debug,效率非常的低。然而,当两个人坐在一起的时候,那些非常可笑的错误出现的几率就很小了,省去了很多debug的时间。而且,经过两个人的讨论得到的方案肯定跟靠谱。同时,两个人在一起的时候,一个人写累了可以换一换角色,效果也不错。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1