二、软工个人项目:文本信息统计器

本软件的代码:https://github.com/amekao/SE_work1

界面:



一、需求分析阶段:

需求分析:

总需求:需要用户在cmd运行程序,根据所输入的参数提供对应的计算模式

基本功能: -c -w -l 显示字符数,词数,行数

拓展功能:-a 显示具体行数, -s 可以递归遍历指定目录下的文件

高级功能: -x 弹出界面让用户选择要统计的文本,显示所有的信息



二、设计阶段:

考虑到python语言对文本操作提供了较好的接口,而且文件编码也比较丰富,因此决定使用python来完成这次项目,但是要另外付出学习python的时间成本
对任务进行时间划分:

子任务 预期时间(h) 实际时间(h)
初期学习python 6h 7h
程序框架搭建 2h 1.5h
实现-c 1h 0.2h
实现-w 1h 1.5h
实现-l 1h 0.2h
实现-a 1.5h 0.5h
实现-s 2h 2h
支持通配符 1.5h 2h
实现-x 1h 1h
联结各模块 1h 2h
后续新功能设计 2h 4h
总用时 20h 21.9h

各种功能的设计思路:

1. cmd获取参数的功能:使用OS模块定义的argv函数以列表的形式获得用户在缓冲区输入的数据,使用标志位记录用户输入了什么参数,从而实现参数复合使用的要求

2. -c和-l功能:len对应列表的条目数

3. -w功能:通配符分割各单词存入列表,len列表

4. -a功能:逐行判断是什么类型的行

5. 递归遍历目录的功能:使用os库提供的接口列出当前目录下的文件和文件夹,如果是文件夹则继续递归进行遍历,文件则判断是否为对应文件类型,若是,则存到一个表里

6. 使用通配符的功能:使用fnmatch的接口

7. -x弹出文件选择对话框:使用win32ui提供的接口,获取用户选择的文件的路径



三、软件开发阶段:

在真正输入代码时,才会发现各种各样新的问题,发现新的设计会更好,最终程序调用关系如下图

后续新增的更多功能:

1. 增加-b显示详细字数:在测试len(open_file.read())时发现显示的字符数一直不对,后来才发现是把换行符也算了进去,不过这不符合正常人的习惯,而且做一个字符判断的模块也不难,所以可以把换行符个数也显示出来,让用户自己决定要不要把换行符加入字符数中

2. 一开始程序是限制argv长度的,即同一时间只支持用一个参数和一个文件路径,但是交给同学帮忙测试时他吐槽参数的地方限制太多。后来重新分析程序发现-c -w -l -a -b模块其实都互不影响的,所以就更改成argv中出现这个字段就把对应的标志位设置为True的方法,这样五个普通参数就都可以同时使用,一次就可以把五种功能都测试出来,大大加快了测试效率。

3. 在设计-s模式时发现fnmatch库(用以通配符匹配)的功能强大,因此在非-s模式也加入了这个功能,即使用户想输入“自制数组.c”但不小心输入了“数组.c”也能寻找到

输入:

输出:

4. python的read函数除了.c文件以外,也可以打开其他一些文本文件格式,比如.py和.java等,所以本软件也支持这类文件的统计

设计心得:

1. 本次实验是自己第一次用python写程序,c语言很多功能要自己写,而且对文本编码支持不好,而java中类的概念本人也不是很熟悉,总对类里面定义的函数感到迷惘,所以使用python编程,花了一两天来看python相关教程就上手了,不得不感叹python真是好用啊。

2. 本次设计最难实现的模块是递归遍历目录的函数,据说可以使用os.walk函数来遍历,不过网上关于os.walk函数的说明实在晦涩难懂,什么返回三元列表的实在超出我的常识范围,而且知道是树形结构,自己写一个遍历也不是很难,不过也花了不少时间才测试成功

3. 另外一个难题就是将代码组装起来,一开始识别argv的main函数很弱智,就是[0]号元素是wc.exe,[1]号元素则是各种参数,[2]号元素是文件路径,不过这样就实现不了wc.exe -s -a file.c的功能了,而且测试模块又要一个一个改参数输命令很烦,于是花了一点时间让其支持多参数

4. 写代码永远都是越写发现越想修改得更好一点,毕竟也是自己的亲生儿子,发现辛辛苦苦写的遍历函数稍作修改后可以复用而且会让体验更好,又花了一点时间将“文件”分为“文件路径”和“文件名字”,这样就可以让通配符更灵活,支持相对路径和绝对路径,而且文件类型也可以修改,一箭三雕



四、测试阶段:

测试均是手工完成,大多数都是边写程序边测试,所幸本程序中使用到分支语句的地方不多,就在判断argv参数时需要用到,且大多数参数都是并列关系,所以并没有使用多层if else语句嵌套,而且支持多参数输入,所以一条指令就可以测试到大多数分支

后来也学习到了pytest的使用方法,写出了测试各个count模块的代码:

1 def test_wc():
2     test_path = "自制数组.c"
3     op = open(test_path, "r", encoding=‘UTF-8‘)
4     assert char_count(op) == 551
5     assert complex_char_count(op) == (9, 327, 49, 45, 25, 96)
6     assert line_count(op) == 46
7     assert complex_line_count(op) == (4, 10, 32)
8     assert word_count(op) == 61

