9 Star 2 Fork 35

openEuler / libarchive-rust

 / 详情

【交流讨论】Rust重写部分测试情况统计——「持续更新」【欢迎大家贡献测试方案及用例】-20220928

已完成
自定义 成员
创建于  
2022-08-16 10:57

**【2022 09 28 】

**
截至2022年9月20日,项目中累计新增白盒测试用例个数和每一个重写文件行覆盖度如下:
输入图片说明

每一个文件的行数及覆盖到的行数具体如下:
输入图片说明
--------------------------------------------分割线--------------------------------------------

**【2022 09 20】

**
截至2022年9月20日,项目中累计新增白盒测试用例个数和每一个重写文件行覆盖度如下:
输入图片说明

--------------------------------------------分割线--------------------------------------------

**【2022 09 15 】

**
【将系统用例移出CTest过程】
由于Arch64平台下始终无法通过添加了系统用例的CTest,

(具体看这里:https://gitee.com/link?target=https%3A%2F%2Fopeneulerjenkins.osinfra.cn%2Fjob%2Fmultiarch%2Fjob%2Fopeneuler%2Fjob%2Faarch64%2Fjob%2Flibarchive-rust%2F58%2Fconsole)

本项目放弃在CTest中融合系统用例的方案。继续采用在CI中独立执行系统测试的方案。【说明:已经验证系统用例带来的测试覆盖度并不高,而且难以推断如何通过系统用例提升测试覆盖度。】

最新的测试方案为:CI 执行CTest 白盒用例 + CI 执行黑盒用例。
【最新整理了白盒测试用例增加的策略】 (与原项目测试用例设计思路一致)

  1. 通过lcov工具统计目前白盒测试覆盖度,可以看见每一个文件中每一个函数的覆盖度,根据测试目的定位需要覆盖的函数或具体执行分支;
  2. 判断该函数是否为私有函数,如果为私有函数,则在文件中添加一个用于暴露该函数的测试入口;
  3. 分析该分支对输入参数的要求,设计能够测试到该分支的输入构造方法;
  4. 在libarchive-rust/ libarchive / test目录下找到对应的.c测试文件,添加测试函数,函数中先按设计构造对应输入,再调用待测函数。
    [由于lcov无法计算c-rust混合程序的测试覆盖度,只能首先在c项目上添加用例,计算覆盖度,再迁移到rust项目上。本质上测试覆盖度的提升,也是对原项目测试覆盖度的提升,可以直接贡献到上游项目中去。]

黑盒的系统用例还是按照2022年8月16日的方式增加。

截至2022年9月13日,本项目针对Rust改写文件的白盒测试覆盖度如下:
输入图片说明

--------------------------------------------分割线--------------------------------------------

**【2022 08 21】

**
V2. 将新增黑盒测试合并到原有的CTest过程中(原来的白盒测试),以保证可以同时计算测试覆盖度。
合并后测试覆盖度有一点点的变化,如下:
输入图片说明
添加黑盒测试用例之后:
输入图片说明

  1. 具体添加一个测试用例,调用系统用例的脚本:
#include "archive_platform.h"
__FBSDID("$FreeBSD$");

#include <stdio.h>
#include <stdlib.h>

void
archive_test_system()
{
  	int status = -1;
  	status = system("cd $(dirname $(find / -name verify.sh -print); pwd) && /bin/bash verify.sh");
	if (status != 0) {
		printf("\nerror\n");
	} else {
		printf("\nsuccess\n");
	}
  1. 添加一个测试用例定义:
#include "test.h"
__FBSDID("$FreeBSD$");

DEFINE_TEST(test_archive_system)
{
    archive_test_system();
}
  1. 要在配置文件中做对应修改,添加archive_system.c 或者test_archive_system.c
    ● libarchive-3.5.2-openEuler22.03-LTS-Next/Makefile.am
    ● libarchive-3.5.2-openEuler22.03-LTS-Next/libarchive/CMakeLists.txt
    ● libarchive-3.5.2-openEuler22.03-LTS-Next/libarchive/test/CMakeLists.txt
    ● libarchive-rust/libarchive-3.5.2-openEuler22.03-LTS-Next/libarchive/test/list.h

--------------------------------------------分割线--------------------------------------------

**【2022 08 16】

**
V1. 记录原项目情况 + 新增黑盒测试

  1. 原项目总体情况:共723个白盒测试的测试用例(测试文件共549个,测试函数共3132个),在x86架构下能够通过所有的测试用例,在arch64架构下不能通过libarchive_test_write_filter_lzma、libarchive_test_write_filter_xz、libarchive_test_write_format_xar、bsdtar_test_option_H_upper、bsdtar_test_option_L_upper、bsdtar_test_option_n、bsdtar_test_option_U_upper等7个测试用例。

测试用例对所有改写的c文件的测试覆盖度:
输入图片说明

  1. 新增黑盒测试用例情况:
    (1)测试目标:针对改写后的libarchive,系统测试通过分别调用libarchive的cpio和tar指令来对测试用例进行压缩解压缩,通过对压缩解压缩前后的测试用例的文件一致性来判断系统级测试是否通过。
    (2)准备测试用例,放置于librchive/system_test_case中,测试用例目前包括有:
    a. 空文件夹
    b. 单层文件夹包含单个文件
    c. 单层文件夹包含10个文件
    d. 10层文件夹,每层包含10个文件
    (3)添加进门禁测试脚本, 来执行验证压缩解压缩后的文件一致性,如下:
cd libarchive/system_test_case/
/bin/bash verify.sh

未来测试计划:新增白盒测试用例,提升代码覆盖度;针对高危漏洞设计复现的黑盒测试用例,并执行测试。

评论 (5)

lcynju 创建了自定义

Hi lcynju_admin, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: Base-service, and any of the maintainers: @hexiaowen , @zhujianwei001 , @谢志鹏 , @Monday , @lcynju , @Sora5175 , @Kevin

openeuler-ci-bot 添加了
 
sig/Base-service
标签
lcynju 修改了描述
lcynju 修改了标题
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了描述

9.3号代码覆盖率情况

目前
对于7zip.c通过增加对set_error、check_7zip_header_in_sfx、skip_sfx、init_decompression等方法添加对应的测试用例将代码覆盖度从78.2提升至83.1
对于mtree.c通过增加对parse_keyword、process_global_unset、la_strsep、parse_digest等方法添加对应的测试用例将代码覆盖度从80.9提升至84.3
对于tar.c通过增加对tohex、pax_attribute等方法添加对应的测试用例将代码覆盖度从83.5提升至85.6
对于zip.c通过增加对trad_enc_init、zip_read_mac_metadata、expose_parent_dirs等方法添加对应的测试用例将代码覆盖度从82.8提升至84.5

输入图片说明
总的代码行覆盖度提升至83.9

lcynju 修改了描述
lcynju 修改了标题
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了标题
lcynju 修改了标题
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了标题
lcynju 修改了描述
lcynju 修改了描述
lcynju 修改了标题
lcynju 置顶等级设置为

既然重写之后的代码是rs文件,是否有rs文件的覆盖率信息。

混合项目中针对rs文件没找到自动统计测试覆盖度的方法,所以还只是在原c文件上统计覆盖度,用例也是先写在C项目中,然后人工用rust改写到rust文件测试文件中。

是否有详细的覆盖率报告,建议可以提供下。

lcynju 任务状态待办的 修改为已完成
lcynju 置顶等级 修改为不置顶

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(4)
5329419 openeuler ci bot 1632792936
1
https://gitee.com/openeuler/libarchive-rust.git
git@gitee.com:openeuler/libarchive-rust.git
openeuler
libarchive-rust
libarchive-rust

搜索帮助