软工中级实训——实训总结报告
文章目录
- 一、摘要
- 二、阶段一(第1周)
- (一)实验内容介绍
- (二)实验感想
- (三)相关资料
- 三、阶段二(第2-3周)
- (一)实验内容介绍
- (二)实验感想
- (三)相关资料
- 四、阶段三(第4-5周)
- (一)实验内容介绍
- (二)实验感想
- 五、总结
GridWorld 软工中级实训总结报告
一、摘要
为期5周的中级实训已经结束,整个实训大部分时间是围绕GridWorld来做的,GridWorld本身已经是一个可视化的二维网格,在上面我们做些简单的操作。围绕着GridWorld,这段时间我们完成了3阶段的工作:阶段1初步接触相应工具;阶段2完成对GridWorldCode内框架的熟悉和内容扩展;最后一部分则是基本上脱离GridWorld,用Java实现一些简单的算法(图像图层提取/BFS/DFS/A*等)
二、阶段一(第1周)
(一)实验内容介绍
第一周是入门阶段,我们主要完成了3部分的工作:
- 学习Vi/Vim,Java,Ant和Junit的相关内容,在Ubuntu上熟悉了相关环境,然后完成了相应的HelloWorld程序的编写(Java)、自动编译运行(Ant)以及测试(Junit),并写了一份相应的自学报告。
- 学习SonarQube代码分析工具的使用,并用Java实现了简单的计算器小程序(可实现整数的四则运算),利用SonarQube加以分析代码质量
- 从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个部分的内容:
Part2主要熟悉Bug的各项操作,并且需要我们对Bug的运动做出适当修改,让Bug走出不同的形状
类名 运动轨迹形状 CircleBug 正8边形 SpiralBug 螺旋状 ZBug Z字形 DancingBug “跳舞”(有特定的规律,每个周期内每隔特定步数会旋转特定角度) Part3则先是研究GridWorld中出现的其他类(Location、Grid、Actor),并仿照Bug写一个新的Actor子类Jumper,给出了Jumper类的运动思路,但让我们完善整个Jumper类运动的逻辑规则,写出完整的设计和测试文档。
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对象 Part5则是对Grid网格做出了扩展,对于有限大小的网格要求我们用其他的方法(HashMap/TreeMap/自制链表)来实现稀疏矩阵存储;另外还让我们做出无限大小的网格。
(二)实验感想
阶段2分成了4个部分,让我们一步步熟悉GridWorld框架里已有的内容,并对其进行扩展。现在做完回过头来看代码其实并不困难,只要掌握了项目提出的要求,确定其行为逻辑我们就已经打好代码的框架了,再稍微改动下就可以提交代码。有点麻烦的地方可能在于项目介绍大部分都是英文,理解起来比较麻烦,而且有的时候还需要注意照顾代码风格,不然SonarQube的评分可能就很低。
(三)相关资料
最终的实验结果有部分需要用到markdown文件记录,由于有些需要图片渲染,因此我将这部分发布在CSDN博客上,具体有:
- Part3问答题
- Part3设计文档
- Part3测试文档
- Part4问答题
另外在网上查找资料的时候也发现网上对于GridWorld的问答题已经有了说明文档,这里也给出链接:传送门
四、阶段三(第4-5周)
(一)实验内容介绍
最后一个阶段的任务基本上都脱离了GridWorld,要求我们用Java实现3个简单的小任务:
- 图像处理ImageReader让我们利用提供的框架实现简单的图像处理工具,能够提取根据读写BMP图像,并且提取相应的RGB通道图层,或者直接根据
I = 0.299 * R + 0.587 * G + 0.114 *B
将彩色图像转换成灰度图 - 迷宫MazeBug则结合之前GridWorld的框架,提供载入地图服务,让我们设计一个能够迷宫的MazeBug类,使用深度优先搜索(DFS)的方法得到走出迷宫的路径
- N-Puzzle先是利用广度优先搜索(BFS)解决8数码问题,然后让我们编写自己的评价函数,以改进A*算法,并用其解决8数码问题的升级——24数码问题
(二)实验感想
这一阶段的内容基本脱离了前面的GridWorld框架,虽然看起来很麻烦,但同样已经提供好了大致的框架,因此只需要补充完整就可以完成每个项目。像BFS、DFS、图像通道提取这些内容其实之前基本上已经接触过了,所以难度并不是很大。如果非要从3个项目中选一个的话可能就是中间的迷宫项目了,虽然DFS算法并不是很难,但我在试图解决的时候不太理解为什么crossLocation
是Stack<ArrayList<Location>>
类型,纠结了好一阵子,不过在查看一个往年师兄的文档中看到了相应的说明,结合师兄的代码这才继续做了下来。
五、总结
这是我们软工的第2次实训了,相比第一次的Agenda,感觉学到了更多的东西。第一次实训的时候刚转过来,对于完整的项目流水并没有太过深入的理解,因此整个Agenda项目做完其实也只是简单的完成任务;但这次实训由于换了之前没学过的语言Java,我花了更多的时间去学习了这次实训用的一些工具。像在写ImageReader的时候Junit这个单元测试工具就曾帮助我更好定位了项目中出现的bug;而SonarQube在整个实训过程中用得更多次,很好帮忙检查了代码的质量,通过查看分析报告很容易就能发现我的一些风格不足。而这些工具其实在初级实训的时候也遇到过,像GoogleTest测试以及相应的C++代码风格检测当时都没有尝试,也不清楚它们的作用。当时在Agenda的最后一关AgendaService类的时候花了一周的时间,由于测试都直接在Matrix上进行,因此我当时一直没能找到Bug的位置,但如果当时有使用Googletest做代码测试的话,可能这一块就会快速许多。
软工中级实训——实训总结报告相关推荐
- 软工1816 · 第七次作业 - 需求分析报告
软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...
- 软工实践第七次作业- 需求分析报告(第五组)
软工1816 · 第七次作业 - 需求分析报告 组长本次作业的博客 评审表 <需求规格说明书> 成员分工明细以及TODO-list 负责人 分工明细 TODO-list 白晨曦 1.规划项 ...
- 软工之404 Note Found 队选题报告
目录 NABCD分析引用 N(Need,需求): A(Approach,做法): B(Benefit,好处): C(Competitors,竞争): D(Delivery,交付): 初期 中期 个人贡 ...
- 福大软工1816 · 第七次作业 - 需求分析报告之拖鞋旅游队
[组长博客链接] 031602428 苏路明 [计划安排] 阶段 主要任务 时间 任务内容 1 项目选题 09.22 - 10.10 确定选题内容,收集用户需求,明确定位,竞品分析,选题报告 2 需求 ...
- 18软工实践 - 第七次作业 - 需求分析报告
目录 组队后的团队项目的整体计划安排 项目logo及思维导图 项目logo 思维导图 产品思维导图 产品思维导图-引导 产品思维导图-后端数据处理.存储 产品思维导图-短信识别 产品思维导图-智能分析 ...
- 软工实践第七次作业——需求分析报告
前言 本次作业链接 组长博客链接 宣传视频链接 项目logo及思维导图 项目logo 项目Logo设计思路:我们的项目基于福州大学的各个食堂展开服务,所以我们的图标是一个抽象的碗,碗由字母" ...
- 2021秋软工实践 Lab6 团队展示与选题报告
作业所属课程 构建之法-2021秋-福州大学软件工程 作业要求 第6次作业-团队展示+选题报告 作业的目标 为开源爱好者服务,实现更实用.更便利.更具人性化的GitHub工具类小程序 团队名称 MDY ...
- 软工1816 · 作业(七)需求分析报告
前言 本次作业链接 组长博客链接 宣传视频链接 项目logo及思维导图 项目logo 项目Logo设计思路:我们的项目基于福州大学的各个食堂展开服务,所以我们的图标是一个抽象的碗,碗由字母" ...
- 网孔型中级维修电工实训考核装置
ZN-88BHY网孔型中级维修电工实训考核装置 一.概述 ZN-88BHY网孔型中级维修电工实训考核装置主要由实训桌.网孔板.实训元器件(也可自购)组成.学生根据实训线路进行元器件的合理布局,安装.接 ...
- 熔化焊接与热切割作业实操实训考核装置
**熔化焊接与热切割作业实操实训考核装置** 一.焊接模拟器系统概述 该系统将仿真操作设备.实时3D技术及渲染引擎相结合,演练过程真实,视觉效果.操作手感与真实一致.在焊接演练的过程中,学员能够看到焊 ...
最新文章
- RPi 3B Aduio 3.5mm output
- HDU 4652 Dice:期望dp(成环)【错位相减】
- axure文件如何加密_怎么样给PDF加密?PDF文件如何加密?
- Spring(二)IOC底层实现原理
- vue-cli webpack配置分析 - chenBright - SegmentFault 思否
- 95-090-024-源码-bin脚本-CLI提交Job-Run详解
- 如何自学计算机前端开发?精细的自学步骤是什么样的?
- Windows 系统下安装anaconda教程 ,小白教程!!!
- NTKO OFFICE文档控件技术资料(转载)
- 凯撒密码matlab转换,教你如何简单使用凯撒密码 详细始末
- 搭建 Vue 开发环境
- ie和chrome浏览器下onproperty事件oninput onpropertychange的相应和相应属性的获取
- (理财六)贷款用途的分类
- jq基础文档手册3.0
- 数字图像频谱的中心化
- 拓扑序列(拓扑排序)
- 中国微型无刷直流电动机市场趋势报告、技术动态创新及市场预测
- Xcode9 xcodebuild export plist 配置
- 教你制作属于自己的字体库Font Creator Program工具字体文件制作
- 网站宋体毕业5年后的总结
热门文章
- 试题 算法训练 娜神平衡python
- csgo靠谱的开箱网站有哪些?csgo开箱网站大全
- 刚装新系统环境mscorsvw.exe进程占用CPU资料50%以上的原因
- 「补课」进行时:设计模式(2)——通过一个超级汽车工厂来了解工厂模式
- Flume 数据采集
- amoeba mysql mmm_MMM+Amoeba搭建MySQL高可用负载均衡群集
- 太飒了!这届乘风破浪的 IT 女神写得了代码、撕得掉年龄、跨得过行业!
- 怎么制作QQ背景音乐链接
- Pyflink系列之使用pyflink实现flink大数据引挚的经典案例wordcount
- 纯洁的心--佩雷尔曼