文章目录

  • 一、摘要
  • 二、阶段一(第1周)
    • (一)实验内容介绍
    • (二)实验感想
    • (三)相关资料
  • 三、阶段二(第2-3周)
    • (一)实验内容介绍
    • (二)实验感想
    • (三)相关资料
  • 四、阶段三(第4-5周)
    • (一)实验内容介绍
    • (二)实验感想
  • 五、总结

GridWorld 软工中级实训总结报告

一、摘要

  为期5周的中级实训已经结束,整个实训大部分时间是围绕GridWorld来做的,GridWorld本身已经是一个可视化的二维网格,在上面我们做些简单的操作。围绕着GridWorld,这段时间我们完成了3阶段的工作:阶段1初步接触相应工具;阶段2完成对GridWorldCode内框架的熟悉和内容扩展;最后一部分则是基本上脱离GridWorld,用Java实现一些简单的算法(图像图层提取/BFS/DFS/A*等)

二、阶段一(第1周)

(一)实验内容介绍

  第一周是入门阶段,我们主要完成了3部分的工作:

  1. 学习Vi/Vim,Java,Ant和Junit的相关内容,在Ubuntu上熟悉了相关环境,然后完成了相应的HelloWorld程序的编写(Java)、自动编译运行(Ant)以及测试(Junit),并写了一份相应的自学报告。
  2. 学习SonarQube代码分析工具的使用,并用Java实现了简单的计算器小程序(可实现整数的四则运算),利用SonarQube加以分析代码质量
  3. 从Github上下载了GridWorld的代码框架,完成环境配置并编译运行BugRunner.java

(二)实验感想

  由于之前并没有选上Java课,所以一开始接触实训内容的时候是有些懵的,在第1阶段我也花了很久的时间在Java部分的学习上。也幸亏有这么一周的缓冲让我对Java内容有了基础的了解,不至于后面没什么基础就直接开始写比较多的代码。另外,我对这次实验用到的这些工具也有了基本的了解:

  • Vi编辑器是Unix/Linux操作系统下都有的一种标准编辑器,就像Windows下都会有标准的记事本,完全命令行操作,熟悉使用的话比较方便,但刚上手的话需要记住很多指令。
  • Ant是一种自动编译生成工具,可用于Java语言的开发,需要编写build.xml文件来执行,就类似C/C++语言开发中的make工具。
  • Junit是Java的一种单元测试框架工具,可以用于Java的开发,属于测试驱动的范畴,在编写的Test类中可以分成多个部分进行测试,以我们的阶段3的ImageReader项目为例,最后测试结果截图如下,测试直接提示每一部分的成功与失败。

  • SonarQube则是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量。 通过插件形式,可以支持众多计算机语言,Java是其中的一种,启动sonar服务器后,在项目配置文件所在目录下执行sonar-runner即可启动检测,并在http://localhost:9000网址上显示我们检测的结果,我们可以查看我们代码在风格等方面有没有什么问题,并加以改进。

(三)相关资料

  当然说实话第1周直接学习这么多工具也是很难的,在这过程中我也借鉴了很多网上大佬写的东西,摘选其中部分连接如下:

  • Linux vi/vim | 菜鸟教程
  • vi/vim编辑器入门_老王の博客-CSDN博客
  • Java学习教程,Java基础教程(从入门到精通)
  • Java语言是编译型语言还是解释型语言?(Java程序执行过程)_菜鸟的后花园-CSDN博客
  • J2ME J2SE J2EE_心有猛虎细嗅蔷薇-CSDN博客
  • Ant是什么?_JavaClub-CSDN博客
  • Ant 基础入门篇_fanxiaobin-CSDN博客
  • JUnit - 概述_w3cschool
  • Junit的基本使用_goasleep的博客-CSDN博客

三、阶段二(第2-3周)

