软工网络16个人作业2

1.地址

2.PSP表格

PSP2.1 个人开发流程 预估耗费时间(分钟) 实际耗费时间(分钟)
Planning 计划 45 55
· Estimate 明确需求和其他相关因素,估计每个阶段的时间成本 45 55
Development 开发 365 515
· Analysis 需求分析 (包括学习新技术) 30 60
· Design Spec 生成设计文档 30 25
· Design Review 设计复审 25 20
· Coding Standard 代码规范 10 15
· Design 具体设计 20 30
· Coding 具体编码 150 210
· Code Review 代码复审 20 25
· Test 测试(自我测试,修改代码,提交修改) 30 45
Reporting 报告 50 85
· 测试报告 20 35
· 计算工作量 10 20
· 并提出过程改进计划 20 30

3.解题思路

  1. 审查题目,得知是要统计文件中字符、单词信息等,因此本题在编写代码时先要建立与文件的连接,因此初步设计一个FileRead类,编写方法读取文件内容,并先将数据存储起来(这里我将读取的数据存入了ArrayList中并返回),再交给另外一个类的功能来处理数据。
  2. 由于任务是通过前台传参文件名,在对处理文件的类中设计一个参数来记录文件名(路径)。
  3. 要求是对字符、非空白行数、单词总数、以及前10个出现次数最高的单词进行统计。思考后,发现单词需要根据是否符合条件(4个英文字母开头,跟上字母数字符号,单词以分隔符分割,不区分大小写)进行筛选,行数、字符数则不需要做过多的其他工作,因此将字符数统计以及行数统计直接交给了FileRead处理,Main中则直接调用其方法获得结果。单词方面,则暂不做处理,以多种不同分隔符分割出内容后,一概先存储到动态数组中,再另行判断是否为单词
  4. 在Main中先调用FileRead的方法,获得存储文件内容数据的ArrayList,再根据要求对该动态数组的数据进行筛选,符合条件的存入Map映射中,不符合的则抛弃,在存入Map时,设计Map键值对类型为<String,Integer>,使单词与出现次数相对应,遍历动态数组,使用toLowerCase()方法全部转为小写,当检测到相同单词时,对次数加1,否则新存入一个单词赋次数值为1。
  5. 全部符合条件的值存入Map中后,根据出现次数降序排序,在不同单词数大于10时,输出前10个键值对,否则输出所有内容,即为输出频率最高的前10个单词。

4.设计实现过程

  1. 在类设计上,一共设计了两个类,FileRead类和主类Main。
  2. FileRead类设计了两个方法,一个是FileRead(fileRoad)方法,实现的功能是读取文件单词数据,并存入动态数组ArrayList;另一个方法是charsLinesCount(fileRoad)方法,统计文件字符数和行数信息,两方法均为有参函数,传入文件名(路径)。
  3. Main类中则提供主函数入口,并调用了FileRead相应的方法获取数据。

5.代码说明

  1. FileRead类的FileRead()方法
    软工网络16个人作业2
    这部分代码主要是将文件内容读取出来,并利用正则表达式给定的字符进行单词分割,并存入动态数组。
  2. FileRead类的charsLinesCount()方法
    软工网络16个人作业2
    这部分代码是统计文件中的字符总数以及非空白行数。
  3. Main()方法
    软工网络16个人作业2
    软工网络16个人作业2
    这部分代码调用FileRead类的相关方法获得数据,并进行处理排序最后输出。

6.测试结果及覆盖率

软工网络16个人作业2
软工网络16个人作业2

7.心得收获

  • 本次实验总体上难度适中,但是可能是因为太久没有使用Java语言进行编程,显得有些生疏,对于起方法名、变量名等都暴露出了不少的问题。再加上前期规划较少,编程起来就显得有些混乱。Mian()里面似乎也放置了过多的不必要的代码块,显得极为冗余,背负了太多不属于它的代码。后期可能会这对命名以及代码放置的位置进行调整,把功能都分别装起来,减轻Main()的负担。
  • 收获方面,这一次收获比较大的是第一次接触到PSP表格,了解到了对于工程,是需要有具体的规划设计以及时间评估的,以便于后期能够更高效地完成工程。但因为是第一次接触,所以实际上似乎并没有起到多大的效果,后期会继续加强。
  • 知识点方面,收获比较大的是利用正则表达式,指定多个分隔符来划分文件内容,另外就是第一次代码作业,让我意识到了Java编程方面的能力还是太弱了,需要加强练习了。