结对作业

一、Gitlab项目地址

项目 内容
这个作业属于哪个课程 2021软件工程(罗杰 任建)
项目地址 gitlab
结对同学后四位学号 3665
结对同学后四位学号 5013

二、结对项目实践反思

(1)针对出现的问题,分析问题特征、产生根源和对质量影响程度。

问题一:类设计

​ 这两次作业大部分代码和架构设计都是由C同学完成,也暴露出了C同学在复杂的项目上的架构设计经验的不足,架构的可迭代性较差。在第一次作业中,由于功能非常简单,C同学看完指导书稍加思考便开始写,当时考虑过将文件目录设计一个共同的父类,以应付一些查询方法,但是后来又发现这两种写法在第一次作业中的复杂度实际上是差不多的,所以最后就没有设计这一一个父类,但是到了第二次作业中,发现,如果有一个共同的父类,里面封装了一些共同的属性和方法,会给下一步的迭代开发带来非常好的效果。

问题二:方法抽象与接口设计

​ C同学在进行oo课程的学习的时候,不是特别理解关于每个类的属性都要用private进行修饰的作用,当时想虽然是private但是几乎都能设计对应的get和set方法,好像意义不大,这两次作业就给了他深刻的教训。第一次作业C同学有点放飞自我,几乎全程public,也没有设置任何get和set方法,几乎都是直接访问对象的属性,这在较为简单的第一次作业中没有任何问题,但是一旦开始向第二次作业迭代,第二次作业加入了连接等对象,这就导致之前的一些类的动作不是简单的直接访问对象属性就可以完成的,全都要抽象成方法,然后对方法进行不同的修改和覆盖,也因为有地方忘记修改而造成了bug。

问题三:对单元测试重视程度不够

​ 第一次单元测试中,基本就是面向覆盖率进行测试程序的编写,这就导致了没有测出来C同学因为疏忽漏看的关于路径长度的限制,导致强测的一个数据点出现了错误。第二次强测中,没有测出来一个异常抛出顺序的bug,也错了一个数据点。

(2)总结需求分析实践体会,并分析需求分析不足而带来的BUG;

​ 第二次作业中关于需求分析的不足而产生了很多问题。包括对原有方法的修改,异常抛出的顺序等等,最后又对着全部的issue一个个的查找有没有问题。

(3)总结结对中的架构设计实践体会;

这部分的问题基本在(1)中的问题二里面提到了,关于改进设计来提高程序的性能,第一次架构在设计之初就考虑过这个问题,基本所有的修改都会动态更新,使得查询复杂度在O(1)。在第二次架构中,由于硬链接的出现,size就无法动态更新了,于是就在查询的时候进行计算,其余绝对路径等在修改的时候都会进行update。关于文件和目录的删除方面,由于在编写的时候指导书理解失误,以为在创建指向硬链接的软连接的时候需要判断硬链接指向的源文件是否被删除,所以当时增加了关于文件删除的搜索功能,对检索的已经删除的文件都打上了标记。

三、CI体验感想

通过这次结对编程,对CI工具有了更加深刻的理解。CI作为工程项目开发的有力工具,能够方便团队部署于测试各个成员提交的代码,可以方便的完成一些提交代码后所要完成的机械性的工作,例如单元测试,回归测试。

四、结对编程感想

(1)描述你们结对的方法、遇到的困难与收获。

  • 在进行第一次结对项目时,其中C同学因为实力太强提前写完了项目代码并通过了弱侧,然后才与G同学进行结对,因此整个结对过程实际上是不符合结对开发的,G同学完成的则是对代码的单元测试部分。因此在进行第二次结对项目时,我们采用了更符合结对开发的结对方式进行开发,由C同学开发完成文件部分代码以及单元测试,G同学完成用户组部分代码及单元测试,最后由C同学进行代码的整合以及整个项目的测试,debug,两次结对均主要以线上的形式进行,微信进行沟通,遇到有问题的地方会截图代码询问对方。
  • 结对编程的优点就是能够加强团队的协作能力,表达能力,以及对伙伴代码的阅读能力,通过交流,可以更好了解同伴对项目的思考和想法,在结对过程中,C同学作为码力更加突出的一员,在第二次项目整合过程中占了主导地位,并且还发现了G同学所写用户部分代码的一些问题,并通过微信进行了交流,这就是单人开发没有的优点,比如像OO那样写代码,可能一个BUG会找很久,但是另一个同学很容易就能看出来。结对项目的缺点可能就是分工上面会有差入,不能保证每一个成员所完成的工作量是一样的,这次C同学就占了主导地位。

(2)评价你的队友,汉堡点评法评价结对伙伴。

  • G同学对C同学:

    C同学同学的思维能力真的很强,代码能力也是一流,不愧是ACM选手,和大佬组队感觉对自己帮助很大,大佬对问题的思考比我要深入得多,考虑得问题也比我更全面,更是占了这次编程的主导地位。

    不足的可能就是C同学确实也没什么时间,其中有三天时间几乎是不写代码的。

    但是C同学由于太强也只需要花一两晚就能完成他的任务,而我花的时间是他的两三倍左右,完成的工作量还只有他的一半,除了感叹大佬的码力之外,对自己能力也感到不足。

  • C同学对G同学:

    G同学对于交给他的任务基本可以在商量好的时间内基本保证质量完成。

    不足之处可能在于G同学需要增强自信心,用于承担任务,再热情积极一点。

    G同学在博客感受部分的编写还是非常认真的,正好与我互补,我并不是很擅长写感受类的文字。

(3)描述在本次结对编程的过程中,你们使用了哪些软件工具。

本次结对编程过程中,我们主要使用了IDEA IntelliJ、maven、typora这三类工具

IDEA IntelliJ这个工具作为这次项目开发的主要工具,用来进行主体代码的编写,以及单元测试的编写,里面有很多插件也是很方便,作为此次项目开发的软件很好用。maven主要用于对项目的工具管理,导入作业包。typora则是用来进行博客总结,完成博客部分,typora作为很好的文件编辑器,受到了我们的青睐,比起博客园编写更加方便。

(4)吐槽

​ 其实我觉得这几次结对作业,如果不是第二次作业的指导书细节过于繁杂的话,实际上是非常好的一次作业,是一次非常好的OO作业与软工作业,我觉得这个作业是不是改进改进可以代替OO课程第一单元的求导作业?之前发现不少19级的同学在吐槽求导的难度,我觉得这个作业难度实际上不是很大,但是其在架构设计和迭代方面的训练效果很好,它给了我OO四个单元的作业都没有给我过的感受。

原文地址:https://www.cnblogs.com/member-re/p/14638871.html