目录【阅读时间:约10分钟】

  • 中级实训第一天的自学报告
      • 姓名:隐藏敏感信息 学号:隐藏敏感信息
    • 一、Vi/Vim
    • 二、Java
    • 三、Ant
    • 四、Junit
    • 【附加】五、SonarQube
    • 【附加】六、 编译运行BugRunner
    • 七、 总结

中级实训第一天的自学报告

姓名:隐藏敏感信息 学号:隐藏敏感信息

今天是中级实训的第一天,笔者首先浏览了一下中级实训的架构,发现主要是围绕Vim+Java+Ant+Junit+SonarQube展开。具体流程可概括为:使用Vim来编写Java代码, 利用Ant实现Java代码的自动编译,利用Junit来进行单元测试,利用SonarQube来分析代码。

虽然自学报告只要求分享Vim+Java+Ant+Junit的自学经历,为了方便读者与以后的自己观看,笔者还是尽量书写较为完整的自学经历,因此要求外的会打上【附加】的tag。

一、Vi/Vim

Vim编译器是一款久负盛名的编译器,常常被称为“编译器之神”或“大神用的编译器”,它是linux中最经典的文本编辑器,支持代码补全、编译及错误跳转等功能。对于虽然不能说完全掌握Vim但也有几年使用经验的笔者来说,笔者更倾向于在CLI界面下使用Vim,比如实验室服务器往往就通过ssh连接linux terminal,这时使用Vim编辑器可以很好地编写各种代码。而在GUI界面下,笔者更倾向于使用sublime或eclipse来编写java代码,特别是后者在设置了熟悉的自动补全后,可以提升地提升工作效率。当然,在此次实训中笔者会尽量使用Vim来熟悉项目开发流程。

Vim编译器一共有命令模式、末行模式和编辑模式这三种工作模式,这三种模式的区别可以用以下一段话来概括。使用Vim打开文件时首先进入的就是命令模式,可以看做Vim编译器的入口,可以进行复制粘贴等操作;在命令模式按 i 便会进入编辑模式,可以进行各种代码或文字编辑操作,再按esc便会退回到命令模式;在命令模式按输入 : 进入末行模式,可以进行保存退出等操作。

笔者常用的Vim指令有以下这些:

​ ①打开文件:在terminal输入vim filename

​ ②保存并退出:在末行模式输入wq

​ ③复制一行代码:在命令行模式输入yy

​ ④粘贴:在命令行模式输入p

​ ⑤删除一行代码:在命令行模式输入dd

​ ⑥撤销操作:在命令行模式输入u

​ ⑦在编辑模式下:与文本编辑类似,方向键移动,正常键盘输入

二、Java

由于在大二时笔者已选修了Java语言开发的相关课程,因此在进行这部分的自学时比较轻松,主要是温故了Java的基本语法和使用命令行编译运行Java程序。

在笔者看来Java是是一门典型的面向对象编程语言,它尽可能地进行封装,拥有丰富的库函数与接口支持,对于协同开发效率很高,这也是Java常年位于编程语言排行榜前列的原因之一。Java程序的编写流程也不复杂,以熟悉的eclipse工具为例,主要流程是创建一个Java project,创建相应的package和class,然后写main函数与要调用的函数即可。此处便省略基础的Java语法介绍了,直接用一个简单的helloworld例子来说明如何使用命令行创建、编译并运行Java程序吧~~

首先创建并书写代码:


然后使用命令行编译运行Java程序:

此外,虽然云桌面的环境变量已经配置了很多,但是直接执行java helloworld还是会报错: could not find or load main class helloworld 。

经搜索相关资料,是java的环境设置不完全,只要在 ~/ .bashrc和~/ .profile添加以下的环境变量设置即可:

进入 ~/.bashrc和~/.profile的指令如下:
gedit ~/.bashrc
gedit ~/.profile要添加的环境变量如下:
export JAVA_HOME=~/Desktop/java1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

三、Ant

正如上文所述,Ant可用于实现Java代码的自动编译,Ant是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。根据笔者的自学体会,它的作用与C/C++的makefile类似,一次性编译多个文件,大大方便了项目编译的流程,能减少很多重复的操作。

Ant使用xml格式来编写,若要在项目中使用Ant,首先要在项目文件下面创建build.xml文件,并在xml文件中编写与项目相关的指令。编写完毕后,在项目文件下执行ant指令即可。

Ant中主要的元素有三种,分别是、和。

(1)project 元素是 Ant 构件文件的根元素, Ant 构件文件至少应该包含一个 project 元素,否则会发生错误。在每个 project 元素下,可包含多个 target 元素。 project 元素有如下属性:

​ ①name 属性:用于指定 project 元素的名称

​ ②default 属性:用于指定 project 默认执行时所执行的 target 的名称

​ ③basedir 属性:用于指定基路径的位置。该属性没有指定时,使用 Ant 的构件文件的附目录
作为基准目录。

(2)target 元素是Ant 的基本执行单元,它可以包含一个或多个具体的任务。多个 target 可以存在相互依赖关系。target 元素有如下属性:

