软工个人设计(Java)
一、GitHub的网络地址:https://github.com/qiannai/WC.git
二、PSP图表:
|
PSP2.1 |
Personal Software Process Stages |
预估耗时(分钟) |
实际耗时(分钟) |
|
·Planning |
·计划 |
30 |
20 |
|
· Estimate |
· 估计这个任务需要多少时间 |
30 |
10 |
|
·Development |
·开发 |
1440 |
760 |
|
· Analysis |
· 需求分析 |
60 |
80 |
|
· Design Spec |
· 生成设计文档 |
30 |
20 |
|
· Design Review |
· 设计复审 |
20 |
20 |
|
· Coding Standard |
· 代码规范 |
70 |
110 |
|
· Design |
· 具体设计 |
40 |
20 |
|
· Coding |
· 具体编码 |
750 |
700 |
|
· Code Review |
· 代码复审 |
20 |
18 |
|
· Test |
· 测试(自我测试,修改代码,提交修改) |
200 |
300 |
|
·Reporting |
·报告 |
100 |
140 |
|
· Test Report |
· 测试报告 |
60 |
50 |
|
· Size Measurement |
· 计算工作量 |
20 |
18 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 |
50 |
|
合计 |
2910 |
2316 |
三、解题思路:
1.总体思路:对题目进行需求分析与方法设计,该题目主要是由5个功能组成的[-c|-l|-w|-a|-s|-x],个人想法是建立类在类中对每一个功能进行实现。最后通过WC的主类对所有的功能进行集成。而且对于难度实现进行分块,所以一期实现[-c|-l|-w]三个功能,因为功能的操作具有一定的相似性;二期逐步实现[-a][-s]功能;其次实现[-w]功能。在功能实现的同时对该功能进行功能测试,保证功能的准确性,在后期调用的过程中保证返回的数据是正确的。减少查找错误位置跟错误返工的时间。
2.对于-c,-l,-w三个功能,即是处理文档路径输入后,读取文件,对文件的字符数行数单词数计数。通过readLine()方法读取文件每一行计算行数。对整个文档去除掉空格跟换行符则可以读出文档字符数。对于单词,对于连续一段字母组成则判断为一个单词,对文档用非字母进行分割,利用正则表达式则可以判断是否是连续一段字母,可以判断是否是单词,并对其计数。
3.对于-a功能则是利用正则表达式对读取的一行做出判断,在判断/**/组成的注释块时添加标记flag,当读出是/*做出标记,遇到*/时标记结束,在这段标记过程中,注释行加1。
4.对于-s功能,则是将判断是否是有输入-s分开,只实现对文档的递归。在这里又建立了一个类判断后缀名是否一致,一致则对文档输出否则不输出。文档的接口为 文件类型的递归文件夹、String类型的含通配符的绝对路径,还有对输入的[-c|-l|-w|-a]的Boolean值。对文件路径调用listFiles()方法遍历文件,如果路径存在且符合则运行否则判断是否是文件夹,对文件夹进行递归调用。运行结果为输出为该通配符下的符合文件的[-c|-l|-w|-a]选择的方法。
5.对于-x功能,则建立一个类用于可视化。主要是可以选择文件,也是扩展了一下,-x功能可以对文件的[-c|-l|-w|-a]进行选择,也不是全部输出。而且-x对-s有覆盖功能,只要出现-x则-s功能不可用。在可视化类Visual中,添加一个文本框用于输出结果,一个按钮调用JFileChooser调用GUI界面,并保存选择文件的路径,对路径下的文件输出选择的结果到文本框中。
6.对所有的功能集成到WC类中,需要有一个方法对用户输入进行判断用户的输入格式,通过正则表达式判断格式,并将输入切割出来,将功能选择的切割出来,通过构造isChoose()方法判断用户选择了什么功能,将路径切割出来用path保存。用if……else if语句对-x和-s方法分类。-x则调用Visual类,-s则判断是否路径输入是通配符格式还是非通配符格式。其余的输入则分为一类判断并调用相对应的方法。
四、设计与实现:
主类先对[-x][-s]判断,[-s]对输入的路径的多重判断,再调用CharCounter和LineCounter类返回各个结果。

五、测试:
1、输入wc.exe输出功能介绍

2、建立测试文档

3、手工一个测试空文件、一个字符文件、一个单词文件、一行数据文件、一个任意源文件

4、使用-s对输入绝对路径处理,并且与通配符比较结果

