一、github地址:https://github.com/Jasminejiamei/homework-wc
二、PSP
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 40 | 30 |
· Estimate | · 估计这个任务需要多少时间 | 30 | 25 |
Development | 开发 | 790 | 710 |
· Analysis | · 需求分析 | 20 | 20 |
· Design Spec | · 生成设计文档 | 40 | 30 |
· Design Review | · 设计复审 | 30 | 30 |
· Coding Standard | · 代码规范 | 30 | 40 |
· Design | · 具体设计 | 80 | 60 |
· Coding | · 具体编码(学习新技术) | 470 | 370 |
· Code Review | · 代码复审 | 60 | 50 |
· Test | · 测试(自我测试,修改代码,提交修改) | 60 | 60 |
Reporting | 报告 | 120 | 120 |
· Test Report | · 测试报告 | 60 | 60 |
· Size Measurement | · 计算工作量 | 30 | 30 |
· Postmortem & Process Improvement Plan | · 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 950 | 860 |
三、解题思路
刚开始看到题目,以为一定要用c语言或者java才可以实现一个.exe的工具,后来认真看才知道是模仿实现它的功能以及扩充即可,不限定语言。我比较熟的编程语言是JavaScript,但是浏览器中的JavaScript是没有文件操作的能力的, 而Node中的JavaScript具有文件处理系统的,对于读取文件这样的操作是很简便的,于是我决定用node.js,开发环境为:Visual Studio Code。
1. 如何用node去读取文件,如何读取用户在终端输入的命令行,其中统计的逻辑相对比较容易实现,于是通过学习node.js的fs文件系统,以及`process.argv` (获取命令行指令操作)的相关内容,找到了解决的思路。
2. 在node的包装工具npm的使用中,package.json文件是用于定义整个包的属性的,在测试的时候发现命令行自定义不了,在了解了其相关配置之后,添加了一个新的配置, {"bin":{"homework":"./index.js"}},正是因为缺少了这个配置,导致homework命令词无法被识别。
3. 对于用户输入-s命令呢,如果输入的信息不规范怎么办?
如果是对于-s命令输入不规范,则会返回相关能正确输入的信息给用户,例如:
如果命令是系统本来不是自定义的,则不作处理,返回“没有该指令”;
4. 处理一个文件的信息统计容易实现,如何递归处理一个文件夹的内容呢,开始想得很复杂,但其实最终解决的方法很简单,做个是否为文件夹的判断之后,如果为文件夹,直接调用fileDisplay()递归即可。
5. 用node的语法不是十分熟悉,在完成高级功能的时候,不知道通过什么方式去打开一个界面,想到的第一种方案是写一个前端的界面,用node的搭建一个小型的后台,写接口,前端请求数据,后台返回即可,最后也是用这种方案实现的。
四、设计实现过程
1.项目基本功能与拓展功能的系统流程图
2.图形界面
用node写出了一个简单的http服务器,再写一个html文件请求数据即可,用homeworkWc -x filename 运行即可自动打开一个html图形界面
五、测试
测试的文件内容:
file.txt
test.doc
测试基础指令:
1. homeworkWc -l filename
2. homeworkWc -w filename
3.homeworkWc -c filename
拓展要求指令:
1. homeworkWc -s -l/-w/-c file
错误输入时:
正确输入时:
2. homeworkWc -a filename
测试高级功能的指令:
打开页面:
点击按钮后:
六、总结
在做此项目的过程中我熟悉了一门我想深入学习的语言,并且用这门语言完成了这个作业要求的功能,以后还要多尝试。同时从软件开发的角度来看,在这个项目的练习中体验了软件的需求分析,设计,开发和测试等过程,同时也更能体会一个产品可能他要实现的功能并不难,但是在开发的角度却要考虑很多。在实现这个项目的过程中遇到bug的时候有点心浮气躁,希望能够改掉这个不好的习惯,冷静分析问题,用更好的方案解决问题。