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优化相关推荐

  1. 软件质量与测试 第4周小组作业

    一.项目地址 https://github.com/changjiang666/WcPro 二.PSP 三.设计思路 我负责main函数的编写和print输出模块的编写. 1.main函数 int m ...

  2. 软件质量与测试第4周小组作业:WordCountPro

    1.github地址 https://github.com/Hare-Lucius/WordCountPro 基本功能(分别以个人和小组形式提交至github) 2.                  ...

  3. 软件质量与测试--第六周作业 软件测试与评估

    测试进度表 项目 n内容说明 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划  10 15  · Estimate · 估计这个任务需要多少时间  10 15 Testing Desi ...

  4. 软件质量与测试--第二周作业 WordCount

    软件质量与测试--第二周作业 WordCount Github地址: https://github.com/RicardoDZX/WordCount PSP: PSP2.1 PSP 阶段 预估耗时 ( ...

  5. HUST软测1504班第4周小组作业成绩:WordCount优化

    说明 本次公布的成绩为第四周作业的结果: 第4周小组作业:WordCount优化 博客推荐:本次作业有一位同学完成有创意,推荐优秀博客.(优秀博客不会对成绩带来正面或者负面影响)PS:做任何创新的任务 ...

  6. HUST软测1504班第6周小组作业成绩

    说明 本次公布的成绩为第6周小组作业的结果: 第6周小组作业:WordCount(详情见毕博平台) 如果同学对作业结果存在异议,可以: 在毕博平台讨论区的第6周作业第在线答疑区发帖申诉. 或直接在博客 ...

  7. 研讨会回顾 | 自动化测试“领导者”SmartBear解析软件质量与测试现状调研

    2022年12月6日,龙智与软件测试自动化"领导者"SmartBear联合举办了主题为" 如何通过自动化测试实现降本.增效与提质"的在线研讨会. 会上,Smar ...

  8. 7软件质量与测试规范

    软件质量与测试规范 前言 标准/规范 产品质量模型 总结 前言 标准和规范可以指导测试工作的方向. 标准/规范 软件质量与测试标准分为国际标准.国家标准.行业标准.企业(机构)规范.项目规范等.下一层 ...

  9. 2018年软件质量与测试大盘点

    即将告别2018年.迎来2019年 无法开一个现场跨年演讲,那就来一个更经济.更有效的大盘点 如同去年:2017年软件质量和测试大盘点.本次盘点分为两大部分: 质量问题,看看过去一年发生了哪些大的质量 ...

最新文章

  1. 计算机书籍-前谷歌工程师撰写-机器学习实战
  2. 用Numpy搭建神经网络第二期:梯度下降法的实现
  3. Windows Live Writer 在win2003 的安装方法
  4. spring不自动下载_Spring:自动接线或不自动接线
  5. Dart编译技术在服务端的探索和应用
  6. 博客园添加鼠标粒子吸附特效
  7. 信息系统项目管理师历年试题分析与解答(android版)
  8. 赛尔号通信数据的逆向分析与还原(思路篇)
  9. MySQL的多表操作
  10. Vue_(基础)Vue中的事件
  11. linux 桌面显示 kvm,Linux的桌面虚拟化技术KVM(五)——virsh常用命令
  12. python爬取二次元肥宅最喜欢的壁纸图片,看过的都说爱了
  13. java计算机毕业设计个性化穿搭推荐系统MyBatis+系统+LW文档+源码+调试部署
  14. 用云渲染好还是自己搭建传统渲染农场好?
  15. 币乎作者@骄阳在天 | Conflux的崛起之路
  16. Android 接入Facebook实现第三方登陆教程(精简版)
  17. python PIL读取图像转换为灰度图及二值图像
  18. 散户怎么在市场中利用佳庆指标进行炒股
  19. [YOLO专题-9]:YOLO V5 - ultralytics/detect代码快速启动详解
  20. 菜鸟如何安装与配置mysql-8.0.15-winx64

热门文章

  1. Windows API Monitor
  2. .NET中的托管资源与非托管资源
  3. 永中云预览与个人自建web实现在线3D预览对比方案介绍
  4. Myeclipse 突然打不开的问题
  5. 用c语言实现图片曝光值,几何C渲染图曝光 设计与科技的完美结合
  6. AVERAGE和averageif函数
  7. Linux必须学内容
  8. C++中 struct tm 和 time_t 时间和日期的使用方法
  9. Oracle为什么收购SUN公司浅谈
  10. 候选区域(Region proposals )