4、通配符与对行数计数,对整个盘符递归查询

5、使用-x实现基本的Windows GUI 程序操作,支持通过图形界面选取文件,支持通过图形界面展现文件的信息



在是否是单一测试还是递归测试下结果都是一样的。
六、总结:
一开始觉得按照模块化的开发方式可以比较好,因为将每个功能分开来,对每一个功能都可以建立一个main函数对该功能进行测试,不过最后的时候,在将所有功能集成到主函数上的时候就出现了非常混乱的情况,主要是对于模块化对接口与返回没有做好规范,结果导致调用得多了出现了很混乱的情况。所以后面在做代码优化的时候也是耗费了很多时间,不过每个功能一开始就做大量的测试,所以集成在一起的时候去考虑最后结果的正确性所花费的时间比较少,不用花费很多时间去判断结果的正确性。但是这次作业中因为代码比较不规范造成了很多的时间上的浪费,可见还要学习的东西还有很多。
软工个人设计(Java)的更多相关文章
- 软工作业(JAVA)
github传送门:https://github.com/hhg52516/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序 ...
- 软工作业1—java实现wc.exe
github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c //返回文件 file.c 的字符数 ...
- 软工团队 - UML设计
软工团队 - UML设计 分工 对于分工我们没有不是按"自己负责部分的核心模块做练习"(每个人对每个图的某一模块来依次做完四个UML)的原因,是在于画这些图并不是都能彻底分成各个& ...
- [2018福大至诚软工助教]UML设计小结
[2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队 ...
- 2018软工项目UML设计(团队)
团队信息 队名:火箭少男100 本次作业课上成员 短学号 名 本次作业博客链接 2507 俞辛(临时队长) https://www.cnblogs.com/multhree/p/9821080.htm ...
- 软工之 NABCD 模型分析及 Web of Paper 原型设计结对作业
目录 写在前面 NABCD 模型 N -- Need,需求 A -- Approach,方法 B -- Benefits,好处 C -- Compettors,竞争 优势 劣势 D -- Delive ...
- 软工之词频统计器及基于sketch在大数据下的词频统计设计
目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...
- 软工实践原型设计——PaperRepositories
软工实践原型设计--PaperRepositories 写在前面 本次作业链接 队友(031602237吴杰婷)博客链接 pdf文件地址 原型设计地址(加载有点慢...) 结对成员:031602237 ...
- 关于软工项目beta版本
项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...
随机推荐
- 操作系统篇之Linux命令操作和redis安装以及基本使用
电脑操作系统 : windows7,8,10,xp,win98 操作系统 : linux ax unix 以后开发项目是部署在服务器上,服务器一般采用linux. linux的优点:系统稳定,操作速度 ...
- Ling to sql 多表查询,多个条件进行关联
使用多表查询进行关联时,提示 join子句中其中一个表达式的类型不正确,注意字段类型和名称要一致,否则join时提示语法错误,错误截图如下 var incomeDetails = from a in ...
- OpenCV:图像的裁剪
import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) plt.axis('off') plt.sh ...
- 通过存储过程(SP)实现SQL Server链接服务器(LinkServer)的添加
1. 背景 当系统的微服务化做的不是很高的时候,部分功能要通过DB LinkServer 来实现跨 Server 查询,当然,有时候BI抽数据.DBA数据库维护可能也会创建LinkServer. 特别 ...
- 解决brew update很慢
一般遇到这种问题,就跟墙有关啦,需要更换源. 用清华的源就非常好,去清华镜像的官网看一下说明,https://mirrors.tuna.tsinghua.edu.cn/help/homebrew/ $ ...
- Ubuntu18.04初始化
Ubuntu18.04初始化 更新源: sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo gedit /etc/apt/sour ...
- Java总结转载,持续更新。。。
1.Java中内存划分 https://www.cnblogs.com/yanglongbo/p/10981680.html
- 201871010116-祁英红《面向对象程序设计(java)》第十一周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- LG1345 「USACO5.4」Telecowmunication 最小割
问题描述 LG1345 题解 点边转化,最小割,完事. \(\mathrm{Code}\) #include<bits/stdc++.h> using namespace std; tem ...
- Java并发编程:Java中的锁和线程同步机制
锁的基础知识 锁的类型 锁从宏观上分类,只分为两种:悲观锁与乐观锁. 乐观锁 乐观锁是一种乐观思想,即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新 ...