软件质量与测试第4周小组作业:WordCount优化
GitHub项目地址
https://github.com/Guchencc/WordCounter
组长:
陈佳文:负责词频统计模块与其他模块
组员:
屈佳烨:负责排序模块
苑子尚:负责输出模块
李一凡:负责输入模块
PSP表格
PSP2.1 |
PSP阶段 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
计划 |
||
· Estimate |
· 估计这个任务需要多少时间 |
20 | 20 |
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
180 | 200 |
· Design Spec |
· 生成设计文档 |
30 | 30 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 | 30 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 20 |
· Design |
· 具体设计 |
120 | 130 |
· Coding |
· 具体编码 |
120 | 150 |
· Code Review |
· 代码复审 |
60 | 60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
60 | 60 |
Reporting |
报告 |
||
· Test Report |
· 测试报告 |
60 | 60 |
· Size Measurement |
· 计算工作量 |
20 | 10 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 10 |
合计 |
750 | 780 |
词频统计模块设计与实现
该模块由三个函数组成:
ArrayList<WordInfo> countFrequency(String filename)
功能:接受文本文件名,读取文本内容,进行词频统计,并将结果存入动态数组中返回。
public static ArrayList<WordInfo> countFrequency(String filename) {ArrayList<WordInfo> wordInfos=new ArrayList<>();Pattern pattern=Pattern.compile("[a-zA-Z]+-?[a-zA-Z]*"); //定义单词的正则表达式String text=Main.readFile(filename); //调用readFile()读取文本内容赋值给textif (text==null){return null;}Matcher matcher=pattern.matcher(text); //利用之前定义的单词正则表达式匹配text中的单词String word;int index;WordInfo wordInfo;while(matcher.find()) { //如果匹配到单词则进入循环处理word=matcher.group().toLowerCase(); //将匹配到的单词赋值给wordif (word.endsWith("-")) //如果匹配到“单词-”情况,则去除符号“-”word=word.substring(0,word.length()-1);if ((index=Main.hasWord(wordInfos,word))!=-1) { //如果动态数组wordInfos中已经有该单词,则将频数加一wordInfos.get(index).setFrequency(wordInfos.get(index).getFrequency()+1);}else{ //如果动态数组wordInfos中无该单词,则将该单词加入动态数组wordInfo=new WordInfo(word, 1);wordInfos.add(wordInfo);}}return wordInfos;}
原理:
Pattern类用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建,但可以通过Pattern.complie(String regex)简单工厂方法创建一个正则表达式,轮到Matcher类登场了,Pattern.matcher(CharSequence input)返回一个Matcher对象.
find()对字符串进行匹配,匹配到的字符串可以在任何位置. group()返回匹配到的子字符串
利用Pattern类创建定义单词的正则表达式,在本程序中即
Pattern pattern=Pattern.compile("[a-zA-Z]+-?[a-zA-Z]*");
调用readFile(String filename)读取文本文件内容,将文本赋值给字符串text,再用Pattern类产生Matcher类的实例,即
String text=Main.readFile(filename);
Matcher matcher=pattern.matcher(text);
matcher.find()对字符串进行匹配,若匹配到符合正则表达式的单词则返回true进入循环。
while(matcher.find()) { ......}
如果匹配的单词类型是“单词-”,则将单词中的“-”符号去掉。
if (word.endsWith("-")) word=word.substring(0,word.length()-1);
如果当前匹配到的单词,动态数组wordInfos中已经存在,则将该单词频数加一,否则将该单词加入动态数组。
if ((index=Main.hasWord(wordInfos,word))!=-1) { wordInfos.get(index).setFrequency(wordInfos.get(index).getFrequency()+1);}else{ wordInfo=new WordInfo(word, 1);wordInfos.add(wordInfo);}
int hasWord(ArrayList<WordInfo> wordInfos, String word)
功能:接受动态数组wordInfos和字符串word,判断word是否存在于wordInfos中,若存在则返回其具体位置,否则返回-1。
public static int hasWord(ArrayList<WordInfo> wordInfos, String word) { //判断word是否存在于动态数组wordInfos中,若存在则返回位置,负责返回-1for (WordInfo wordInfo:wordInfos){if (wordInfo.getWord().equals(word.trim().toLowerCase()))return wordInfos.indexOf(wordInfo);}return -1;}
原理:遍历动态数组,寻找word,若存在则返回其index,否则返回-1。
String readFile(String filename)
功能:接受文本文件名,读取该文本内容,并将其以字符串类型返回。
public static String readFile(String filename) { //读取filename文本文件File file=new File(filename);StringBuilder sb = new StringBuilder();try {FileReader reader = new FileReader(file);BufferedReader br = new BufferedReader(reader);String str;while ((str = br.readLine()) != null) { //逐行读取文件内容,不读取换行符和末尾的空格sb.append(str + "\n");}br.close();return sb.toString();}catch (IOException e){System.out.println("读取文件失败!");}return null;}
原理:逐行读取文件内容,不读取换行符和末尾的空格。将各行链接起来组成一个字符串。
测试用例的设计
保证设计的测试用例应至少覆盖函数中所有的可执行语句,同时主要针对特殊字符
、数字
、连字符
、大小写字母等
的出现设计测试用例。
单元测试结果
下图为单元测试截图,由图可知,该模块通过了所有测试用例,且时间很短,因此该模块测试质量还是很上乘的。
小组贡献
作为此次小组项目的组长,负责团队开发管理与GitHub项目的管理,并且承担了大部分的代码编辑工作。故给自己的小组贡献分为0.4。
经讨论组员评分情况如下:
组长:
陈佳文 0.40
组员:
屈佳烨:0.35
苑子尚:0.15
李仪凡:0.10
转载于:https://www.cnblogs.com/Guchen0910/p/8747189.html
软件质量与测试第4周小组作业:WordCount优化相关推荐
- 软件质量与测试 第4周小组作业
一.项目地址 https://github.com/changjiang666/WcPro 二.PSP 三.设计思路 我负责main函数的编写和print输出模块的编写. 1.main函数 int m ...
- 软件质量与测试第4周小组作业:WordCountPro
1.github地址 https://github.com/Hare-Lucius/WordCountPro 基本功能(分别以个人和小组形式提交至github) 2. ...
- 软件质量与测试--第六周作业 软件测试与评估
测试进度表 项目 n内容说明 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 10 15 · Estimate · 估计这个任务需要多少时间 10 15 Testing Desi ...
- 软件质量与测试--第二周作业 WordCount
软件质量与测试--第二周作业 WordCount Github地址: https://github.com/RicardoDZX/WordCount PSP: PSP2.1 PSP 阶段 预估耗时 ( ...
- HUST软测1504班第4周小组作业成绩:WordCount优化
说明 本次公布的成绩为第四周作业的结果: 第4周小组作业:WordCount优化 博客推荐:本次作业有一位同学完成有创意,推荐优秀博客.(优秀博客不会对成绩带来正面或者负面影响)PS:做任何创新的任务 ...
- HUST软测1504班第6周小组作业成绩
说明 本次公布的成绩为第6周小组作业的结果: 第6周小组作业:WordCount(详情见毕博平台) 如果同学对作业结果存在异议,可以: 在毕博平台讨论区的第6周作业第在线答疑区发帖申诉. 或直接在博客 ...
- 研讨会回顾 | 自动化测试“领导者”SmartBear解析软件质量与测试现状调研
2022年12月6日,龙智与软件测试自动化"领导者"SmartBear联合举办了主题为" 如何通过自动化测试实现降本.增效与提质"的在线研讨会. 会上,Smar ...
- 7软件质量与测试规范
软件质量与测试规范 前言 标准/规范 产品质量模型 总结 前言 标准和规范可以指导测试工作的方向. 标准/规范 软件质量与测试标准分为国际标准.国家标准.行业标准.企业(机构)规范.项目规范等.下一层 ...
- 2018年软件质量与测试大盘点
即将告别2018年.迎来2019年 无法开一个现场跨年演讲,那就来一个更经济.更有效的大盘点 如同去年:2017年软件质量和测试大盘点.本次盘点分为两大部分: 质量问题,看看过去一年发生了哪些大的质量 ...
最新文章
- 计算机书籍-前谷歌工程师撰写-机器学习实战
- 用Numpy搭建神经网络第二期:梯度下降法的实现
- Windows Live Writer 在win2003 的安装方法
- spring不自动下载_Spring:自动接线或不自动接线
- Dart编译技术在服务端的探索和应用
- 博客园添加鼠标粒子吸附特效
- 信息系统项目管理师历年试题分析与解答(android版)
- 赛尔号通信数据的逆向分析与还原(思路篇)
- MySQL的多表操作
- Vue_(基础)Vue中的事件
- linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令
- python爬取二次元肥宅最喜欢的壁纸图片,看过的都说爱了
- java计算机毕业设计个性化穿搭推荐系统MyBatis+系统+LW文档+源码+调试部署
- 用云渲染好还是自己搭建传统渲染农场好?
- 币乎作者@骄阳在天 | Conflux的崛起之路
- Android 接入Facebook实现第三方登陆教程(精简版)
- python PIL读取图像转换为灰度图及二值图像
- 散户怎么在市场中利用佳庆指标进行炒股
- [YOLO专题-9]:YOLO V5 - ultralytics/detect代码快速启动详解
- 菜鸟如何安装与配置mysql-8.0.15-winx64