目前已知的bug:

1. 权限问题:遇到不可访问的文件(如系统文件)时可能会出错

2. 编码格式问题:本软件应该支持UTF-8和GBK的编码,不过极少数情况下无法打开,会出现UnicodeEncodeError

3. 个人能力有限,C语言/**/方式的注释花样繁多,把所有情况都统计出来一定会让代码中充斥许多if else语句,让代码十分杂乱,所以/*类注释行无法统计

4. 截取单词是用通配符匹配一串英文字母的方式,无法判断出该字母串有否实际意义,比如说“adsadasds”这样的字母串就会判定为词语

原文地址:https://www.cnblogs.com/amekao/p/11582212.html

时间: 2024-10-08 03:00:31

二、软工个人项目:文本信息统计器的相关文章

软工2019_MucMuc项目个人总结

MucMuc项目个人总结 1.相关链接 原型界面设计链接 UML设计链接 github项目链接 2.项目个人分工 项目总体的部分设计 后端项目总体构建, 代码实现, 以及测试 阿里云后端服务器的配置和项目部署 3.开发过程 开始 在项目最初的阶段, 整个组对于要做怎样的工作并没有清晰的想法. 不知道如何开始工作, 从何做起, 开发工具为何, 是面临的最大难题. 因为没有任何有对于web开发有经验的成员. 从前后端开发工具的选择上, 到前后端通信的具体流程, 都没有一个较好的认知. 这也直接导致了

软工团队项目个人总结

经过了一个学期的软工课程学习,以及长期的团队开发,收获有下. 用户:创新就是极致的用户体验.在开发我们的这款游戏的开始阶段,我们与校内很多同学交流了一下他们对这款游戏的看法,并与他们在线下对游戏进行试玩,然后他们也对我们提出了很多意见,包括有些时候觉得我们某些地方设置的太傻了,随机性太大,博弈性不够等问题.而且有时候交流还会出现一些问题,但总的来说,我们还是从中挖掘了很多可以改进的点,分析了用户的需要,改进了挺多地方的规则的.然后,秉承着从软工课程上学到的,能让用户少点一下,绝不多点一下的类似的

软工个人项目WC(Python实现)

一.github地址:https://github.com/1371272989/WC.exe 实现功能: 1.-c:统计字符数: 2.-w:统计单词数: 3.-l:统计行数: 4.-a:统计复杂数据(空行.代码行和注释行): 5.-s:递归处理目录下符合条件的文件: 通配符没有全面,只能辨别后缀. 6.-x:通过图形界面选择文件: 可以通过图形界面选择文件,但输出还是在cmd上显示. 二.PSP PSP Personal Software Process Stages 预估耗时(分钟) 实际耗

2017BUAA软工个人项目之数独

1.项目GitHub地址:https://github.com/ZiJiaW/Soduko (由于一开始把sudoku看成了soduko,于是名字建错了,读起来可能有点奇怪-) 2.项目PSP表格如下: PSP2.1 Personal Software Process Stages 预估耗时 实际耗时 Planning 计划 0.5h 0.5h .Estimate .估计这个任务需要多少时间 0.5h 0.5h Development 开发 20.5h 21.5 .Analysis .需求分析(

软工个人项目——地铁最短路径分析

一.开发环境 IDEA(java) 二.需求分析 设计简单UI界面(Java Swing) 用户可以自行选择起点.终点的地铁线路和对应的站点 用户选择后后台返回一个或多个方案 三.设计思路 启动程序读取地铁站点和线路信息文件"subway.txt",并将站点和线路信息储存在有向图中 根据用户的选择输入起点终点等参数 UI界面提供地铁线路.起始站点和目的站点的选择 通过最短路径算法求解最优的出行线路(采用Dijkstra算法或Floyd算法),将结果输出到一个txt文件 测试优化 四.项

软工个人项目(Java实现)

一. Github地址: https://github.com/RuiBingo/PersonalWork 二.个人PSP表格: PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 60 20 · Estimate · 估计这个任务需要多少时间 60 20 Development 开发 1200  1080 · Analysis · 需求分析  120  100 · Design Spec · 生成设计文档  30  30 · Design Review · 设

三、软工结对项目:四则运算生成器

一. 1. github项目地址: https://github.com/amekao/SE_work2 2. 界面示例: 生成模式 批改模式 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 · Estimate · 估计这个任务需要多少时间 1200 1200 Development 开发 · Analysis · 需求分析 (包括学习新技术) 180 200 · Design Spec

BIT软工个人项目-数独

GitHub项目地址: https://github.com/FounDerSquare/SE-sudoku 一.任务 实现一个能够生成数独终局并且能求解数独问题的控制台程序. 提交的代码要求经过代码质量分析工具的分析并消除所有的警告. 对项目的首个版本使用性能分析工具找出性能瓶颈并改进. 及时维护仓库与博客. 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 30 l  Estimat

软工实践项目课程的自我目标

对实践项目完成后学习到的能力的预期 组长说,攻坚安卓方向,那就希望首先懂得安卓这门语言吧 然后就是了解安卓应用的开发过程吧 对项目课程的期望 但愿难度不要太大,虽然越难越锻炼人,但我还是不希望难 有一定的补救机会就更好了 对项目的愿景规划 不懂,好好学习,天天向上!