结对项目

结对编程人员:徐丞(13061203)赖彦谕(13061212)

照片:

各自优缺点:

徐丞:

  优点:编程能力还可以,对C++掌握比较好;细致认真,查到好多bug;逻辑严密

缺点:面向过程的编程思想比较严重,函数体一般比较长,而且有大量的if-else逻辑判断

赖彦谕:

  优点:服从安排合作 愿意提出想法 敢于接受任务

  缺点:拖延症晚期  手癌晚期 代码能力并不是很强大

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

优点: (1)两人合作一起编程能提高更好的设计质量和代码质量。遇到问题可以两个人一起进行讨论和思考,解决问题的能力得到了增强。

(2)提高了代码复审的效率和质量。结对编程中另一个人一直在进行代码复审,一段代码会被检查多次,而且由于两个人是一起编程,对代码的理解程度都是一样深入的,这为代码复审提高了质量。

(3)有助于集中个人注意力,并且尽可能编写出更好的代码。因为在结对编程中,你的所作所为都被另一个人所看到,这更像是一种在别人面前的表演,为了不使自己在同伴面前丢脸,自己一定会使尽全力。

(4)编程过程中两人是相互学习,相互帮助的,有助于提高两人的个人水平。

缺点:重点是需要前期的磨合,如果两人相处的不够融洽,关系紧张,相互敷衍,这不仅会使效率变得低下,也不会产生高质量的代码。

2.说明怎样利用好这些设计:

Information hiding:信息隐藏原则保证所封装的数据的安全性,即外部不能直接对内部的数据进行修改。而且要提供供外部访问的接口,外部可以直接调用该接口而不需要知道内部的细节。这一设计原则在面向对象的设计中尤为重要,类与类之间相互调用时,要保证外部不能直接修改内部的变量(所有的数据成员应该是private),从而保证了类变量的安全性。而且可以设计接口类实现类与类之间的访问,这样保证了类各自属性的安全性且有利于扩展且方便调用。

interface design:接口的设计是为了统一某种标准,比如说在编写程序时,有一组类,他们都有类似的行为,我们可以对这种行为定义一个接口,这些类去实现这个接口就可以了,当我们在实际使用时就不必再考虑具体的实现,从而减少了编程复杂度。

Loose coupling:松耦合的原则要求供应者和用户之间任意一方发生了问题都不能影响到另一方。在编写代码时,要注意降低模块(类)之间的依赖性,当一个模块(类)作出修改时,与之相关的模块(类)不必做过多修改且功能能够正常运行。通过提供API来供外部调用,类与类之间建立接口类来实现相互的调用,从而降低类与类之间的依赖性。

在我们的程序中,设计了3个类(操作数类,公式类,计算类),由计算类提供三个接口(calcs,generate,check)供外部调用,这样可以将内部的实现细节隐藏起来,外部调用时也不需要清楚内部的具体实现情况,只需要调用对应的API接口即可。并且外部想修改内部的类属性时,不能够直接对其赋值,需要调用setting接口实现间接的赋值。

3.Design by Contract&&Code Contract

Design by Contract:契约式编程由前置条件,后置条件,不变式组成,它明确的规定了在调用某个操作前后应当属于何种状态,所谓契约就是在代码实现之前,将契约建立好,并且保证实现的代码一定是满足三个条件的。如果满足契约则认为程序满足正确性,若否则程序是不正确的。

  优点:(1)提高了可靠性,调用某种操作所处的前后状态以及不变式都是已知的,你可以清楚的知道你的程序再调用该方法后会发生哪些变化,处于何种状态。

     (2)降低了代码间的依赖性,当A调用B时,此时若B的代码实现发生了一些改变,但只要B的契约没有改变,A依然可以调用B,并且保证程序依旧是正确的。

     (3)提高了代码的可复用性,在考虑是否可以使用某一函数时,只需考察其契约是否满足需求,而不需要考虑其内部的具体实现。

     (4)提高了代码间的可替换性,对于不同的函数实现,只要保证其契约含义相同,则在调用时可以相互替换。

     (5)便于理解程序的结构和功能。

  缺点:如果有一方没有遵守规约而没有被发现,再调用该方法时会带来很严重的问题,而且想要排除这一问题是需要很大工作量的。