(一)实验内容介绍

  阶段2分成4个部分的内容:

  1. Part2主要熟悉Bug的各项操作,并且需要我们对Bug的运动做出适当修改,让Bug走出不同的形状

    类名 运动轨迹形状
    CircleBug 正8边形
    SpiralBug 螺旋状
    ZBug Z字形
    DancingBug “跳舞”(有特定的规律,每个周期内每隔特定步数会旋转特定角度)
  2. Part3则先是研究GridWorld中出现的其他类(Location、Grid、Actor),并仿照Bug写一个新的Actor子类Jumper,给出了Jumper类的运动思路,但让我们完善整个Jumper类运动的逻辑规则,写出完整的设计和测试文档。

  3. Part4则是让我们扩展info.grid.actor包中出现的Critter类,Critter类想实现的是归纳动物行为的特征,在这个类中,它将行为的逻辑分成了5个部分,而我们做的扩展主要就是针对项目给出的要求override这些对应的方法,具体要求实现的Critter子类有:

    类名 父类 作用
    ModifiedChameleonCritter Critter 并在邻居没有Actor对象的时候让自身颜色变暗
    ChameleonKid ModifiedChameleonCritter 并且仅在前后方出现Actor对象的时候才会改变颜色
    RockHound Critter 并且会"吃掉"周围的Rock对象
    BlusterCritter Critter 并且会根据周围Critter对象的多或少变暗或变亮自身的颜色
    QuickCrab CrabCritter 并且会一次移动两格
    KingCrab CrabCritter 并且会不断"推走"周围的Actor对象
  4. Part5则是对Grid网格做出了扩展,对于有限大小的网格要求我们用其他的方法(HashMap/TreeMap/自制链表)来实现稀疏矩阵存储;另外还让我们做出无限大小的网格。

(二)实验感想

  阶段2分成了4个部分,让我们一步步熟悉GridWorld框架里已有的内容,并对其进行扩展。现在做完回过头来看代码其实并不困难,只要掌握了项目提出的要求,确定其行为逻辑我们就已经打好代码的框架了,再稍微改动下就可以提交代码。有点麻烦的地方可能在于项目介绍大部分都是英文,理解起来比较麻烦,而且有的时候还需要注意照顾代码风格,不然SonarQube的评分可能就很低。

(三)相关资料

  最终的实验结果有部分需要用到markdown文件记录,由于有些需要图片渲染,因此我将这部分发布在CSDN博客上,具体有:

  • Part3问答题
  • Part3设计文档
  • Part3测试文档
  • Part4问答题

  另外在网上查找资料的时候也发现网上对于GridWorld的问答题已经有了说明文档,这里也给出链接:传送门

四、阶段三(第4-5周)

(一)实验内容介绍

  最后一个阶段的任务基本上都脱离了GridWorld,要求我们用Java实现3个简单的小任务:

  1. 图像处理ImageReader让我们利用提供的框架实现简单的图像处理工具,能够提取根据读写BMP图像,并且提取相应的RGB通道图层,或者直接根据I = 0.299 * R + 0.587 * G + 0.114 *B将彩色图像转换成灰度图
  2. 迷宫MazeBug则结合之前GridWorld的框架,提供载入地图服务,让我们设计一个能够迷宫的MazeBug类,使用深度优先搜索(DFS)的方法得到走出迷宫的路径
  3. N-Puzzle先是利用广度优先搜索(BFS)解决8数码问题,然后让我们编写自己的评价函数,以改进A*算法,并用其解决8数码问题的升级——24数码问题

(二)实验感想

  这一阶段的内容基本脱离了前面的GridWorld框架,虽然看起来很麻烦,但同样已经提供好了大致的框架,因此只需要补充完整就可以完成每个项目。像BFS、DFS、图像通道提取这些内容其实之前基本上已经接触过了,所以难度并不是很大。如果非要从3个项目中选一个的话可能就是中间的迷宫项目了,虽然DFS算法并不是很难,但我在试图解决的时候不太理解为什么crossLocationStack<ArrayList<Location>>类型,纠结了好一阵子,不过在查看一个往年师兄的文档中看到了相应的说明,结合师兄的代码这才继续做了下来。

五、总结

  这是我们软工的第2次实训了,相比第一次的Agenda,感觉学到了更多的东西。第一次实训的时候刚转过来,对于完整的项目流水并没有太过深入的理解,因此整个Agenda项目做完其实也只是简单的完成任务;但这次实训由于换了之前没学过的语言Java,我花了更多的时间去学习了这次实训用的一些工具。像在写ImageReader的时候Junit这个单元测试工具就曾帮助我更好定位了项目中出现的bug;而SonarQube在整个实训过程中用得更多次,很好帮忙检查了代码的质量,通过查看分析报告很容易就能发现我的一些风格不足。而这些工具其实在初级实训的时候也遇到过,像GoogleTest测试以及相应的C++代码风格检测当时都没有尝试,也不清楚它们的作用。当时在Agenda的最后一关AgendaService类的时候花了一周的时间,由于测试都直接在Matrix上进行,因此我当时一直没能找到Bug的位置,但如果当时有使用Googletest做代码测试的话,可能这一块就会快速许多。

