Jacoco Maven集成
Jacoco Maven集成Maven是Java项目常用的一款项目管理工具,我们可以通过Maven进行项目的编译、测试、打包等操作。Jacoco与Maven的整合,通过Maven命令执行,获取Jacoco生成的覆盖率测试报告,也以便于与Jenkins集成,接下来对我们的Maven工程进行Jacoco的整合。
Maven工程中添加Jacoco插件Jacoco Maven插件官网说明
使用的必须条件:
Maven的版本3.0以上
Java的版本1.5以
在我们maven项目的pom.xml中引入如下的模块与配置
12345678910<build> <plugins> <!--jacoco的插件--> <plugin> <groupId>org.jacoco</groupId> <artifactId>jacoco-maven-plugin</artifactId> <version>0.8.7-SNAPSHOT</version ...
Java之领域模型转换
Java之领域模型转换应用分成&分层领域模型为什么重要?我们在软件开发设计及开发过程中,习惯将软件横向拆分为几个层。比如常见的三层架构:表现层(UI)/业务逻辑层(BAL)/数据访问层(DAL)。
那应用系统为什么要分层呢?主要解决以下几个问题:
解耦
有一句计算机名言:软件的所有问题都可以通过增加一层来解决。
当系统越大,团队越多,需求变化越快时,越要保证程序之间的依赖关系越少。而分层/面向接口编程,会使我们在应对变化时越容易。
简化问题
当我们想不明白从用户操作一直到数据落盘整个过程的交互情况时,我们应该换种方式思考。想想各层应该提供哪些支持,通过对各层分工的明确定义,复杂问题就变成了如何将各层功能组合起来的“积木搭建”。
降低系统维护与升级版本
这里体现了面向接口编程的优势。我们抽象出数据访问层后,只需要保证对外提供的接口不变,底层数据库使用Oracle还是MySql,上层结构是感知不到的。
逻辑复用/代码复用
通过分层,明确定义各层职责,再也不会出现系统中多个地方查询同一个数据库表的代码。因为查询某个数据库表的工作只会由一个数据访问层类来统一提供 ...
Hexo搭建个人博客并部署到Github
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
环境准备
Node.js环境
Git
Hexo安装1npm install hexo -g
升级更新hexo最新版本
1npm update hexo -g
博客搭建Github上创建一个仓库my-blog,并clone到本地
初始化
12cd my-bloghexo init
生成网站
1hexo g
启动本地
1hexo s
启动服务后,就可以访问:http://localhost:4000/(port 预设为 4000,可在 _config.yml 设定)
部署步骤每次部署的步骤,可按以下三步来进行:
123hexo cleanhexo generatehexo dep ...
Jacoco代码覆盖率报告分析
Jacoco代码覆盖率报告分析Jacoco代码覆盖率统计维度、报告字段说明、报告详细分析描述。并为精准测试、健壮性测试提供指导。
Jacoco代码覆盖率统计维度Jacoco是从代码指令(Instructions, C0coverage),分支(Branches, C1coverage),圈复杂度(Cyclomatic Complexity),行(Lines),方法(Methods),类(Classes)等维度进行分析的。
Jacoco生成报告字段说明
字段名称
说明
描述
Element
元素
最外层展示分组名称,依次为包>类>方法
Missed Instructions Cov.
指令覆盖,字节码中指令
1. Jacoco最小计数单元是单个Java二进制指令代码。2. 指令覆盖率提供了代码是否被执行的信息。
Missed Branches Cov.
分支覆盖率
1. Jacoco计算分支覆盖率,包括所有的if和switch语句。2. 用钻石表示,分支覆盖不能看行。3. 这是度量一个方法里面的总分支数,确定执行和不执行的分支数量。4. 分支覆盖率总是可 ...
圈复杂度
圈复杂度在学习Jacoco覆盖率的时候,看到一项圈复杂度(Cyclomatic Complexity)的统计维度,对此感到不适很理解,因此在查找文章后,进行对圈复杂度的讲解。
什么是圈复杂度圈复杂度(Cyclomatic complexity,简写CC)也称为条件复杂度,是一种代码复杂度的衡量标准。由托马斯·J·麦凯布(Thomas J. McCabe, Sr.)于1976年提出,用来表示程序的复杂度,其符号为VG或是M。它可以用来衡量一个模块判定结构的复杂程度,数量上表现为独立现行路径条数,也可理解为覆盖所有的可能情况最少使用的测试用例数。圈复杂度大说明程序代码的判断逻辑复杂,可能质量低且难于测试和 维护。程序的可能错误和高的圈复杂度有着很大关系。
圈复杂度计算方法点边计算法计算公式为:
1V(G) = E - N + 2
其中,E表示控制流图中边的数量,N表示控制流图中节点的数量。
几个节点通过边连接。以下是典型的控制流程,如if-else,while,for,switch-case和正常的流程顺序:
节点判定法圈复杂度的计算还有更直观的方法,因为圈复杂度所反映的是“判定条件” ...
Jacoco简介
浅谈覆盖率在介绍Jacoco前,就是需要了解覆盖率是什么?现在开发在做单元测试时,问得更多的是:“覆盖率要多少?”以覆盖的达到的百分比作为衡量的标准,所以开发在写单测执行时,最多关注的是测试覆盖率达到了多少,这样将测试覆盖率作为指标意义不大,在我们做测试覆盖率更重要的是关注未被测试覆盖的代码。
代码覆盖率的意义
分析未覆盖部分的代码,从而反推在前期测试设计是否充分,没有覆盖到的代码是否是测试设计的盲点,为什么没有考虑到?需求/设计不够清晰,测试设计的理解有误,工程方法应用后的造成的策略性放弃等等,之后进行补充测试用例设计。
检测出程序中的废代码,可以逆向反推在代码设计中思维混乱点,提醒设计/开发人员理清代码逻辑关系,提升代码质量。
代码覆盖率高不能说明代码质量高,但是反过来看,代码覆盖率低,代码质量不会高到哪里去,可以作为测试自我审视的重要工具之一。
代码覆盖率工具目前基本针对于Java的覆盖率工具,最常用的是Jacoco,主要讲解的是Jacoco
Jacoco
Emma
Cobertura
原理
使用ASM修改字节码
可以修改Jar文件、class文件字节码文件
...
Java之检查工具
Java之检查工具静态代码分析静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等。
主流Java静态分析工具
CheckStyle
Checkstyle是SourceForge的开源项目,通过检查对代码编码格式、命名约定、Javadoc、类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。
特点:检查源文件,主要关注格式
FindBugs
FindBugs是由马里兰大学提供的一款开源Java静态代码分析工具。FindBugs通过检查类文件或JAR文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。
特点:基于Bugs Patterns概念,检查.class文件中的潜在Bug
PMD
PMD是由DARPA在SourceForge上发布的开源Java代码静态分析工具。PMD通过其内置的编码规范对Java代码进行静态检查,主要包括对潜在的bug,未使用的代码,重复代码,循环体创建新对 ...
Java之开发工具idea使用
Java之开发工具idea使用IDEA简介IntelliJ IDEA是一种商业化销售的Java集成开发环境(Integrated Development Environment,IDE)工具软件,由JetBrains软件公司(前称为InterlliJ)开发,提供Apache2.0开放式授权的社区版本以及专有软件的商业版本,开发者可选择其所需来下载使用。
– 维基百科
官方网站: https://www.jetbrains.com/idea/
IDEA常用功能以软件开发过程为脉络,介绍常用功能
IDEA界面介绍
Preferences:设置菜单
File:文件菜单
新建项目
关闭项目 ...
mysql基础学习
MySQL介绍MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。
SQL基础教程学习
MySQL配置文件设置my.ini(WIndows)/my.cnf(MacOS/Linux),主要配置内容如下:
12345678910111213141516171819202122[mysqld]# 设置3306端口port=3306# 设置mysql的安 ...
MySQL事务隔离
提到事务,先看一个典型转账的例子,来理解什么是事务。
小王要给小红转账100元,此时小王的银行卡账户只有100元。转账过程具体到程序里会有一系列的操作,比如,月查询、做加减法、更新余额等,这些操作必须保证是一体的,不然等程序查完之后,还没有做减法之前,这100元,完全可以借着这个时间再查一次,然后再给另外一个朋友转账,如果银行这么整,不就乱了么?这个时候就要用到“事务”的概念了。
简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。在MySQL中,事务支持是在引擎层实现的,但MySQL是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如MySQL原生的MyISAM引擎就不支持事务,这也就是MyISAM被InnoDB取代的重要原因之一。
本章解释MySQL的事务支持,是基于InnoDB引擎为例,并基于原理给出相应的实践,加深对MySQL事务原理的理解。
隔离性与隔离级别提到事务,我们肯定先想到的是事务的特性ACID原则:
Atomicity(原子性)
Consistency(一致性)
Isolation(隔离性)
Durability(持久性)
而本篇重点介绍的 ...