一、GitHub地址

https://github.com/hoka-17/WC

二、PSP表格

PSP2.1 Personal
Software Process Stages
预估耗时(分钟) 实际耗时(分钟)
Planning 计划 60 120
· Estimate · 估计这个任务需要多少时间 60 120
Development 开发 1280 1500
· Analysis · 需求分析  40 30
· Design Spec · 生成设计文档 60 70
· Design
Review
· 设计复审  30 20
· Coding
Standard
· 代码规范 30 60
· Design · 具体设计 60 160
· Coding · 具体编码 600 650
· Code Review · 代码复审 100 150
· Test · 测试(自我测试,修改代码,提交修改) 360 360
Reporting 报告 190 170
· Test Report · 测试报告 120 120
· Size
Measurement
· 计算工作量 30 20
· Postmortem
& Process Improvement Plan
· 事后总结, 并提出过程改进计划 40 30
合计   1530 1790

三、解题思路描述

1、刚开始拿到题目后,如果是按照之前我开发项目的做法,就会直接打开pycharm进行编程。但是想到我做这个项目的初心是学习如何系统地
、科学地进行软件开发,于是在看完《构建之法》前三章后,先进行需求分析。

2、需求分析:首先看编程语言上没有限制,所以我选择了平时常用的Python。题目为实现一个统计程序来统计程序文件中的字符数、单
词数、行数、代码行、注释行。因为在之前做java课设时实现过类似功能,所以我很自然的想到可以通过正则表达式和通过Python自带的
read()函数、readline()函数结合进行计数。又因为它需要在命令行传入参数,而这方面我并没有怎么用过,于是到百度了相关库发现了
argparse库可以很方便的进行命令行参数的管理,于是我再去搜索了该库的API文档备用。还有一个功能是要求递归处理目录下符合条件
的文件,在这里我考虑了两种方法:一是通过检查文件名是否包含“*”和“?”,若有则进行直接在文件列表中搜索所有符合后缀名的
文件。二也是检测到包含“*”和“?”后,将传入的文件名构造为正则表达式去匹配文件。考虑到第一种方法虽然比较简单,但是并不
是很好的符合需求,故决定采用第二种方法。图形化界面要求能够选择文件,因为之前有编写过Python的gui,所以我也想到Python中pyq
t5库有相关函数可以调用。我将这些大概的思路记录下来,

3、通过以上分析, 我画出大概的程序运行流程图:

4、编程过程中,遇到如下影响深刻的问题:

(1). 在构建正则表达式进行统计多行注释行的过程,发现只有14行注释行的测试文件测试结果为69行,经过重新分析逻辑和与舍友进行讨
论,发现是因为使用的readline()函数,即漏考虑了多行注释行在一行的情况,经过修改测试无误。

(2). 在对一个包含中文的文件测试过程中发现在打开文件报错,查看后发现是文件编码问题,经过查阅资料有人建议将打开文件格式由u
tf-8改为ISO-8859-1,经过测试后发现没有报错。但却发现这样改后对于一个只有一个中文字符的文件进行测试,显示结果却是3个字符,
与舍友讨论后认为使用ISO-8859-1编码时一个中文字符会被认做三个码元,故会显示3个字符。这样与预期效果不符合,故只能重新想方法。
后又与舍友讨论后并测试发现是原来测试的文件不是用utf-8编码,故将测试文件转为utf-8编码成功运行无误。

四、设计实现过程

代码分为两个类,分别为功能类和界面类:

1. 功能类(WC):实现了对文件进行各项统计功能,包含以下主要函数:

CountFunc(实现统计字符数、单 词数、行数、代码行、注释行)
RecursionPro(实现通过通配符处理目录下符合条件的文件)
main(调用函数)

2.界面类(Gui):实现通过图形界面选取文件,包含以下主要函数:

choose_file(实现监听按钮被点击后获取选择的文件,实例化一个WC对象并传递参数,通过main函数调用运行并将传回的数据显示到文本框)

各函数关系图:

五、测试结果

1. 功能测试

测试文件说明: empty.c(空文件)、OneChar.c(一个字符的文件)、OneLine(一行的文件)、OneWord(一个单词的文件)、SourceFile(普通代码文件)

(1). 基本功能:

(2). 拓展功能

(3). 高级功能

六、项目总结

  1. 在进行项目编写时不能急于编写代码,而是应该多花时间再需求分析、代码架构上,只有先经过良好的设计,才能确保后面不会出现
    代码逻辑混乱甚至某些功能无法与原来代码耦合的情况。
  2. 《构建之法》使我感觉受益匪浅,但我发现只看这本书是远远不够的,因为它只是指明了设计时思考的大致方向,但在进行详细设计时
    我还是感觉非常困难,很多地方不知道如何进行设计。因此未来应再去参阅其他有关构建的书籍,以及多编写项目以实践这些构建知识。

