结对成员:金知奂
~结对编程的优点:
1.编程时一个负责写代码一个负责随时复审,可以有效提高初始设计和代码的质量。
2.两个人轮换驾驶员和领航员的角色,可以工作休息两不误,程序质量不容易受一个人的疲劳的影响,可以更长时间地有效工作。
3.两个人共同解决一个难题,让两个人都更加有自信,同时也不容易开小差。
4.结对编程的同时,两个人也有效交流了知识和技巧,一举两得。
~结对编程的缺点:
1.两个人共同思考有时候会没有一个人独自思考的深入,这使得处于探索阶段的项目不适合结对编程。
2.如果测试程序运行时间很长,总是两个人等有些浪费时间。
3.如果团队成员要在多个项目中工作,不能保证长时间集中在一个项目上,则另一个成员要经常等待,影响效率。
金知奂:学习态度良好,基础有点儿薄弱
Information hiding 指的是通过对底层程序具体实现方法的隐藏,让客户不知道具体实现方法的一种做法,这种做法通常会给客户提供interface来让客户和底层程序交互。而loose coupling指的是让程序的各个功能之间的联系尽可能的少,让程序的各个部分尽可能的模块化。这三种做法的最终目的其实是一样的,即在客户端和底层程序之间建立起抽象的接口,向客户隐藏那些实现细节,并通过具体实现代码的模块化,减少各个功能的相互依赖,方便以后的更新和优化。
在这次的程序中,我通过设计一个core接口来隐藏了core的具体实现细节,做到了information hiding。同时,我的generate, grade, calc, setting等方法互相依赖程度很少,基本上是独立的功能, 这满足了loose coupling的设计理念。
~优点:
1.规定每个功能运行前运行后的环境以及变量范围,使得其他功能不用费劲去测试每一个可能出现的错误。
2.规定方法的precondition, postcondition 和 invariant 可以辅助程序员在写程序的时候就进行自我内部的检测,有一些错误可以及时发现,而不用等到最后的测试阶段在集中解决。
3.有相应的工具帮助生成文档,使整个程序结构和功能更加清晰。
~缺点:
1.如果外部程序没有封装好内部的功能,容易被恶意程序利用漏洞。
2.如果程序的某一个功能发生变动,那么相应的给这个功能提供precondition的功能,依赖这个功能的postcondition的功能和依赖总体invariant的功能,都要发生变动,这使得更新和维护软件比较麻烦。
代码测试覆盖率是50% 在代码测试的时候遇到了一些问题 我是先测试Core的每个方法的实现。然后再具体测试calculator和generator 的主要的方法。
Calculator:用于计算。在Math Question后面的框框里写上算式,便可以计算。
Grader:点击Browse可以选文件路径。选完点击Grade。之后评测结果,将在当前文件夹输出在一个Grade.txt文件中。
Generator:可以选择有无分数,有无乘除法,有无负数,数字范围,问题的数目,操作符的数目。点击Generate Questions!
如果输入不符合规范的情况下,会弹出错误对话框。
先分别建立Calculator,Generator,Grader,这三个类分别担任计算,生成,评测的任务。然后再将这些类的功能整合在Core类里。
1、避免生成重复的算式
我是按照生成一个树的顺序来生成一个算式的。每生成完一个算式,便去之前生成算式树,进行同构的比较。
2、数字的统一
首先,我建立的一个Num类。在Num类的基础上建立了分数DecimalNum类和整数Integer类,这样可以更好的管理分数与整数。
3.计算中缀表达式
建立两个栈,一个是数字栈,一个是符号栈。按照下面的流程图即可。
4.最简分数
用辗转相除法,在每次计算完分数,算一下分子分母的最大公约数,让分子分母同时除以这个数。