我们这次编程总共设计了三个类Formula,Operand,StuCalculator,所有的API接口在StuCalculator类中提供,三个接口分别为calc,Generate,check。这样的设计方法,使外部再调用是不用关心内部的实现就可以实现其功能,更好的封装了内部

的变量和实现细节,对于接口的定义采用契约是编程的思想,对输入参数格式提出了若干要求,同时给出了接口调用完后所实现的操作。

4.单元测试

本程序有三个类Formula,Operand,StuCalculator。针对每一个类写一个测试文件进行测试。总共有90个单元测试用例,总共发现10个BUG。总的代码覆盖率为95.23%,之所以没有达到100%主要是因为,生成表达式时采用的是随机算法,根据不同的随机数会走不同的分支,这在测试中是无法控制的,不能完全覆盖。下附上截图:

代码覆盖率:

5.UML图

6.算法说明:

1.生成表达式算法的整体思路:首先对操作数进行随机生成,对运算符进行随机生成,最后将生成的操作数和运算符拼到一起形成一个前缀表达式,再转换为中缀表达式输出。之所以先生成前缀表达式,是因为要检测生成的表达式是否满足需求,需要进行一步步计算,              这里因为我们直接生成了前缀表达式,所以可以直接进行计算。

              对于去重的检测,我们放弃了检测这一思路,我们的想法是生成的表达式绝不会出现交换重复的情况。为实现这一点,当发现生成的表达式中有‘+’或‘*’时,我们会对操作数做一次排序,就是说是操作数符合有序性,因为交换重复会打破              有序性,这样我们保证操作数一定是有序的那么就不会有重复。(这里有一点例外,就是生成的操作数有相同的,所以我们再加一条限制,就是操作数排完序后不允许出现连续三个数相等的情况),操作数有序的做法不能避免产生一模一              样的表达式,所以采用哈希值来记录生成的表达式,若出现重复的哈希值则说明生成了一模一样的表达式,则重新生成。

2.对于不同参数组合的支持:这里我们确立了一条规定:允许有负数,就一定允许有括号;不允许有括号,就一定不允许有负数。因为负数输出时都是加括号输出的,所以我们的逻辑导致必须有这条规定。

由于我们是随机产生操作数,对于不同的参数就在随机生成的时候根据不同的条件随机生成即可。对于不允许有括号的情况,只要规定随机产生的运算符有序就不需要括号了。

3.对中缀表达式的计算算法:这个没什么创新点,就是两个栈,通过弹栈压栈实现运算即可。

时间: 2024-10-13 10:53:44

结对项目的相关文章

结对项目更新

本周确实对结对项目没投入多少时间,新的需求没进行跟进,应该要被老板扣钱的吧.只针对之前的程序进行了争论和修改,之前的程序在处理除法的时候其实是有缺陷的,我们二人就此展开过讨论,在并没有达成共识的情况下,用各自的方法进行了编程试验,也没有解决问题,最后询问了同学,采用了新的办法,才解决了遗留的问题.

结对项目 - 词频统计Ⅱ

目的与要求 代码复审练习 结对练习 编写单元测试 基于上一个结对项目的结果,读取小文本文件A_Tale_of_Two_Cities.txt 或者 大文本文件Gone_with_the_wind.txt,统计某一指定单词在该文本文件中出现的频率. 命令行格式: 提示符> Myapp.exe -f filename.txt -w word (PS:C++ 程序,Java 程序输出方式类似) 解释: 选项 -f 表示打开某一文件 选项 -w 表示统计其后单词在打开的文件中的频率 详细内容 开发语言:J

结对项目之小游戏编程(斗地主)

一.题目简介    本次的项目是编写一个斗地主的小游戏,实现语言:java:主要完成了GUI设计.计时线程.算法.本次项目的主要目的是对算法的学习.算法分析在心得里面. 技术难点:1.图片的移动    2.计时线程的设定   3.对牌的分割,必须考虑到优先拆分方案,将权值低的拆分方案舍去. 4.在删除的时候遇到问题了,删除不了. 二.结对分工及过程 本次结对项目的成员有两个,张国伟:负责对GUI界面的设计,完成功能:洗牌功能,发牌功能,打牌功能的图片的位移处理,基本打牌的桌面等等. 我主要负责对

结对项目—地铁出行路线规划

