软件工程结对作业——第二阶段

软件工程结对作业——第二阶段

项目内容
这个作业属于哪个课程 2021春季软件工程
这个作业对应的GitLab项目地址 软件工程结对作业
学号后四位 3439和3358

设计思路

第二阶段作业在第一次作业的基础上扩展了文件系统,并新增加了用户系统。

文件系统

结构

文件系统在第一次的基础上新增加了两个类型的文件:软链接文件和硬链接文件。经分析可知,二者都是一种很特殊的文件,所以在第一次作业的基础上新创建了SoftLink 类和 HardLink 类,并继承于 File 类,三者类关系如图一所示:

图一

其中由于软链接是一种通过链接路径来进行指向的文件,所以软链接中新增加pointPath属性来保存所链接文件的路径;硬链接是一种指向某个具体文件的链接文件,所以在硬链接中新增加file属性来记录其所指向的文件对象。

在实现过程中发现,第一次作业中用来查找一个路径对应的DirFile对象在进行链接文件的重定向时会很难处理。我们分析发现是由于第一次作业实现中,并未将Dir类和File类继承同一父类或实现同一个接口,导致程序在对链接文件重定向时需要进行很复杂的情况分析和讨论,于是让二者均实现Entry接口,这样在进行链接文件重定向时可以使用多态来进行分析讨论,极大的简化了重定向操作,同时也让程序底层根据路径寻找对象的方法更灵活与通用。最终文件系统结构如下图:

图二

我们设计了 Dir 类和 File 类来分别实现对于一个目录和文件的抽象,并且两个类都继承了Entry接口,同时对于软硬连接,我们分别创建了SoftLinkHardLink类,两个类都继承File类,设计了MyFileSystem 类来实现指令对文件和目录的操作。UserSystem类实现对用户的管理。同时对于两个System创建一个manager类,用来 两个系统之间的沟通。

主要操作实现

文件系统中的操作主要分为两类:对目录的操作和的对文件的操作。

  • 对目录的操作。对目录的操作重点是如何根据一个目录路径来查找该路径所对应的Dir 对象,并在查找过程中对此路径的合法性进行判断。我们的实现是对路径提取出每一个目录的name,并从根目录或当前目录进行递归查找,找到之后进行对目标目录进行创建、修改或删除等操作,未找到时根据指令来判断是否抛出异常和是否进行创建目录。

  • 对于文件的操作。对文件的操作重点是如何根据一个路径查找到该路径所对应的File 类对象,并在查找过程中对输入路径进行合法性判断。我们的实现是同目录的操作,首先提出路径中的每一个过程目录的name ,并从当前根目录或当前目录进行递归查找,当查找到最后一层目录之后,在其子文件中查找目标文件对象,找到之后,进行对文件的修改、删除等操作,未找到时根据指令来判断是否抛出异常和是否进行创建文件以及对文件写入内容。

Manager类中操作基本都是SetGet方法,用于两个类之间信息的获取,基本就是再一个Systemset 一个属性,然后在另一个里面get,通过这种方式,让两个类之间可以信息交流 ,Manager是采用单例模式实现的,这保证了两个System访问的是同一个manager

用户系统

用户系统是第二次作业中新增加的系统,主要涉及到用户和用户组的增、删、改、查操作。

由于涉及到用户和用户组两种用户类型,我们设计了两个类:UserUserGroup 分别表示用户和用户组。在MyUserSystem中对用户进行增、删、改、查操作是很简单的操作。

通信

这次作业中需要在文件系统和用户系统建立联系:文件系统需要知道当前用户,用户系统需要在切换路径时进行路径的保存和恢复。同时二者还需要在公用一个当前指令的序号,并对此序号进行更新和读取。

我们参考了issue中的单例模式来解决此问题。我们创建了一个Manger类来对进行通信,并在类中创建一个静态实例来保证文件系统和用户系统的交互的统一。

编程感受

3439

  • 这次作业合作时,我们尝试了在宿舍进行结对编程的感受。我的宿舍内部有比较大的显示屏幕、舒适的凳子并且宿舍的桌子要比教室更加舒服。合作效果也还不错,但能够在宿舍进行结对的时间并不多,需要考虑到舍友的生活作息等因素,下次作业可以尽量选择在宿舍进行结对,毕竟宿舍的设施配置比教室配置舒服很多。

  • 这次结对的效率比上次更高,在上次作业合作基础上,两人默契和习惯都已经相互熟悉,这次合作时,无论是讨论设计还是代码编写都有很大的进步和收获。但仍然有些不足需要进行磨合和调整。

3358

  • 对于结对编程有了更加深入的理解,在这一次的编程过程中,由于难度比上次大了很多,导致有时候在方法实现上两个人的理解相差比较大,在一次次的讨论中我们逐渐找到了最符合语义的解决方法,这个过程是很有意义的,相当于为以后的工作做了些准备。

  • 其次,也让我感受到了自己的一些不足,比如不够细致,调试的时候不够有耐心等等,希望下次能够做出改进。

现场照片

由于在宿舍结对时时间比较短,并未进行拍照(图四,当时找到bug,有点开心)。下面是在教室结对现场照片。

图三

图四

PSP表格

PSP2.1Personal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning 计划 10 10
· Estimate · 估计这个任务需要多少时间 10 10
Development 开发 660 870
· Analysis · 需求分析 (包括学习新技术) 30 20
· Design Spec · 生成设计文档 30 30
· Design Review · 设计复审 (和同事审核设计文档) 20 30
· Coding Standard · 代码规范 (为目前的开发制定合适的规范) 10 10
· Design · 具体设计 60 60
· Coding · 具体编码 360 480
· Code Review · 代码复审 30 60
· Test · 测试(自我测试,修改代码,提交修改) 120 180
Reporting 报告 100 100
· Test Report · 测试报告 60 60
· Size Measurement · 计算工作量 10 10
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 30 20
  合计 770 980
posted @ 2021-04-02 21:29  Donke55  阅读(89)  评论(2编辑  收藏  举报