[软件构造]2020春HIT软构心得(IDEA+MAVEN+Travis CI)

HIT的软构课程推荐使用Eclipse编写代码,并且三次实验都默认你使用Eclipse,而像我这样喜欢好看的IDE的人当然会选择用IDEA来编写代码。因此本文会讲述如何在IDEA环境下来完成软构实验的一些内容,并且简单讲述Maven的一些小技巧,以及如何用Travis CI进行在线build。

(使用的IDEA版本为2020.3.3,社区版)

目录

IDEA使用tips

IDEA下用Maven构建项目

如何用Travis CI进行在线build

总结


IDEA使用tips

1. 利用集成的Git进行相关操作

事实上,IDEA的功能是强大的,它集成了Git,并且让Git的许多操作变得十分简便易懂。

(关于Git的安装及使用本文不再赘述,B站教程很多,个人推荐尚硅谷)

对于一个新建工程,首先在最上面的一堆菜单选项中找到"VCS",然后点击"Create Git Repository"就可以创建本地仓库。

在创建了Git的本地仓库后,就可以点击IDEA上方的Git栏,看到下图所示界面。

  

点击Commit,可以将修改好的代码上传到本地仓库;点击Push,可以将本地仓库的代码上传到GitHub。这两个功能是实验中最常用到的功能。

需要注意的是,在第一次push前,需要先设置remotes(即下方的Manage Remotes)。点进去之后,可以创建新的remote。这里remote的名字只是你给URL地址起的一个别名,可以随便起。

在push过程中,我们可以选择将本地仓库的内容推送到一个远程仓库。在软构实验中,就是推送到专门的实验仓库中。

注意,push过程中,你有两个地方可以更改。第一个是你的remote,代表远程仓库的地址,第二个紧跟在remote后面,代表远程仓库的分支名字。通常我们都会推送到master分支上,所以将名字改为master即可。

此外,如果你在自己的实验仓库页面修改了分支名字,比如将初始生成的main分支改为master,那么第一次push很可能失败,因为有可能出现分支合并错误。你可以将分支改回main,再推送一个master;或者在写代码前先将远程仓库pull下来,这样就不会产生分支合并错误。

在今年的实验3中,还需要新建分支。此处直接点击"New Branch"(需要至少commit一次该按钮才会亮起),输入新分支的名字点击创建即可。默认会勾选"Checkout branch",代表新建分支后,自动将头指针移动到该分支。

2. 设置test目录

根据目录要求,你需要在lab工程下创建src和test这两个目录。通常src会在新建工程时自动创建好,而test目录需要我们自己创建,创建好后如下图所示:

但是我们会发现,在test目录下,无法直接像在src目录下那样直接创建一个java文件。此时需要我们更改一些设置:右键工程根文件夹,然后选择“Open Module Settings”。

进入下图所示界面后,右键test目录,将其设置为“Tests”即可,之后你会发现test目录变为了绿色,那就代表设置成功。

设置成功后,你就可以正常地在test目录下添加java文件,来对你的代码进行测试。

(有关Junit的使用方法,网上也有很多教程,此处不再赘述)

3. 测试代码覆盖率

在第二个实验中,会让你用Eclipse中的EclEmma来统计Junit测试用例的代码覆盖度。但在IDEA中你是找不到这个插件的(因为这个插件是为Eclipse设计的),取而代之,你可以找到JaCoCo。但没关系,你可以放心使用,因为EclEmma在2.0版本之后是基于JaCoCo设计的。

在编写完Junit测试代码并点击小绿色箭头测试前,你可以看到这个界面:

为了使用JaCoCo,首先点击最下面的"Modify Run Configuration",进入如下界面:

默认设置都不用动,但你需要选择"Code Coverage"栏右边的那个"Modify"选项,点开如下:

为了选择JaCoCo,你需要勾选"Specify alternative coverage runner"。勾选之后,下方会多出一个选项:

默认选项应该是IntelliJ IDEA,你只需要选为JaCoCo即可。

更改完设置以后,再次点击绿色箭头,选择第三个选项"Run ‘xxx’ with Coverage",之后就会在右边显示相关的覆盖率数据。通常来讲不用过分追求百分百覆盖率,这不现实,也没必要。但是如果覆盖率很低,那就说明你需要重新设计测试代码,尽可能地去让每个函数的每个分支都能被测试到。

IDEA下用Maven构建项目

在课程中,会讲到软件构造的整个流程,其中一步就是Build,也就是构建。而Maven就是一个很棒的构建工具,此外它也是一个依赖管理工具和项目管理工具,能通过配置文件中的依赖关系从中央仓库中下载项目所需的外部库。

由于笔者能力有限,对于Maven的许多功能研究的并不透彻,只能做到抛砖引玉,同时让读者避开一些坑。下面开始讲如何用Maven构建一个项目。

1. 添加Maven框架支持

依旧是右键工程根目录,点击"Add Framework Support"。

之后在界面中勾选Maven,点击OK,就将Maven添加到你的工程中了。

(如果添加之后出现Error reading,点击右边Maven框中的转圈的箭头按钮即可)

添加完之后,我们欣(wu)喜(yu)地发现项目的目录结构变了,同时多出了一个pom.xml配置文件,如下图。

但是!实验手册对目录结构有明确要求,我们不想改变目录结构!

