python开发的程序需要uml图吗_基于pyqt5的Demo软件开发

一、功能

从软件界面上打开一个txt文件,后台提取内容,显示在界面上。通过这个Demo软件,可以练习软件开发的基本流程。不进行异常的设计,仅设计按照正常流程走的程序。

二、环境OS:win10

UML: starUML

Language: python 3.7.4 (use venv)

Graphics Lab: pyqt5

shell: windows terminal

editor: VS Code

注:这并不是一个基础的语法、规则等教程,需要具备一定的 python, uml, qt, git, vs code, shell 基础。

三、内容使用UML设计软件架构,不同的层之间通过标准化的接口调用,不同的程序员开发不同的层。

模拟多开发者协作,使用git进行多分支的开发。

软件的打包,分布到PyPI,生成exe包供终端用户使用。

四、代码仓库

Talk is cheap, show my code here:AndyYang/testDemo​gitee.com

由于github在国内不稳定,所以使用gitee进行控制。

五、程序开发流程

六、软件UML架构

1、用例图

2、类图

3、流程图

4、时序图

starUML暂时还没搞定这个图功能,先空着。

七、编码

1、分析

由六中的UML中的类图可看出,整个软件可化为三层:最左边的TestDemo主要完成功能是实例化一个app,因为后期软件还要进行打包、发布,所以可以将这部件看作一个层,命名为:实例层;中间的Ui_MainWindow和MainWindow可看作一层,主要完成界面的设计。界面的设计又可进一步细分为界面设计(美工的范围)和界面背后的逻辑设计,命名为界面控制层;最后面的Process主要完成对数据的处理,命名为数据处理层。层层之间通过标准的接口实现,下层为上层提供相应的类,函数和返回值。

2、人员化分

依据上面的分析,模拟出三个开发人员,其职责如下:Dev:管理员,控制各开发人员工作之间的协作及代码merge。

Dev1: 完成实例层设计,主要是利用下层提供的类及相关信息,实例化一个类,最后使用setuptools完成程序的打包、发布等功能。

Dev2: 完成界面控制层的设计,其实还可以进一步细分为两个开发者,考虑到Demo程序简化操作,使用一个开发者完成本层。

Dev3: 完成数据处理层的设计,为上层提供相关类及返回值。

3、版本控制

控制工具使用git,远程服务器使用gitee,主要为了练习多分支的开发,建立多分支结构如下:master:主要完成release版本的释放,稳定分支。

Dev: 主要的开发分支,用于各开发人员的分支与本分支的merge,不稳定的分支。当到某个时间节点需要release时,检查无错误后向master分支push。

Dev1: Dev1平常工作使用的分支。

Dev2: Dev2平常工作使用的分支。

Dev3: Dev3平常工作使用的分支。

在gitee上建立远程仓库,建立README.md及相关文件,提供仓库地址给开发者。

Git的基本知识,远程仓库的操作等自行搜索解决。

4、开发者起始通用流程

在本地某个文件夹中clone远程仓库并进入(注意:一定要进入clone下来的文件夹)。这时,使用 git branch -a 可以看到此时的所有分支。如果在其它已经存在多分支的项目中,想克隆其它分支,可参考引用1的内容。

5、开发者的python环境搭建流程

为什么要使用python虚拟环境?详细解释见引用3。使用python虚拟环境的前提是已经安装好了python。本文使用python 3.7.4版本,3.7.3版本的虚拟环境创建时会出现一个bug。具体创建使用方法,见引用3.

6、项目开发结构设计

这是一个非常重要的话题,因为最终开发的软件要分发给终端用户使用。为了未来软件打包及避免git merge失败,所以必须先进行每个开发者文件夹的分配。从顶层对文件的代码进行控制,建立开发文件夹结构如下所示:

注:开发者个人文件夹dev, dev1, dev2, dev3 应使用一个跟自身编码内容相关的名字取代,例如使用 gui 代替 dev2。

部分文件作用声明:setup.py: 打包所需要的配置文件,必须存在。

setup.cfg: A setup.py file containing a setup() function call is still required even if your configuration resides in setup.cfg。Setuptools allows configuration files(usually setup.cfg) to define a package's metadata and other options that are normally supplied to the setup() function. only metadata-relate keys from metadata section ae supported(except for description-file); keys from files, entry_points and backwards_compatare not supported. setup.cfg仅支持与metadata相关的keys.个人理解是setup.cfg也定义了包的一些配置文件,不能取代setup.py。经过搜索有的观点认为 setup.cfg 提供 Python 分发的所有元数据并生成配置。但是见过有的项目中 setup.cfg 的内容与官方文档上面的完全不同。本项目暂时不使用此文件。