软工中级实训——实训总结报告相关推荐

  1. 软工1816 · 第七次作业 - 需求分析报告

    软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...

  2. 软工实践第七次作业- 需求分析报告(第五组)

    软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...

  3. 软工之404 Note Found 队选题报告

    目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...

  4. 福大软工1816 · 第七次作业 - 需求分析报告之拖鞋旅游队

    [组长博客链接] 031602428 苏路明 [计划安排] 阶段 主要任务 时间 任务内容 1 项目选题 09.22 - 10.10 确定选题内容,收集用户需求,明确定位,竞品分析,选题报告 2 需求 ...

  5. 18软工实践 - 第七次作业 - 需求分析报告

    目录 组队后的团队项目的整体计划安排 项目logo及思维导图 项目logo 思维导图 产品思维导图 产品思维导图-引导 产品思维导图-后端数据处理.存储 产品思维导图-短信识别 产品思维导图-智能分析 ...

  6. 软工实践第七次作业——需求分析报告

    前言 本次作业链接 组长博客链接 宣传视频链接 项目logo及思维导图 项目logo 项目Logo设计思路:我们的项目基于福州大学的各个食堂展开服务,所以我们的图标是一个抽象的碗,碗由字母" ...

  7. 2021秋软工实践 Lab6 团队展示与选题报告

    作业所属课程 构建之法-2021秋-福州大学软件工程 作业要求 第6次作业-团队展示+选题报告 作业的目标 为开源爱好者服务,实现更实用.更便利.更具人性化的GitHub工具类小程序 团队名称 MDY ...

  8. 软工1816 · 作业(七)需求分析报告

    前言 本次作业链接 组长博客链接 宣传视频链接 项目logo及思维导图 项目logo 项目Logo设计思路:我们的项目基于福州大学的各个食堂展开服务,所以我们的图标是一个抽象的碗,碗由字母" ...

  9. 网孔型中级维修电工实训考核装置

    ZN-88BHY网孔型中级维修电工实训考核装置 一.概述 ZN-88BHY网孔型中级维修电工实训考核装置主要由实训桌.网孔板.实训元器件(也可自购)组成.学生根据实训线路进行元器件的合理布局,安装.接 ...

  10. 熔化焊接与热切割作业实操实训考核装置

    **熔化焊接与热切割作业实操实训考核装置** 一.焊接模拟器系统概述 该系统将仿真操作设备.实时3D技术及渲染引擎相结合,演练过程真实,视觉效果.操作手感与真实一致.在焊接演练的过程中,学员能够看到焊 ...

最新文章

  1. RPi 3B Aduio 3.5mm output
  2. HDU 4652 Dice:期望dp(成环)【错位相减】
  3. axure文件如何加密_怎么样给PDF加密?PDF文件如何加密?
  4. Spring(二)IOC底层实现原理
  5. vue-cli webpack配置分析 - chenBright - SegmentFault 思否
  6. 95-090-024-源码-bin脚本-CLI提交Job-Run详解
  7. 如何自学计算机前端开发?精细的自学步骤是什么样的?
  8. Windows 系统下安装anaconda教程 ,小白教程!!!
  9. NTKO OFFICE文档控件技术资料(转载)
  10. 凯撒密码matlab转换,教你如何简单使用凯撒密码 详细始末
  11. 搭建 Vue 开发环境
  12. ie和chrome浏览器下onproperty事件oninput onpropertychange的相应和相应属性的获取
  13. (理财六)贷款用途的分类
  14. jq基础文档手册3.0
  15. 数字图像频谱的中心化
  16. 拓扑序列(拓扑排序)
  17. 中国微型无刷直流电动机市场趋势报告、技术动态创新及市场预测
  18. Xcode9 xcodebuild export plist 配置
  19. 教你制作属于自己的字体库Font Creator Program工具字体文件制作
  20. 网站宋体毕业5年后的总结

热门文章

  1. 试题 算法训练 娜神平衡python
  2. csgo靠谱的开箱网站有哪些?csgo开箱网站大全
  3. 刚装新系统环境mscorsvw.exe进程占用CPU资料50%以上的原因
  4. 「补课」进行时:设计模式(2)——通过一个超级汽车工厂来了解工厂模式
  5. Flume 数据采集
  6. amoeba mysql mmm_MMM+Amoeba搭建MySQL高可用负载均衡群集
  7. 太飒了!这届乘风破浪的 IT 女神写得了代码、撕得掉年龄、跨得过行业!
  8. 怎么制作QQ背景音乐链接
  9. Pyflink系列之使用pyflink实现flink大数据引挚的经典案例wordcount
  10. 纯洁的心--佩雷尔曼