那有人就说了,我不用Maven不就行了!逃避虽然可耻,但有用!

Maven还是要用的,毕竟之后我们还要验证我们的程序是否能脱离本机环境跑起来,而这也是实验手册的要求。毕竟,仅仅能让代码在你的机器上跑起来是不够的!

2. 更改Maven目录结构

让我们先看看目录结构都改变什么了。首先是src目录,原先它是我们代码的根目录,现在代码的根目录变成了src\main\java,而test目录也变成了src\test\java(虽然之前的test目录也能用)。

这其实是Maven约定的目录结构(具体的目录结构可以去网上搜,很多详解)。而我们为了更改目录结构,就不得不打开pom.xml这个配置文件了!

初始时,配置文件里会有如下信息(看不懂就对了,我也看不懂,就能看懂个UTF-8)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
</project>

现在我们在其中加上一些信息。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
    </build>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    
</project>

没错,就是多了一段build信息!更新配置文件信息后,你会看到这样一个小框:

直接点击按钮,它会帮你根据更新后的配置信息更改项目结构。让我们看看更新后的目录结构:

src目录又回来了!test目录也回来了!问题成功解决!接下来你就可以把那些与实验无关的文件夹删掉了:

有的人会说,我直接像之前那样更改Module Settings不行吗?答案是否定的,不然我也不会去一个我看不懂的配置文件中去修改信息了2333

现在这个目录结构就符合实验手册的要求了。但是还没完!我们还需要往配置文件里加点信息。

3. 添加Junit4依赖

我们在build项和version项中间加一些依赖关系信息:

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

如果不加这个信息,你之后在用Junit4写测试用例时,是无法用maven构建成功的!

如果以后你需要添加别的依赖关系,只需要按照dependency书写的格式,在dependencies中新加一个条目即可。

简单来说,dependency中的这三条信息可以唯一确定一个依赖条目,就像是函数中的一对一映射一样。至于这三条信息具体写什么,可以直接去Maven中央仓库网页(Maven Repository: Search/Browse/Explore (mvnrepository.com))去查找,人家都会给你写好的。

4. 用Maven进行测试

在右侧的Maven菜单中,双击Lifecycle中的test选项,Maven就会自动帮你执行test以前包括test的所有步骤。这里我们是想用Maven帮我们跑测试用例。

之后,我们就会看到一些输出信息,其中就可以看到关于测试用例的信息。

(中间如果出了什么错误信息可以百度,因为我也不知道会遇到什么千奇百怪的错误,我自己也遇到过各种错误,就挺离谱的)

请注意,想要让Maven识别你的测试文件,你需要以一定的格式来命名测试文件,比如xxxTest或者TestXXX。在测试过程中,我发现如果将文件名改成别的(比如单走一个t),Maven就不会输出测试信息。

5. 控制台输出乱码

在刚才测试的过程中,如果你输出了一些中文信息,可能会出现乱码的情况!如果出现乱码,请试一试如下的解决方案(不保证百分百好用,不好用还可以继续百度)

如下图,修改pom.xml中的properties信息,新加两行。

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <argLine>-Dfile.encoding=UTF-8</argLine>
</properties>

至此关于Maven的一些使用方法就讲完了,由于笔者能力有限,如有错误,恳请斧正!

如何用Travis CI进行在线build

其实本来可以不用Maven来如此费力的构建项目的(过程中还会出现许多莫名其妙的错误毁心态)。

不过一方面,如果想从走软构方向,这些东西是一定要会的,另一方面就是,Maven是我们接下来用Travis CI进行在线build的基础。

有关Travis CI如何注册、使用的方法,可以自行百度,教程多得很。接下来我们只是讲解如何用它在线build一个Java项目。

其实很简单,首先你需要在根目录下新建一个yml类型的文件——.travis.yml

(注意,travis前面还有一个点)

然后复制如下代码: 

language: java
jdk: openjdk8
branches: master
install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true
script: mvn test

(如果你是手写,请务必记住,每一个条目的冒号后面都有一个空格!这是语法要求!不添加空格会识别不了相关信息)

其中,language条目说明了你的代码使用的是什么语言;jdk条目说明了你的jdk版本(比如jdk 8);branches条目说明了从GitHub仓库上的哪个分支去找代码;script条目相当于一个脚本,说明了要执行的命令,比如"mvn test"(就是上一节中的用Maven跑测试代码的命令)

(至于install那个命令我也不知道什么意思,实在是能力有限)

之后你只需要把这个文件和仓库里的其他文件一起push到仓库中就可以了!Travis CI会很聪明地找到这个文件,然后开始根据这个文件帮你在线Build。如果你的项目在本机上可以用Maven成功构建,那么大概率在线build也不会出问题。

在等待10多秒之后,Travis CI就会提示你build成功,同时输出一些日志信息,在这里你同样可以看到测试信息(下图只截取成功时的部分画面,测试代码背景是本课程的lab2)

至此,你已经成功地让自己的项目脱离本机环境运行起来了,可喜可贺!

总结

以上就是我在用IDEA进行软构实验中的一些小心得(和踩坑体验),希望能让学弟学妹少踩一些坑!当然,这篇文章并不是一篇保姆级教学,因此一些基础知识仍然需要在网上搜索资料,自行学习(这也是对能力的一种锻炼)。希望对你们有帮助!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值