个人项目-WC.exe (Java实现)
一、Github项目地址:https://github.com/blanche789/wordCount/tree/master/src/main/java/com/blanche
二、PSP表格
|
PSP2.1 |
任务内容 |
计划完成需要的时间(min) |
实际完成需要的时间(min) |
|
Planning |
计划 |
45 |
40 |
|
Estimate |
估计这个任务需要多少时间,并规划大致工作步骤 |
45 |
40 |
|
Development |
开发 |
880 |
940 |
|
Analysis |
需求分析 (包括学习新技术) |
60 |
90 |
|
Design Spec |
生成设计文档 |
30 |
- |
|
Design Review |
设计复审 (和同事审核设计文档) |
10 |
- |
|
Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
40 |
40 |
|
Design |
具体设计 |
60 |
80 |
|
Coding |
具体编码 |
400 |
500 |
|
Code Review |
代码复审 |
30 |
30 |
|
est |
测试(自我测试,修改代码,提交修改) |
250 |
200 |
|
Reporting |
报告 |
450 |
450 |
|
Test Report |
测试报告 |
360 |
370 |
|
Size Measurement |
计算工作量 |
30 |
- |
|
Postmortem & Process Improvement Plan |
事后总结 ,并提出过程改进计划 |
60 |
80 |
|
Summary |
合计 |
1375 |
1430 |
三、解题思路描述
1、陌生的开发需求:在刚拿到这个题目的时候,总体来说是比较抽象的;因为在以往的开发中,都是以图形界面作为主要交互方式的,但是此次是要以命令行的控制指令进行交互,所以整个开发流程的架构就需要有所改变。在以往,都是先写出图像界面,然后再对相应的界面交互做出相应;而此次面对命令开发的话,需要以main函数为中心,当传入命令时,调用相应的逻辑进行操作
2、架构设计:本项目我还是采用传统的MVC开发模式来进行开发的,只不过此次的view为辅,以main函数为主;本次项目分了大概三层,main函数为一层(代码的入口)、view作为一层(满足-s需求)、service为一层(各种需求逻辑的处理)。其中以service层为主,进行逻辑处理
3、提供接口:由于本次的需求有六个(六条指令),其中有涉及到输出统计结果的有四个需求。因此,我在service层下设计了四个service的实现类(implement),主要来解决四个指令的需求。由于四个实现类的方法都相同,因此我设计了一个接口。采用了Java中多态的思想,方便通过调用接口来调用四个实现类的方法,避免代码的冗余
4、正则表达式的复习:当我看到需求中有代码行、注释行、空行时,我明白肯定需要有正则表达式来对相应的读取到的字符串进行匹配与判断,所以需要学习正则表达式的知识。其次需要判断Java有关String的API中有哪些方法时通过正则表达式来匹配字符串的
5、枚举:由于有多条指令,若一条条指令都需要去判断调用那个实体类,将会增加时间复杂度。所以我先通过枚举存放八条指令,而后通过Map来绑定指令和相应的service,在处理逻辑的时候,通过key-value的方式就可以通过相应的指令来获取相应的service的实体类,减少了遍历
6、文件判断:由于用户输入文件时可能是目录也可能是文件,所以在进行判断时是比较复杂的,需要根据不同的输入来进行不同的处理,除此之外,还要额外考虑是否需要递归,这几层逻辑加起来难度就上升了,在这里需要对用户输入的文件名进行解析,从而来进行文件的操作
四、设计实现过程
1、流程图:

2、流程图解析:当运行程序时,用户输入相应的指令(例:-c [fileName]),从而调用main函数,main首先会判断是否需要调用图形界面和是否需要进行递归,方便后续进行不同的操作。然后会根据文件名判断当前文件是否可读;若可读,则调用read函数,传递文件和指令进入这个函数,然后根据指令调用相对于的service对文件进行读操作,从而来对其进行相应的WordCount;若不可读,则会通过正则表达式判断文件名是否含有通配符,若符合条件,则获取其所在的目录,若可递归,则进行递归操作,若不可递归,则对该目录下的所有文件进行WordCount;
3、类的目录结构

4、测试
4.1测试文件

4.2测试结果

4.3代码覆盖率

4.4代码覆盖率细节

5、图形界面

