一、项目背景
1.项目简介
1.1基本原理:依据字符出现的概率来构建平均长度最短的码字
1.2文件压缩步骤如下:
(1) 读取源文件文件,统计其中所有不同字符的出现次数。
(2) 构建Huffman树:利用优先队列根据字符频率构建哈夫曼树。在构建过程中,每次从堆中取出频率最小的两个节点,将它们合并为一个新节点,新节点的频率为这两个节点频率之和,新节点作为这两个节点的父节点,再将新节点放回堆中,重复此操作,直到堆中只剩下一个节点,即哈夫曼树的根节点。
(3) 获取Huffman编码:以字符中每个字符出现的总次数为权值构建Huffman树,Huffman树中左分支用0代替,右分支用1代替,所有权值节点都在叶子位置,遍历每条到叶子结点的路径获取字符的编码。
(4)文件压缩:打开被压缩文件,获取文件中每个字符出现的总次数,以每个字符出现的总次数为权值构建Huffman树,通过Huffman树获取每个字符的Huffman编码,读取源文件,对源文件中每个字符使用获取的Huffman编码进行改写,将改写结果写到压缩文件中,直到文件结束。
(5)文件解压缩:读取压缩文件和配置文件,根据配置文件中的字符频率信息重构哈夫曼树。然后逐位读取压缩文件中的编码,根据哈夫曼树进行解码,将解码后的字符依次写入解压缩文件,直到压缩文件读取完毕。
2.开发环境以及测试工具
开发环境:Visual stdio 2019
测试工具:Beyond Compare
二、测试安排
模块 | 子模块 | 提测时间 | 排期 | 进度 |
功能测试 | 压缩和解压缩、用不同格式的文件进行压缩和解压缩操作 | 8.23 | 8.25 | 测试完成 |
界面测试 | 主页面 | 8.23 | 8.25 | 测试完成 |
性能测试 | 程序的压缩性能 | 8.23 | 8.25 | 测试完成 |
兼容性测试 | Windows运行程序、ios运行程序 | 8.23 | 8.25 | 测试完成 |
易用性测试 | 能否快速适用产品的使用流程 | 8.23 | 8.25 | 测试完成 |
三、测试用例
四、测试分类
1.功能测试
功能测试覆盖压缩、解压缩和退出功能
测试结果:测试用例100%通过
2.界面测试
界面测试覆盖菜单页界面
测试结果:测试用例100%通过
3.兼容性测试
覆盖了常见的操作系统,windows和ios
测试结果:测试用例100%通过
4.安全性测试
安全测试覆盖了压缩数据和解压缩数据是否会丢失
测试结果:测试用例100%通过
五、测试Bug
bug:压缩文件中加入中文字符程序崩溃
错误原因:经过查看各个变量的具体内容,可以发现是数组访问越界,汉字在内存中存储的时候占两个字节,我们用一个字节来表示一个汉字,那么这两个字节一般都是负数,很容易导致数组元素访问失败。
解决方法:在读取中文字符时会导致char类型出现负数,所以可以将暂时存储字符的数组设置为无符号类型,就不会出现负数了,即将所有的char类型改成unsigned char,程序就可以正常运行了。
六、测试结果测评
1.基于Huffman编码的文件压缩在压缩文本文件压缩率较高,而在压缩图像、视频文件甚至出现越压缩文件越大的情况。
2.Huffman的解压时间较短,适用于需要频繁解压文件的场合。