中级实训第一天的自学报告
目錄【閱讀時(shí)間:約10分鐘】
- 中級(jí)實(shí)訓(xùn)第一天的自學(xué)報(bào)告
- 姓名:隱藏敏感信息 學(xué)號(hào):隱藏敏感信息
- 一、Vi/Vim
- 二、Java
- 三、Ant
- 四、Junit
- 【附加】五、SonarQube
- 【附加】六、 編譯運(yùn)行BugRunner
- 七、 總結(jié)
中級(jí)實(shí)訓(xùn)第一天的自學(xué)報(bào)告
姓名:隱藏敏感信息 學(xué)號(hào):隱藏敏感信息
今天是中級(jí)實(shí)訓(xùn)的第一天,筆者首先瀏覽了一下中級(jí)實(shí)訓(xùn)的架構(gòu),發(fā)現(xiàn)主要是圍繞Vim+Java+Ant+Junit+SonarQube展開。具體流程可概括為:使用Vim來編寫Java代碼, 利用Ant實(shí)現(xiàn)Java代碼的自動(dòng)編譯,利用Junit來進(jìn)行單元測(cè)試,利用SonarQube來分析代碼。
雖然自學(xué)報(bào)告只要求分享Vim+Java+Ant+Junit的自學(xué)經(jīng)歷,為了方便讀者與以后的自己觀看,筆者還是盡量書寫較為完整的自學(xué)經(jīng)歷,因此要求外的會(huì)打上【附加】的tag。
一、Vi/Vim
Vim編譯器是一款久負(fù)盛名的編譯器,常常被稱為“編譯器之神”或“大神用的編譯器”,它是linux中最經(jīng)典的文本編輯器,支持代碼補(bǔ)全、編譯及錯(cuò)誤跳轉(zhuǎn)等功能。對(duì)于雖然不能說完全掌握Vim但也有幾年使用經(jīng)驗(yàn)的筆者來說,筆者更傾向于在CLI界面下使用Vim,比如實(shí)驗(yàn)室服務(wù)器往往就通過ssh連接linux terminal,這時(shí)使用Vim編輯器可以很好地編寫各種代碼。而在GUI界面下,筆者更傾向于使用sublime或eclipse來編寫java代碼,特別是后者在設(shè)置了熟悉的自動(dòng)補(bǔ)全后,可以提升地提升工作效率。當(dāng)然,在此次實(shí)訓(xùn)中筆者會(huì)盡量使用Vim來熟悉項(xiàng)目開發(fā)流程。
Vim編譯器一共有命令模式、末行模式和編輯模式這三種工作模式,這三種模式的區(qū)別可以用以下一段話來概括。使用Vim打開文件時(shí)首先進(jìn)入的就是命令模式,可以看做Vim編譯器的入口,可以進(jìn)行復(fù)制粘貼等操作;在命令模式按 i 便會(huì)進(jìn)入編輯模式,可以進(jìn)行各種代碼或文字編輯操作,再按esc便會(huì)退回到命令模式;在命令模式按輸入 : 進(jìn)入末行模式,可以進(jìn)行保存退出等操作。
筆者常用的Vim指令有以下這些:
? ①打開文件:在terminal輸入vim filename
? ②保存并退出:在末行模式輸入wq
? ③復(fù)制一行代碼:在命令行模式輸入yy
? ④粘貼:在命令行模式輸入p
? ⑤刪除一行代碼:在命令行模式輸入dd
? ⑥撤銷操作:在命令行模式輸入u
? ⑦在編輯模式下:與文本編輯類似,方向鍵移動(dòng),正常鍵盤輸入
二、Java
由于在大二時(shí)筆者已選修了Java語言開發(fā)的相關(guān)課程,因此在進(jìn)行這部分的自學(xué)時(shí)比較輕松,主要是溫故了Java的基本語法和使用命令行編譯運(yùn)行Java程序。
在筆者看來Java是是一門典型的面向?qū)ο缶幊陶Z言,它盡可能地進(jìn)行封裝,擁有豐富的庫(kù)函數(shù)與接口支持,對(duì)于協(xié)同開發(fā)效率很高,這也是Java常年位于編程語言排行榜前列的原因之一。Java程序的編寫流程也不復(fù)雜,以熟悉的eclipse工具為例,主要流程是創(chuàng)建一個(gè)Java project,創(chuàng)建相應(yīng)的package和class,然后寫main函數(shù)與要調(diào)用的函數(shù)即可。此處便省略基礎(chǔ)的Java語法介紹了,直接用一個(gè)簡(jiǎn)單的helloworld例子來說明如何使用命令行創(chuàng)建、編譯并運(yùn)行Java程序吧~~
首先創(chuàng)建并書寫代碼:
然后使用命令行編譯運(yùn)行Java程序:
此外,雖然云桌面的環(huán)境變量已經(jīng)配置了很多,但是直接執(zhí)行java helloworld還是會(huì)報(bào)錯(cuò): could not find or load main class helloworld 。
經(jīng)搜索相關(guān)資料,是java的環(huán)境設(shè)置不完全,只要在 ~/ .bashrc和~/ .profile添加以下的環(huán)境變量設(shè)置即可:
進(jìn)入 ~/.bashrc和~/.profile的指令如下:
gedit ~/.bashrc
gedit ~/.profile要添加的環(huán)境變量如下:
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可用于實(shí)現(xiàn)Java代碼的自動(dòng)編譯,Ant是一個(gè)將軟件編譯、測(cè)試、部署等步驟聯(lián)系在一起加以自動(dòng)化的一個(gè)工具,大多用于Java環(huán)境中的軟件開發(fā)。根據(jù)筆者的自學(xué)體會(huì),它的作用與C/C++的makefile類似,一次性編譯多個(gè)文件,大大方便了項(xiàng)目編譯的流程,能減少很多重復(fù)的操作。
Ant使用xml格式來編寫,若要在項(xiàng)目中使用Ant,首先要在項(xiàng)目文件下面創(chuàng)建build.xml文件,并在xml文件中編寫與項(xiàng)目相關(guān)的指令。編寫完畢后,在項(xiàng)目文件下執(zhí)行ant指令即可。
Ant中主要的元素有三種,分別是、和。
(1)project 元素是 Ant 構(gòu)件文件的根元素, Ant 構(gòu)件文件至少應(yīng)該包含一個(gè) project 元素,否則會(huì)發(fā)生錯(cuò)誤。在每個(gè) project 元素下,可包含多個(gè) target 元素。 project 元素有如下屬性:
? ①name 屬性:用于指定 project 元素的名稱
? ②default 屬性:用于指定 project 默認(rèn)執(zhí)行時(shí)所執(zhí)行的 target 的名稱
? ③basedir 屬性:用于指定基路徑的位置。該屬性沒有指定時(shí),使用 Ant 的構(gòu)件文件的附目錄
作為基準(zhǔn)目錄。
(2)target 元素是Ant 的基本執(zhí)行單元,它可以包含一個(gè)或多個(gè)具體的任務(wù)。多個(gè) target 可以存在相互依賴關(guān)系。target 元素有如下屬性:
? ①name 屬性:指定 target 元素的名稱,這個(gè)屬性在一個(gè) project 元素中是唯一的。我們可以通過指定 target 元素的名稱來指定某個(gè) target
? ②depends 屬性:用于描述 target 之間的依賴關(guān)系,若與多個(gè) target 存在依賴關(guān)系時(shí),需
要以“,”間隔。 Ant 會(huì)依照 depends 屬性中 target 出現(xiàn)的順序依次執(zhí)行每個(gè)target。被依賴的 target 會(huì)先執(zhí)行
? ③if 屬性:用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將不會(huì)被執(zhí)行
? ④unless 屬性:該屬性的功能與 if 屬性的功能正好相反,它也用于驗(yàn)證指定的屬性是否存在,若不存在,所在 target 將會(huì)被執(zhí)行
? ⑤description 屬性:該屬性是關(guān)于 target 功能的簡(jiǎn)短描述和說明
(3)property 元素:該元素可看作參量或者參數(shù)的定義,類似于C/C++中的宏定義,可以用一些我們便于理解的變量名來代替復(fù)雜的路徑,提高代碼的可讀性。
project 的屬性可以通過 property元素來設(shè)定,也可在 Ant 之外設(shè)定。若要在外部引入某文件,例如 build.properties 文件,可以通過如下內(nèi)容將其引入: <property file=” build.properties”/>
下面不妨借助【二、Java】中的helloworld代碼,編寫一個(gè)簡(jiǎn)單的build.xml來體驗(yàn)Ant工具。在項(xiàng)目目錄helloworld-ant中,將helloworld.java放在src文件夾中,在項(xiàng)目目錄下創(chuàng)建build.xml內(nèi)容如下:
<?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>
在項(xiàng)目目錄下運(yùn)行指令ant,即可自動(dòng)編譯并運(yùn)行如下:
四、Junit
Junit是Java的一種單元測(cè)試框架,它所做的測(cè)試是白盒測(cè)試,常用于測(cè)試驅(qū)動(dòng)開發(fā)(Test-Driven Development,簡(jiǎn)稱TDD) 。由于之前選修的Java課程已接觸過Junit框架,并且最近也通過Golang課程學(xué)習(xí)了TDD開發(fā)流程的思維,其實(shí)就是通過函數(shù)的輸入輸出來確定函數(shù)的正確性。
要使用Junit,需要配置好環(huán)境,并將junit的jar文件放到項(xiàng)目目錄中。由于筆者查看的junit教程版本為junit 4.10,仍然以簡(jiǎn)單的helloworld程序?yàn)槔?#xff0c;在項(xiàng)目目錄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);}
}
最后執(zhí)行以下指令即可運(yùn)行junit進(jìn)行單元測(cè)試:
javac -classpath .:junit-4.10.jar Test_helloworld.java
java -classpath .:junit-4.10.jar -ea org.junit.runner.JUnitCore Test_helloworld
運(yùn)行截圖:
【附加】五、SonarQube
由于中級(jí)實(shí)訓(xùn)階段一要用到SonarQube,雖然沒有要求寫相應(yīng)的報(bào)告,但筆者感覺書寫報(bào)告還是對(duì)提高軟件的熟練度有幫助的。
Sonar 是一個(gè)用于代碼質(zhì)量管理的開源平臺(tái),用于管理源代碼的質(zhì)量,可以從七個(gè)維度檢測(cè)代碼質(zhì)量。通過插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy 等等二十幾種編程語言的代碼質(zhì)量管理與檢測(cè)。
經(jīng)檢查,云桌面已配置好Sonar了:
在 shell 里面鍵入 cd $SONAR_HOME, 可以直接進(jìn)入啟動(dòng)目錄。 在 shell 里面鍵入
./sonar.sh start 啟動(dòng)服務(wù)
./sonar.sh stop 停止服務(wù)
./sonar.sh restart 重啟服務(wù)
訪問 http:\localhost:9000, 如果顯示 Sona輸入rQube 的項(xiàng)目管理界面,表示安裝成功:
以階段一的calculator程序?yàn)槔?#xff0c;在項(xiàng)目目錄下創(chuàng)建sonar-project.properties,其中只需要將sonar.projectKey、sonar.projectName和java-module.sonar.projectBaseDir的值修改為源碼所在的文件夾即可,具體內(nèi)容如下:
然后在當(dāng)前目錄下輸入sonar-runner,再進(jìn)入http:\localhost:9000查看程序的代碼分析即可:
經(jīng)過Major的提示修改后,學(xué)到了不少代碼風(fēng)格的知識(shí),修改后如下:
【附加】六、 編譯運(yùn)行BugRunner
在倉(cāng)庫(kù)( https://github.com/se-2020/se-2020.github.io/tree/master/resources )中下載gridworld.zip并解壓,再將里面的GridWorldCode.zip解壓出來,進(jìn)入目錄GridWorldCode\projects\firstProject\中,即可看到BugRunner.java代碼。
由于環(huán)境在之前已配置完畢,直接在當(dāng)前目錄下運(yùn)行以下指令,即可進(jìn)入BugRunner程序中:
javac -classpath .:./../../gridworld.jar BugRunner.java
java -classpath .:./../../gridworld.jar BugRunner
再來簡(jiǎn)單介紹一下BugRunner,首先用戶可以自行在格子中放置可移動(dòng)的蟲子以及不可移動(dòng)的花和石頭,然后點(diǎn)擊step是移動(dòng)一步,點(diǎn)擊run是自動(dòng)開始移動(dòng)多步,slow/fast的游標(biāo)可以調(diào)節(jié)移動(dòng)速度,stop則是停止。其他更詳細(xì)的信息可看Part1的回答。
總的來說,BugRunner的試玩體驗(yàn)尚可,當(dāng)做休閑游戲玩玩其實(shí)也很不錯(cuò)~~
七、 總結(jié)
中級(jí)實(shí)訓(xùn)的第一天很快就過去了,在報(bào)告上可以看得出使用了不少的工具,也遇到并解決了不少的坑。
但總的來說,階段一的任務(wù)還是比較輕松的,兩天的任務(wù)其實(shí)一天內(nèi)完成并不困難。在筆者看來,階段一更多的是適應(yīng)與使用工具,尚未進(jìn)入到真正的實(shí)訓(xùn)coding階段,作為實(shí)訓(xùn)的入門難度低一些自然也是合理的。
當(dāng)然,能夠比較順利地完成階段一的任務(wù),很大一部分原因是多虧了云桌面已經(jīng)配置好了許多環(huán)境,并提供了不少的參考文檔支持和TA們的詳細(xì)解答。希望之后的實(shí)訓(xùn)也如今天一樣順利吧~~
總結(jié)
以上是生活随笔為你收集整理的中级实训第一天的自学报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go语言的错误异常处理机制及其应用
- 下一篇: 基于Golang的CLI 命令行程序开发