​ ①name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target

​ ②depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需
要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个target。被依赖的 target 会先执行

​ ③if 属性:用于验证指定的属性是否存在,若不存在,所在 target 将不会被执行

​ ④unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行

​ ⑤description 属性:该属性是关于 target 功能的简短描述和说明

(3)property 元素:该元素可看作参量或者参数的定义,类似于C/C++中的宏定义,可以用一些我们便于理解的变量名来代替复杂的路径,提高代码的可读性。

project 的属性可以通过 property元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引入: <property file=” build.properties”/>

下面不妨借助【二、Java】中的helloworld代码,编写一个简单的build.xml来体验Ant工具。在项目目录helloworld-ant中,将helloworld.java放在src文件夹中,在项目目录下创建build.xml内容如下:

<?xml version="1.0" encoding="UTF-8"?><!-- Created by 18342026 --><project name="helloworld" default="run" basedir="."><property name="src_path" value="src"/><property name="class_path" value="classes"/><target name="clean"><delete dir="${class_path}"/></target><target name="compile" depends="clean"><mkdir dir="${class_path}"/><javac srcdir="${src_path}" destdir="${class_path}"/></target><target name="run" depends="compile"><java classname="helloworld" classpath="${class_path}" /></target></project>

在项目目录下运行指令ant,即可自动编译并运行如下:

四、Junit

Junit是Java的一种单元测试框架,它所做的测试是白盒测试,常用于测试驱动开发(Test-Driven Development,简称TDD) 。由于之前选修的Java课程已接触过Junit框架,并且最近也通过Golang课程学习了TDD开发流程的思维,其实就是通过函数的输入输出来确定函数的正确性。

要使用Junit,需要配置好环境,并将junit的jar文件放到项目目录中。由于笔者查看的junit教程版本为junit 4.10,仍然以简单的helloworld程序为例,在项目目录helloworld-junit中,放入junit-4.10.jar、编写helloworld.java和Test_helloworld.java文件。

其中helloworld.java代码为:

public class helloworld{public static void main(String[] argv) {System.out.println(sayhello());} public static String sayhello() {return "Hello World By 18342026!";}
}

Test_helloworld.java代码为:

import static org.junit.Assert.*;
import org.junit.Test;public class Test_helloworld{@Test public void test_helloworld() {String res = helloworld.sayhello();assertEquals("Hello World By 18342026!", res);}
}

最后执行以下指令即可运行junit进行单元测试:

javac -classpath .:junit-4.10.jar Test_helloworld.java
java -classpath .:junit-4.10.jar -ea org.junit.runner.JUnitCore Test_helloworld

运行截图:

【附加】五、SonarQube

由于中级实训阶段一要用到SonarQube,虽然没有要求写相应的报告,但笔者感觉书写报告还是对提高软件的熟练度有帮助的。

Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量。通过插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy 等等二十几种编程语言的代码质量管理与检测。

经检查,云桌面已配置好Sonar了:

在 shell 里面键入 cd $SONAR_HOME, 可以直接进入启动目录。 在 shell 里面键入

./sonar.sh start 启动服务
./sonar.sh stop 停止服务
./sonar.sh restart 重启服务

访问 http:\localhost:9000, 如果显示 Sona输入rQube 的项目管理界面,表示安装成功:

以阶段一的calculator程序为例,在项目目录下创建sonar-project.properties,其中只需要将sonar.projectKey、sonar.projectName和java-module.sonar.projectBaseDir的值修改为源码所在的文件夹即可,具体内容如下:

然后在当前目录下输入sonar-runner,再进入http:\localhost:9000查看程序的代码分析即可:

经过Major的提示修改后,学到了不少代码风格的知识,修改后如下:

【附加】六、 编译运行BugRunner

