一、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. Dynamics 365 CE Update消息PostOperation阶段Image的尝试

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  2. iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?

    题目: 假设我们有一个ViewController, Category A(ViewController), Category B(ViewController), Category C(ViewCo ...

  3. Oracle 11gR2 RAC网络配置,更改public ip、vip和scanip

    Oracle 11gR2 RAC网络配置,更改public ip.vip和scanip 转载黑裤子 发布于2018-10-30 01:08:02 阅读数 2898  收藏 展开 转载. https:/ ...

  4. Codeforces Round #588 (Div. 2)

    传送门 A. Dawid and Bags of Candies 乱搞. Code #include <bits/stdc++.h> #define MP make_pair #defin ...

  5. OSPF和ACL的应用

    1.创建拓扑图 2.配置基本网络 3.配置OSPF (1)在R1上配置 (2)在R2上配置 (3)在R3上配置 (4)在IT上配置 4.配置ACL (1)在R3上配置    (2)在R2上配置 (3) ...

  6. 重装windows后如何恢复mysql服务

    如果重装系统后之前的mysql还在的话,可又直接恢复,不需要安装: 注意my.ini文件的位置,应该与bin目录同级: 进入cmd,然后进入你的mysql的bin目录,输入命令:mysqld inst ...

  7. subprocess模块(了解)

    目录 一.subprocess模块 一.subprocess模块 subprocess模块允许你去创建一个新的进程让其执行另外的程序,并与它进行通信,获取标准的输入.标准输出.标准错误以及返回码等.更 ...

  8. vs2010,vs2013,vs2015,vs2017, vs2019激活秘钥

    vs2010============================================== YCFHQ9DWCYDKV88T2TMHG7BHP vs2013=============== ...

  9. 图片(jpg,png,tif等)批量转dicom(dcm)格式

    简介 医学领域专用工具,千金难求,可以批量把jpg.png.bmp.tif图片转换为dicom(dcm)格式,并且保持原有顺序,同时支持嵌入部分重要的dicom元数据,比如:病人姓名,病人生日等. 将 ...

  10. vscode源码分析【二】程序的启动逻辑,第一个窗口是如何创建的

    上一篇文章:https://www.cnblogs.com/liulun/ (小广告:我做的开源免费的,个人知识管理及自媒体营销工具“想学吗”:https://github.com/xland/xia ...