四、总结
本次的个人项目虽然是一个小型的练手项目,但是于我而言,它不仅仅是一个从0到1的过程
在0到1的这个过程中,我融入了软件工程的思想,严格按照PSP表来对整个项目进行规划、架构,于我而言,这个过程是有些繁琐与陌生的,与以往一拿到需求就开发的过程是截然不同的,在这个过程中,我更加明白了前期进行规划的重要性,规划看似在浪费时间,但其实好的规划会让我们的开发达到事半功倍的结果
除此之外,我在此次开发中,多次运用到测试代码,这减少了我在开发过程中处理异常的时间;每当我书写好一个函数或者遇到瓶颈的时候,我就会通过测试代码,来进行测试,从而解决自己的问题,我认为培养在开发中注重测试实例的能力是非常有效的
其次是代码覆盖率,本次的代码覆盖率在类和方法上覆盖率基本达到了要求。但是在代码line的覆盖率上还是比较小,基于原因,还是因为加入了太多的判断条件,导致在测试的时候,不符合条件的代码未被调用,这也提示我在今后的开发过程中,尽量减少条件的判断来实现自己的需求,提高代码的覆盖率。

个人项目-WC.exe (Java实现)的更多相关文章
- WC.exe(Java实现)
一.GitHub项目地址:https://github.com/nullcjm/mypage 二.项目相关要求: wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写 ...
- 个人项目 wc.exe
GitHub地址:https://github.com/oAiuo/wordCount 一.题目描述 Word Count1. 实现一个简单而完整的软件工具(源程序特征统计程序).2. 进行单元测试. ...
- 个人项目WC.exe Node.js+electron实现
前言 实现语言:Javascript 编译工具:webstorm GitHub:https://github.com/NPjuan/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本 ...
- 软工个人项目———WC.exe(Java实现)
一.github地址 https://github.com/hhw-15521301615/hello-world 二.PSP表格 PSP2.1 Personal Software Process S ...
- 软工个人项目 ——wc.exe
1.GitHub项目地址 https://github.com/k8kiw/WordCount 2.PSP预计时间 PSP2.1 Personal Software Process Stages 预估 ...
- 个人项目-WC(Java实现)
一.Github项目地址: https://github.com/kestrelcjx/-WC-Java- 二.PSP表格 PSP2.1 Personal Software Process Stage ...
- 个人项目wc(Java)
个人项目(Java) 一丶Github地址:https://github.com/SAH2019/S ...
- 软工作业1:wc.exe项目开发(java)
Github地址:https://github.com/Zzhaomin/learngit 项目相关要求 : wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...
- 个人项目(WC.exe)(java)(基于图形界面)
一.Github项目地址:https://github.com/Leungdc/ENhomework 二.PSP: PSP2.1 Personal Software Process Stages 预估 ...
随机推荐
- Evaluation Warning : The document was created with Spire.PDF for .NET.
由于使用 Spire.Pdf 生成的书签带有 Evaluation Warning : The document was created with Spire.PDF for .NET. 字样 但是 ...
- Implement Property Value Validation in Code 在代码中实现属性值验证(XPO)
This lesson explains how to set rules for business classes and their properties. These rules are val ...
- OpenCV:图像的颜色空间转换
导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) ...
- jmeter测试并发
由于生产出现个并发问题,本地没法重现.后来网上有人说使用jmeter可以测试并发,也有人说postman可以测试.但本着试试新鲜的东西,就用jmeter. 到apache上面下载. 下载加压,然后运行 ...
- SQL注入:POST注入
POST注入简介 POST注入属于注入的一种,相信大家在之前的课程中都知道POST\GET两种传参方式. POST注入就是使用POST进行传参的注入,本质上和GET类型的没什么区别. POST注入高危 ...
- Django—使用后台管理Models
后台的配置 1.创建后台管理员 [root@localhost study_django]# python manage.py createsuperuser [root@localhost stud ...
- Kali设置1920x1080分辨率
root@kali:~# xrandr --newmode -hsync +vsync root@kali:~# xrandr --addmode Virtual1 1920x1080 root@ka ...
- JS模仿腾讯图片新闻
仿照腾讯图片新闻的幻灯,功能并不完全一样.最开始打算做这个的时候,突然觉得好像做不来.想想如果一步一步,一个功能一个功能的做应该能搞定. 我做这个例子的思路是这样的: 先把需要的html和css代码写 ...
- Web自动化测试Selenium 学习笔记(一)
1.Web自动化测试简介自动化基础:自动化用例编写.Selenium优势及原理.自动化环境搭建Selenium基础:常见8大元素定位(表格).常见元素处理.下拉框元素处理.不同窗口切换.元素进阶.元素 ...
- transaction事务案例--银行转账
1)dao层 package cn.spring.transaction.dao; public interface MoneyDao { //加钱的方法 void addMoney(double m ...