一,GitHub地址:https://github.com/lq15086495788/wc
二,psp表格
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
Planning |
计划 |
40 | 52 |
· Estimate |
· 估计这个任务需要多少时间 |
40 | 52 |
Development |
开发 |
710 | 550 |
· Analysis |
· 需求分析 (包括学习新技术) |
110 | 130 |
· Design Spec |
· 生成设计文档 |
70 | 40 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
30 | 20 |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
30 | 40 |
· Design |
· 具体设计 |
110 | 50 |
· Coding |
· 具体编码 |
220 | 180 |
· Code Review |
· 代码复审 |
40 | 30 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
100 | 60 |
Reporting |
报告 |
100 | 80 |
· Test Report |
· 测试报告 |
40 | 40 |
· Size Measurement |
· 计算工作量 |
30 | 30 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
20 | 30 |
合计 |
840 | 740 |
三,设计大概思路
设计三个类,分别为main,counte和coder。
一,main
在这个类中主要实现程序控制和方法调用,io流实现文件的录入。
二,counter
这个类用来实现基础的四个统计操作,其中
字符数:除了空格和转行符都是字符,进行记录
行数;凡是遇到转行符就计数
词数:空格就记录
最后统一用一个操作-all将所有基本的统计都显示。
三,code类
把扩展操作,统计空行,注释行和代码行等扩展操作在这个类中实现。
并确定是否为空文件等不符合标准的文件
注释匹配器(匹配单行、多行、文档注释)
空白行匹配器(匹配回车、tab键、空格)
遍历文件并记录相应注释行和空白行的数,
除空白行和注释行外,其余皆为代码行
四,设计程序流程
五,测试运行。
测试文件包括:一个空文件、一个只有一个单词的文件、一个java源代码文件
5.1测试一般情况对一个完整的文件的统计
测试结果正确。
5.2测试一个空文件的统计
测试结果正确。
5.3测试无效文件
测试结果正确
5.4测试只含有一个单词的文件
测试结果正确
5.5测试扩展操作
测试结果正确
六,开发过程遇到的问题
#选择实现语言的困难:
自己当初看到这个作业的时候,需要实现一个命令行程序,当时就十分纠结到底要用什么语言去实现。因为脚本语言和超文本语言都无法实现这样的功能,所以必须要另作打算。
编程语言不熟悉的困难:
由于太久没要写java,在编程的过程当中需要边查边写逻辑,导致写得有点慢。
功能实现的困难:
开始编写读取文件的时候,选择的buffer读取文件流功能,发现由于个人的问题,导致程序结果不理想。后来选择使用read()函数来进行对文件的读取操作,通过二进制流来操作。这样对于基础的判断行数、单词书、字符数功能,比buffer要实现得稍微简单一点。
#做过的尝试:
最初,选择使用pathon来实现这个功能程序,后来选择的是c语言,但是后来又觉得习惯了面向对象编程,就想起来了大二学习的一门选修java,所以最终选择了 java 这门语言实现。
解决:
最后,简单地实现了基础功能以及一个拓展功能。
有所收获:
在遇到困难的时候,一定要经过自己的思考之后,再去了解是如何实现的。这样才能够更好地理解和实现这个功能。多点尝试不同的方法效果更好。
七,项目小结
通过这次作业,重新回顾了一下Java的知识,同时也学会了从0到1实现一个程序,从预估、设计、编码、开发、测试、文档等流程中锻炼自己。
第一锻炼了养成做电子笔记的习惯,第二也有了写博客的概念,同时也增强了自己代码能力外的其他学习能力。