软工作业(二):个人项目-wc.exe(Python实现)

Github地址


 https://github.com/zhengjinhuai/wc.exe

 

项目要求


  1. wc.exe是一个 常见的工具,它能够统计文本文件的字符数、单词数和行数。本次项目要求写一个命令行程序,模仿已有的wc.exe的功能,并加以扩充,同时使用GUI进行可视化
  2. 具体功能要求:
    • 程序处理用户需求的模式为:wc.exe [parameter] [file_name]
  3. 基本功能:
    • wc.exe -c file.c     //返回文件 file.c 的字符数
    • wc.exe -w file.c    //返回文件 file.c 的词的数目
    • wc.exe -l file.c      //返回文件 file.c 的行数
  4. 扩展功能:
    • -s   递归处理目录下符合条件的文件
    • -a   返回更复杂的数据(代码行 / 空行 / 注释行)
  5. 高级功能:
    •  -x 参数。这个参数单独使用。如果命令行有这个参数,则程序会显示图形界面,用户可以通过界面选取单个文件,程序就会显示文件的字符数、行数等全部统计信息。
    • 需求举例:wc.exe -s -a *.c

 

PSP表格:


 

PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟)
Planning 计划 20 18
· Estimate · 估计这个任务需要多少时间 20 18
Development 开发 770 850
· Analysis · 需求分析  60 70
· Design Spec · 生成设计文档 50 50
· Design Review · 设计复审  30 40
· Coding Standard · 代码规范 20 20
· Design · 具体设计 90 90
· Coding · 具体编码 310 350
· Code Review · 代码复审 100 110
· Test · 测试(自我测试,修改代码,提交修改) 120 110
Reporting 报告 140 125
· Test Report · 测试报告 60 50
· Size Measurement · 计算工作量 30 20
· Postmortem & Process Improvement Plan · 事后总结, 并提出过程改进计划 50 55
Total  总计 940 983

 

解题思路


  看到题目要求写一个命令行程序,马上想到平常经常使用的argparse命令参数解析模块,因此也决定使用python来完成这个项目

  1. 命令行的参数解析使用argparse模块,通过add_argument()函数设置参数,选项-c、-w、-l、-s、-a、-x设置为可选参数,文件的绝对路径设置为位置参数
  2. 字符数、单词数、总行数等处理文本信息的过程使用readline()函数、str.strip()方法、str.split()方法等配合使用,同时,考虑边界信息
  3. 由于使用通配符递归处理目录下符合条件的文件相对麻烦,同时,通配符有多种组合,因此使用glob模块配合处理,以确保程序经得起测试
  4. 空行和代码行相对容易处理,先筛选空行和注释行,其余的为代码行。
    • 注释行的处理主要分为四种情况:“单个注释符号”、“多行注释符号”、“多行注释符号在同一行”和“多行注释的开始行和结束行”(具体可看代码注释)
    • 由于考虑不同编程语言的注释符号不一样,因此可以选择设置一个CONF配置文件来存放不同语言的注释符号,对应处理不同的编程语言
  5. 图形界面使用的PyQt5。由于现在python的图形界面开发更多地选择PyQt5,因此也选择这个,用法和其他语言相差无几
  6. 单元测试使用unittest模块进行测试
  7. 代码覆盖率使用coverage命令行工具进行测试 
  8. 效能分析使用cProfile模块进行测试

设计实现过程


 软工作业(二):个人项目-wc.exe(Python实现)_第1张图片 

项目测试


 

  1.   终端测试
    • 软工作业(二):个人项目-wc.exe(Python实现)_第2张图片
  2.  测试单个文件的字符数、单词数、行数、注释行、空行、代码行数
    • 软工作业(二):个人项目-wc.exe(Python实现)_第3张图片
  3. 测试递归查询 
    • 软工作业(二):个人项目-wc.exe(Python实现)_第4张图片 
  4. 递归查询并处理
    • 软工作业(二):个人项目-wc.exe(Python实现)_第5张图片

  5. gui
    • 软工作业(二):个人项目-wc.exe(Python实现)_第6张图片
    • 软工作业(二):个人项目-wc.exe(Python实现)_第7张图片
  6. 单元测试:
    • 软工作业(二):个人项目-wc.exe(Python实现)_第8张图片
  7. 代码覆盖率
    • 终端显示:
      • 软工作业(二):个人项目-wc.exe(Python实现)_第9张图片
    • HTML显示:通过html页面显示很容易发现由于版本的变化而产生的错误代码,帮助我们更好的优化代码
      • 软工作业(二):个人项目-wc.exe(Python实现)_第10张图片
  8. 效能分析:根据文件运行时间排序,可以发现模块的加载占用的时间最为多。输入指令进行测试:python -m cProfile -s cumulative wc_cmd.py -c -a -w -l test_filename
    • 软工作业(二):个人项目-wc.exe(Python实现)_第11张图片

       

       

 

项目总结


   本次项目主要使用python作为开发语言,使用了coverage命令行工具进行代码覆盖率分析。通过这次项目主要熟悉了个人软件开发流程,掌握软件开发的基本思想。虽然项目完成了,但是更重要的是后期的总结反思。

你可能感兴趣的:(软工作业(二):个人项目-wc.exe(Python实现))