summaryreport.md
[撒花.jpg]为期5周、共4个阶段的实训终于要结束了!我最亲爱的周末终于要重回我的怀抱了!以下是我回首本次实训的总结报告:
实训平台
本次实训开发和检查平台均为个人设备上借助虚拟机搭建的Linux系统。由于本学期选修的服务计算课程在本学期前几周已有配置CentOS7环境的作业要求,故而实训的阶段一和阶段二我使用的均是CentOS7的环境,但是后来被该系统不佳的使用体验“劝退”,阶段三时改用Ubuntu18.04.2 LTS系统。
实训项目GridWorld简介
GridWorld案例提供了一个图形化环境用于可视化对象在二维网格中的交互。在这个案例中,你将设计和制造各种Actor的对象,将它们添加到一个网格中,并且根据一定的规则决定Actor的行为。此外我们还增加了三个扩展任务,ImageReader、N-Puzzle(华容道)和MazeBug(迷宫)。ImageReader实验要求参训学生利用本实验软装置,实现一个利用二进制流读取Bitmap图像,并且能够进行简单地处理和保存的软件;N-Puzzle实验要求参训学生利用广度优先搜索算法和启发式搜索算法完成重拼图游戏;MazeBug实验要参训学生采用深度优先搜索算法就可以走出迷宫。此项目要求参训学生在短时间内自学新的程序设计语言和相关工具,可以训练参训学生的快速学习的能力。通过此项目实训能让参训学生掌握在Linux环境下进行代码编写、程序调试和测试的基本知识,并且掌握使用JDK进行Java程序设计,用Ant进行程序编译,部署和测试,以及掌握单元测试的基本知识,能使用JUnit编写测试用例。另外,通过学习使用Sonar来规范自己的代码风格,找出代码中潜在的bug,让自己能写出良好的代码。同时扩展任务可以锻炼参训学生图像处理能力和学习、理解、应用深度优先搜索算法,广度优先搜索算法的能力。
实训目标
快速学习(fast learning),Linux环境编程、Java程序设计、Ant程序编译、单元测试、团队协作、集体学习
个人技能get
Linux环境开发技能
技能 | 实训前掌握情况 | 实训后掌握情况 |
---|---|---|
Ant | 从未听说 | 1. Ant是一个Java库和一个软件工具,用于自动化软件构建过程,如编译,运行,测试和组装Java应用程序。可以代替使用javac、java和jar等命令来执行java操作,从而达到轻松的构建和部署java项目的目的。2. 对Ant构建文件(相当于c的Makefile)的编写有了一定的掌握。 3. 对在Eclipse中使用ant build的操作有一定的掌握。 |
Vim | 听说过,但对基本命令操作不熟悉,平常更习惯于使用gedit代替vim | 基本熟悉了常用命令操作,开始习惯使用vim编辑相关配置文件,而基本很少使用gedit |
JUnit | 听说过,但从未使用过 | 1. 掌握了在Eclipse中添加JUnit库的操作;2. 能自行编写有效的测试用例,使用JUnit进行简单的单元测试 |
Linux常用命令 | 1. 已掌握常用文件操作命令,如cd , mv , rm , cp 等等;2. 对Linux程序的安装方法和环境变量的配置及生效等已有一定掌握 | 学习了如何使高亮并美化Ubuntu终端的操作 |
算法知识
技能 | 实训前掌握情况 | 实训后掌握情况 |
---|---|---|
BFS | 基本理解广度优先搜索算法的原理,并能编写相应代码 | / |
DFS | 基本理解深度优先搜索算法的原理,并能编写相应代码 | / |
启发式搜索 | 大致了解启发式搜索算法的原理 | 对如何编写其代价估算函数有了进一步的掌握 |
图像处理
技能 | 实训前掌握情况 | 实训后掌握情况 |
---|---|---|
图像读取 | 了解借用C/C++的CImg库读取bmp文件的方式 | 1. 了解了Bitmap的文件结构;2. 能自行使用Java语言实现一个利用二进制流读取Bitmap图像的程序,而不借助相关的API |
图像简单处理 | 使用过部分CImg库提供的某些API处理图像的方式 | 1. 学会了使用Java语言对图像进行三通道(R、G、B)的提取;2. 学会了使用Java语言对图像的灰度处理;3. 学会了使用Java语言对图像进行保存 |
软件开发
技能 | 实训前掌握情况 | 实训后掌握情况 |
---|---|---|
Sonar | 从未听说过 | 1. 掌握了如何配置sonar环境,使其成功运行,并随系统启动;2. 学会了编写配置文件sonar-project.properties ;3. 学会了使用sonar对代码进行分析,并借助分析结果修缮代码 |
Eclipse项目开发 | 仅掌握如何利用Eclipse新建一个java项目并添加java类 | 1. 掌握了如何导入外部jar包和添加其他库;2. 掌握了如何从一个现有项目文件夹中利用Eclipse建立一个项目;3. 掌握了如何导入其他需要的文件作为库 |
代码的内聚性和耦合性 | 有一定理论上的了解 | 虽然本次项目并不要求我们完完全全地编写一个GridWorld出来,而只需要我们补充、增加一些相应的代码,但在实际编写相应代码和分析原有代码的过程中,我可以实际感受到作为一个工程项目,良好的封装的代码的重要性。例如,在本次实验中,我们完全无需考虑gui 、world ,grid 甚至actor 的大部分实现细节,而只需关注其提供的一些接口函数,就可以轻松地编写出我们需要完成的代码。此外每个类和该类的runner 和test 的分离也让整个项目可读性、可扩展性更强。 |