个人项目WC(Python实现)的更多相关文章

  1. 移动端自动化测试Appium 从入门到项目实战Python版☝☝☝

    移动端自动化测试Appium 从入门到项目实战Python版 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌)  说到APP自动化测试,Appium可是说是非常流 ...

  2. 个人项目-wc

    个人项目-WC   (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...

  3. 移动端自动化测试appium 从入门到项目实战Python版✍✍✍

    移动端自动化测试appium 从入门到项目实战Python版 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程 ...

  4. 移动端自动化测试Appium 从入门到项目实战Python版

    移动端自动化测试Appium 从入门到项目实战Python版  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课 ...

  5. GitHub 上适合新手的开源项目(Python 篇)

    作者:HelloGitHub-卤蛋 随着 Python 语言的流行,越来越多的人加入到了 Python 的大家庭中.为什么这么多人学 Python ?我要喊出那句话了:"人生苦短,我用 Py ...

  6. Django-Multitenant,分布式多租户数据库项目实战(Python/Django+Postgres+Citus)

    Python/Django 支持分布式多租户数据库,如 Postgres+Citus. 通过将租户上下文添加到您的查询来实现轻松横向扩展,使数据库(例如 Citus)能够有效地将查询路由到正确的数据库 ...

  7. 个人项目wc(C语言)

    github地址:https://github.com/nilonger/mycangku 一.项目要求 1.wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写一个 ...

  8. 从开源项目看 Python 单元测试

    我觉得以前在我开发程序的时候,除了文档,可能单元测试是另外一个让我希望别人都写,但是自己又一点都不想写的东西.但是,随着开发程序的增多,以及自己对 Bug 的修改的增多,我发现,UT 在很大程度上是对 ...

  9. 从开源项目看python代码注释

    最近看了不少代码,也写了不少代码,所以在看和写之间发现了很多的问题,真的是很多,至少从我的认识来看,有几个地方有很大的改进空间,这里不准备把所有的问题都列举出来,所以就先挑选一个比较明显得来和大家聊聊 ...

随机推荐

  1. Android Studio的下载、安装与配置

    1 下载 下载地址:http://www.android-studio.org/index.php ☟这里下载的是3.1.2版本 2 安装与配置 2.1 初步安装 默认就可以,点击红框内按钮依次进行安 ...

  2. Cassandra开发入门文档第一部分

    Cassandra的特点 横向可扩展性: Cassandra部署具有几乎无限的存储和处理数据的能力.当需要额外的容量时,可以简单地将更多的机器添加到集群中.当新机器加入集群时,Cassandra需要对 ...

  3. numtodsinterval 函数用法

    numtodsinterval(<x>,<c>) ,x是一个数字,c是一个字符串,表明x的单位,这个函数把x转为interval day to second数据类型 常用的单位 ...

  4. Python - Django - form 组件动态从数据库取 choices 数据

    app01/models.py: from django.db import models class UserInfo(models.Model): username = models.CharFi ...

  5. 【Docker学习之二】Docker部署安装

    环境 docker-ce-19.03.1-3.el7.x86_64 一.Docker的部署安装 Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3 ...

  6. Python unittest(PyUnit)单元测试框架

    PyUnit(unittest) 是 Python 自带的单元测试框架,用于编写和运行可重复的测试.PyUnit 是 xUnit 体系的一个成员,xUnit 是众多测试框架的总称,PyUnit 主要用 ...

  7. Apache Kafka® is a distributed streaming platform

    Kafka Connect简介 我们知道过去对于Kafka的定义是分布式,分区化的,带备份机制的日志提交服务.也就是一个分布式的消息队列,这也是他最常见的用法.但是Kafka不止于此,打开最新的官网. ...

  8. Android MVP模式简单介绍:以一个登陆流程为例

    老的项目用的MVC的模式,最近完成了全部重构成MVP模式的工作,虽然比较麻烦,好处是代码逻辑更加清楚.简洁,流程更加清晰,对于后续版本迭代维护都挺方便.对于一些想要学习MVP模式的同学来讲,百度搜出来 ...

  9. 【ztree】隐藏显示节点

    //显示隐藏的节点 var nodes = zTreeObj.getNodesByParam("isHidden", true); zTreeObj.showNodes(nodes ...

  10. 使用 Java 移除字符串中的前导零

    给定一串数字,从中删除前导零. public class Test { public static void main(String[] args) { String str = "0000 ...