结对项目—地铁出行路线规划 我的搭档:陈鸿超 14061216 https://github.com/ChengFR/PairProgramming_SubwayRoute- 会在十一期间发布新版本 结对编程体会: 结对编程的优点: 站在软件开发的角度,两个人共同面对同一台电脑进行开发,无论是效率还是软件质量都要超过一个人进行开发的情况. 对于还处于学习阶段的年轻软件开发者来说,结对编程是一个很好的互相学习的机会 结对编程时动力.责任感更强 结对编程的缺点: 对于我们来说,寻找两个人共同的时间进

软工_结对项目总结博客

关于结对编程 第一次进行真正的结对编程,而且我们组又是最奇葩的三人组合(14061183韩青长)(14061195陈彦吉),在经历了三天的合作以后,感觉收获还是蛮多的,下面是我对于结对编程的一些个人体验. 优点 在结对编程的过程中,两个人共同面对同一份代码,编码时旁边时刻有人提示监督.这样写出的代码,首先考虑的特殊情况会更多,能避免很多一个人编程时因为考虑不周而在某个不起眼的地方产生的Bug,代码质量更高,少了很多调试时间. 同时,由于两个人交替工作,一方面可以缓解疲劳,同时又因为身旁有人共同工

软件工程 结对项目总结

在结对项目中我和王以正同学一组.我们决定以王以正同学个人项目为基础开发.原因主要有几点:我使用的C++在开发效率和难易度上没有王以正用的java好:java语言的跨平台特性可以更好地支持网页端.安卓端:还有就是王以正同学个人项目的功能比我的更为完善.综合以上几点我们选用王以正同学的作为基础开发. 在这次结对项目中我学到了结对编程的方法.感觉这个方法十分实用,效率很高.因为个人开发的话遇到问题很容易陷入困境.止步不前继而工作效率十分低下.结对编程除了两个人分工合作提高了效率之外遇到问题也可以一起解

结对项目2

题目:构造程序,分别是: •不能触发Fault •触发Fault,但是不能触发Error. •触发Error,但是不能产生Failure. 结对对象:王翰林   博客地址:http://www.cnblogs.com/whl1127/p/5405639.html 双方贡献比例:1:1 编程照片: 源代码: import java.util.Scanner; public class MainTest { public static void main(String[] args) { doubl

结对项目总结

时为几周的结对项目结束了,经历了整个结对项目开发周期,我对结对开发软件有了一些新的认识.不同于个人的开发,结对项目强调的是两个人的合作关系.之前一个人能够搞定的问题,这下不得不两个人来做,开始时我是拒绝的.但是逐渐我发现,在两个人讨论的过程中,能够发现一些隐含的问题.比如,一个人设计的时候,有些事情没想明白就先做别的了,之后就忘掉了,但是在结对项目里面,这些问题想不搞清楚也不行,经常是随便提一句,然后就讨论了起来,然后就xx了:).咳 总的来看,整个结对项目可以分为几个大的阶段:一是讨论阶段,如

结对项目(附加题)开发总结

结对项目(附加题)开发总结 这次附加题的任务就是把两个小组写的独立的UI和CORE模块打乱重组,拼接成一个新的APP. 我们小组选择了大神刘乾所在小组和我们合作交换.一拿到乾神的核心代码,我不得不说,乾神就是乾神,代码一出,直接把我镇住了,各种参数看不懂咋办?咋写UI? 还好我们的乾神同志给我们提供了帮助文档,介绍了各个参数的作用,现摘录如下: 对于计算表达式的值(CALC模式): AnswerGet(string s)其中s是给定的算式,以等号结尾. 调用生成器时,使用: public Gen

结对项目总结博客

结对编程 这次结对项目由我和陈谋共同完成.下面是一张我们在一起讨论时委托他人帮忙拍摄的图片: 结对编程的优点: 1.相互之间能够进行代码复审,在代码复审中的提问与回应能帮助两人之间互相了解,更好的发现自己程序的瑕疵. 2.在开发层次,结对编程能提供更好的设计质量和代码质量,两人合作解决问题的能力更强. 3.对开发人员自身来说,结对工作能带来更多的信心,高质量的产出能带来更高的满足感. 4.结对能更有效地交流,相互学习和传递经验,分享知识. 结对编程的缺点: 1.对于有不同习惯的编程人员,在一起工