一、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)的更多相关文章

  1. 软工作业(JAVA)

    github传送门:https://github.com/hhg52516/WC.git 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个命令行程序 ...

  2. 软工作业1—java实现wc.exe

    github项目地址 https://github.com/liyizhu/wc.exe WC 项目要求 基本功能列表: wc.exe -c file.c     //返回文件 file.c 的字符数 ...

  3. 软工团队 - UML设计

    软工团队 - UML设计 分工 对于分工我们没有不是按"自己负责部分的核心模块做练习"(每个人对每个图的某一模块来依次做完四个UML)的原因,是在于画这些图并不是都能彻底分成各个& ...

  4. [2018福大至诚软工助教]UML设计小结

    [2018福大至诚软工助教]UML设计小结 一.得分 总分(50分) 团队信息 (4分) 队名 (1分) 团队成员的学号与姓名(需要标注队长)(1分) 本次作业的博客链接(1分) 三者完全,4分 团队 ...

  5. 2018软工项目UML设计(团队)

    团队信息 队名:火箭少男100 本次作业课上成员 短学号 名 本次作业博客链接 2507 俞辛(临时队长) https://www.cnblogs.com/multhree/p/9821080.htm ...

  6. 软工之 NABCD 模型分析及 Web of Paper 原型设计结对作业

    目录 写在前面 NABCD 模型 N -- Need,需求 A -- Approach,方法 B -- Benefits,好处 C -- Compettors,竞争 优势 劣势 D -- Delive ...

  7. 软工之词频统计器及基于sketch在大数据下的词频统计设计

    目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...

  8. 软工实践原型设计——PaperRepositories

    软工实践原型设计--PaperRepositories 写在前面 本次作业链接 队友(031602237吴杰婷)博客链接 pdf文件地址 原型设计地址(加载有点慢...) 结对成员:031602237 ...

  9. 关于软工项目beta版本

    项目总结 项目成员: 黄丰润 031302307 王旭銮 031302320 张家俊 031302329 张晓燕 031302343 项目完成度:实现了专业信息填写.查看,教师信息填写,报课和查看课表 ...

随机推荐

  1. jq初始,选择器,事件,内容操作,样式操作

    jq操作页面文档http://jquery.cuishifeng.cn/ jq初始 <!DOCTYPE html> <html> <head> <meta c ...

  2. C++ 深入浅出工厂模式(进阶篇)

    介绍 前文初始篇C++ 深入浅出工厂模式(初始篇),主要阐述了简单工厂模式.工厂方法模式和抽象工厂模式的结构.特点和缺陷等.以上三种方式,在新增产品时,要么修改工厂类,要么需新增具体的工厂类,说明工厂 ...

  3. gor实现线上HTTP流量复制压测引流

    一.使用背景 gor 是一款go语言实现的简单的http流量复制工具,它的主要目的是使你的生产环境HTTP真实流量在测试环境和预发布环境重现.只需要在 代理例如nginx入口服务器上执行一个进程,就可 ...

  4. 微信小程序跳转传参参数丢失?

    垂死病中惊坐起,笑问 Bug 何处来?! 1.先是大写字母作祟 前两天发布了「柒留言」v2.0.0 新版本,结果...你懂的嘛,没有 Bug 的程序不是好程序,写不出 Bug 的程序员不是好程序员. ...

  5. Impala基于内存的SQL引擎的详细介绍

    一.简介 1.概述 Impala是Cloudera公司推出,提供对HDFS.Hbase数据的高性能.低延迟的交互式SQL查询功能. •基于Hive使用内存计算,兼顾数据仓库.具有实时.批处理.多并发等 ...

  6. Linux-3.14.12内存管理笔记【伙伴管理算法(1)】

    前面分析了memblock算法.内核页表的建立.内存管理框架的构建,这些都是x86处理的setup_arch()函数里面初始化的,因地制宜,具有明显处理器的特征.而start_kernel()接下来的 ...

  7. windows下配置ngnix服务器经常出现503问题解决办法

    自己网站在windows server2008下安装的ngnix,然后配置php,网站访问流量并不大,但是经常出现503问题.经过查看ngnix服务器错误日志,发现: (10061: No conne ...

  8. 【转】【好文章】更愉快的写css

    我在写CSS的时候经常会碰到些麻烦事儿: 1)看上去蛮简单的排版却写了很久 2)代码写的越来越散,总是这里补一句,那里补一句,没有条理性 3)margin.padding.font-size等属性在不 ...

  9. TensorFlow中实现RNN,彻底弄懂time_step

    这篇博客不是一篇讲解原理的博客,这篇博客主要讲解tnesorlfow的RNN代码结构,通过代码来学习RNN,以及讲解time_steps,如果这篇博客没有让你明白time_steps,欢迎博客下面评论 ...

  10. mysql和oracle分页

    mysql分页 关键字limit,limit m,n 其中m表示起始位置的下标,下标从0开始.n表示要显示的条数,比如要查询一个表的第2到5条数据. ,; oracle分页 关键字rownum, ro ...