在仓库( https://github.com/se-2020/se-2020.github.io/tree/master/resources )中下载gridworld.zip并解压,再将里面的GridWorldCode.zip解压出来,进入目录GridWorldCode\projects\firstProject\中,即可看到BugRunner.java代码。

由于环境在之前已配置完毕,直接在当前目录下运行以下指令,即可进入BugRunner程序中:

javac -classpath .:./../../gridworld.jar BugRunner.java
java  -classpath .:./../../gridworld.jar BugRunner

再来简单介绍一下BugRunner,首先用户可以自行在格子中放置可移动的虫子以及不可移动的花和石头,然后点击step是移动一步,点击run是自动开始移动多步,slow/fast的游标可以调节移动速度,stop则是停止。其他更详细的信息可看Part1的回答。

总的来说,BugRunner的试玩体验尚可,当做休闲游戏玩玩其实也很不错~~

七、 总结

中级实训的第一天很快就过去了,在报告上可以看得出使用了不少的工具,也遇到并解决了不少的坑。
但总的来说,阶段一的任务还是比较轻松的,两天的任务其实一天内完成并不困难。在笔者看来,阶段一更多的是适应与使用工具,尚未进入到真正的实训coding阶段,作为实训的入门难度低一些自然也是合理的。
当然,能够比较顺利地完成阶段一的任务,很大一部分原因是多亏了云桌面已经配置好了许多环境,并提供了不少的参考文档支持和TA们的详细解答。希望之后的实训也如今天一样顺利吧~~

中级实训第一天的自学报告相关推荐

  1. 高级实训任务二U-Net图像分割实验报告

    高级实训任务二U-Net图像分割实验报告 1.任务描述 ● 将卷积神经网络(CNN)应用在图像分割任务上,我们需要对网络结构进行设计. ● 需要提交博客报告以及GitHub代码仓库. ● 可选的任务: ...

  2. 项目实训第一周2-学习系统的使用

    项目实训第一周2-学习系统的使用 1.代码生成器的使用 2.sql生成器的使用 3.其他组件的使用 1.代码生成器的使用 如图,是代码生成器的基本构造 可以自行定义选择你要生成代码的注释信息,表信息, ...

  3. 计算机会计应用实训,计算机会计模拟实习报告.pdf

    <计算机会计模拟实习> 实习报告 专业年级 学 号 姓 名 指导教师 2014 年 6 中国 一.实习内容(根据实践教学大纲填写) 1.建立帐套.按照教师给予的相关企业的内容,建立一套新帐 ...

  4. 项目实训第一周(车道线检测)

    项目实训我主要负责计算机视觉方面,识别出车道线并据此导航.相关内容也更新在我的个人博客上个人网站 相关介绍 车道线检测如果用传统方法,识别速度较慢,效果不够好,容易受到多种因素的干扰,因此我们打算开发 ...

  5. JAVA程序设计-头歌实训-------# 第一阶段 Java语言快速入门

    第一阶段 Java语言快速入门 第1关:Java程序的基本框架:Hello Java World! 任务描述 本关的任务是编写你人生中第一个Java程序,从此开启你的Java实训之旅,显示效果如下: ...

  6. 【实训第一天】-开班仪式

    ​ 2020年10月12号,是我进入大专的日子,我报的是"移动应用开发"专业 ,是个校企合作,也就是在学校上二年,然后大三,进入培训基地去实训,我们这个专业培训时间为:四个月. ​ ...

  7. 智能家居实训第一天 嵌入式介绍 需求分析 开发环境 Linux基础知识

    ===========嵌入式===================== 走向:  软件  人机交互         内核  系统         硬件  单片机 C语言:51单片机   写代码---- ...

  8. 软件工程实训——第一天

    第一天 前后分离 前端:android 后端:springboot+mbatis-plus 高心星 软件工程的思维来开发项目 问题定义 可行性研究 需求分析 概要设计 详细设计 编码 测试 维护 需求 ...

  9. (个人)AR电子书系统创新实训第一周(1)

    -我们小组五人在选定了实训的课题之后就开始仔细讨论整个项目的设计.在产品展示上我们分为两部分,一块是纸媒,一块是APP. - 纸媒的展示效果就是,在我们做的宣传册上扫图片就可以获得二维甚至三维的视觉体 ...

最新文章

  1. 实现php实现价格的排序,PHP实现二维数组排序(按照数组中的某个字段)
  2. 【错误记录】Android 应用安装后出现两个启动图标 ( 排查应用及依赖库中配置了 android.intent.category.LAUNCHER 的 Activity )
  3. SQL Server 数据库定时自动备份
  4. Python3之字符串格式化format函数详解(下)
  5. 互联网大厂算法面试题集合,看完我跪了!
  6. Char.IsDigit与Char.IsNumber的区别[转]
  7. ABP 拦截器不工作
  8. openstack内存占用清理
  9. 【Java数据结构与算法】第十三章 二叉排序树和平衡二叉树
  10. 阅读java文件_阅读与阅读写文件 - Java空格
  11. 数据挖掘-文本特征提取方法研究
  12. ×××病毒分析工具集之File Format Identifier v1.0
  13. MongoDB几个完整的库表设计实例
  14. 软考试题希赛网爬取过程分享一
  15. 使用python代码调用三汇语音卡硬件拨打电话
  16. 如何使用REST Assured执行API测试
  17. 敏捷开发的价值观与十二条原则
  18. 抓取1688商品图片|文描|视频|规格|属性等信息 并打包下载
  19. 新手小白做短视频,一个月收益10000多,超过自己的主业收入
  20. js apply call bind

热门文章

  1. Spring Boot整合Spring Data JPA操作数据
  2. 2022-2028年中国康复辅具行业市场研究及前瞻分析报告
  3. PowerBuilder程序 ASA 数据库移植后不能连接解决
  4. 【微服务架构】SpringCloud之断路器(hystrix)
  5. python if elif else 区别
  6. LeetCode简单题之作为子字符串出现在单词中的字符串数目
  7. LeetCode简单题之距离顺序排列矩阵单元格
  8. LeetCode简单题之数组元素积的符号
  9. 来谈谈Servlet~~
  10. 2021年大数据Hadoop(三十):Hadoop3.x的介绍