MANIFEST.in: 当在setup.py中设置key:include_package_data为true时,accept all data files and directories matched by http://MAINIFEST.in。个人理解是此文件中定义了一些包需要的数据文件的正则表达式,当相应key设置是真是,包括进去。

pylint.cfg: pylint是最常用的python代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准和有潜在问题的代码。

venv:python虚拟环境文件夹,不纳入git控制范围

7、Dev流程实施开发者起始通用流程。

建立本地Dev分支。git checkout -b Dev 可以创建Dev分支,并切换到Dev分支。

根据项目开发结构,建立dev文件夹并进入,创建自己的文件。这里建立一个dev.txt来测试一下。

git add -A & git commite -m "xxx"。添加文件到本地仓库并提交。

推送远程仓库。git push origin Dev. 详细解释见引用2,不要加option: -u。

检验。这时在远程仓库中切换不同的分支观察,不同的分支里包含的内容不同。

git branch -a 可以看到所有的分支及追踪情况。

python 虚拟环境的创建。 cd ./Dev/testDemo/ ; python3 -m venv venv/ ; venv/ 可任意取名。cd ./venv/Scripts/ ; 使用 VS Code不用激活环境( ./activate),其会自动识别出虚拟环境,如果不成功,自行搜索解决。

使用 VS Code 打开 testDome 项目,在git控制中发现并没有增加新文件,这是因为在使用 gitee 创建远程仓库时,我个人增加了一些初始化文件,如 .gitigrore, README.md, LICENSE 等文件。其中 .gitignore 里面的内容指定了 git 不进行版本控制的文件,自动包含了 .env venv/ 等内容。如果在创建远程仓库时并没有这么做,那么这个文件需要自己写。建议使用自动化的 .gitigore 文件,因为自己写的话,后续还有python运行时的字节码文件也需要自己写,浪费时间。

8、Dev{1、2、3}流程

同Dev流程类似,创建自己的分支和工作文件夹,这样可以避免工作的交叉及未来 Merge 时可能产生的潜在冲突。注意,克隆的分支应该是Dev分支(此时Dev分支已经将项目结构文件设定好了),参考引用1.

9、程序中使用的部分模块功能解释sys.excepthook: 进行全局异常的获取,详细见引用6

10、Dev1,2,3工作

Dev1,2,3开发者使用指令:git pull origin DevX; X=1,2,3依次进行,完成之后分别 git push origin DevX; X=1,2,3。 通知Dev工作完成

11、Dev工作当Dev1,2,3,开发人员工作完成后,Dev将Dev1,2,3的分支分别与Dev分支合并,解决冲突。

对整体代码进行测试。当代码出现问题时,将问题反馈给Dev1,2,3进行迭代修改。

代码正确无误后,提交Dev分支,通知master,进行版本的release

12、软件释放

项目经理将master与Dev分支进行合并,代码版本释放结束。

八、总结

1、利用 pyreverse & Graphviz % pygraphviz 可以生成软件包的相关依赖关系和类UML图,使用起来非常方便。此处不再演示。在本Demo程序的开发中,可以看到最终的代码的结构虽然仍是是三层,但是内部细节已经进行了修改。由于时间关系,不再进行修改,就此说明。

2、利用 pyuic5 -o x.py x.ui 生成的x.py程序中,若引用了外部的resource_rc.py时,自动生成的代码会有一行: import resource_rc 。在实际使用中会发生错误,需要修改为 from . import resource_rc。

3、如果开发的程序比较大,一定要按照流程走。如果不先将软件的整体架构给设计清楚,不然会发现写着写已经不知道程序是如何来回跳跃了。后续在code的过程中一定会对最原始的架构进行一定的调整,软件的层数一般改动比较小,改动最大的应该就是层与层之间的接口了。接口应该是最重要的设计部分。

4、测试成功界面

九、引用

特此声明:我在知乎上的所有文章、言论、见解等只代表我个人的观念,与任何研究机构、商业公司等无关。所有文章仅供个人学习交流之用,侧耳倾听任何与文章相关的评论。在文章开头会注明相关引用内容,所引用内容版权归原作者所有,在此一并表示感谢。若未注明之处,由此可能造成的侵权影响请联系本人进行删除或者修改。若个别读者不遵守此声明进行转载,并因此产生商业行为,并造成对文章内引用内容的侵权行为与本人无关。如果文章能对个人学习、工作带来一些思路,那么文章的目的已经达到。如果引用文章相关内容,请注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值