一、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. JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码

    JavaWeb问题记录——在Windows上启动Tomcat后命令行窗口乱码 摘要:本文主要记录了在Windows上启动Tomcat后,命令行窗口出现乱码的问题及解决办法. 问题重现 在Windows ...

  2. vuejs的v-for遇到过的数据渲染错误的bug,原因是和key值有关

      <div v-for="(item,i) in doc" :key="i"> <el-row> <el-col :span=& ...

  3. 微信小程序拒绝授权后重新拉起授权窗口

    问题: 在首次进入小程序时,我们常常会收到一些获取权限的申请,比如「获取地理位置权限」.需要微信登录时请求「获得你的公开信息(昵称.头像等)」.对于这些权限申请,开发者当然希望获得所有权限,而用户拒绝 ...

  4. 【bzoj4945】[Noi2017]游戏(搜索+2-sat)

    bzoj 洛谷 题意: 现在有\(a,b,c\)三种车,每个赛道可能会存在限制:\(a\)表示不能选择\(a\)类型的赛车,\(b,c\)同理:\(x\)表示该赛道不受限制,但\(x\)类型的个数$\ ...

  5. JavaScript实现点击复制按钮复制文本框的内容,兼容IOS

    <lable> <input type="text" id="txt"> <a href="javascript:;&q ...

  6. Java Web 学习(2) —— JSP

    JSP 一. 什么是 JSP JSP 和 Servlet Servlet 有两个缺点是无法克服的:首先,写在 Servlet 中的所有 HTML 标签必须包含 Java 字符串,这使得处理HTTP响应 ...

  7. SpringCloud单元测试【六】

    SpringCloud的单元测试主要是依靠 Mock以及Mockito, 所以我们需要对Mock以及Mockito有一定的认识. 一.为什么要用MockMvc 可能我们在测试控制层的代码都是启动服务器 ...

  8. [学习笔记] Manacher与PAM

    \(1\) Manacher 挺短,背是挺好背的 Manacher用于求回文串长度.思想大概就是: 1.加入字符集之外的识别字符(比如#)分隔开原来相邻的字母,这样所有的回文串都变成了以某个字符为中心 ...

  9. 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 10

    23.5.4  客户端访问API 按RESTful规范开发API,又有详细的帮助文档,客户端的应用就相对容易一些.下面,以PHP作为访问接口的客户端,演示API的应用.在PHP中请求接口需要使用CUR ...

  10. 一、Mybatis配置详解

    Mybatis配置详解 XML配置文件层次结构 下图展示了mybatis-config.xml的全部配置元素 properties元素 properties是一个配置属性的元素,让我们能在配置文件的上 ...