跳转到主要内容

根据各种经验“质量”因素计算Python包的“优良性”指数

项目描述

摘要

Cheesecake项目的想法是根据各种经验“质量”因素对Python包进行排名,例如

  • 是否可以通过包名从PyPI下载该包

  • 是否可以解压包

  • 是否可以将其安装到其他目录中

  • 存在某些文件,如README、INSTALL、LICENSE、setup.py等

  • 带有文档字符串的模块/函数/类/方法的百分比

  • pylint得分

  • ……等等

目前,Cheesecake指数是通过各种方法(下面详细介绍)计算得到的单个包的指数。Cheesecake项目的一个目标是在上传时自动计算PyPI芝士店(Cheese Shop)上所有包的Cheesecake指数,并维护一个包含各种指数统计数据的网页集合。

Cheesecake目前计算3种类型的指数

  • 可安装性指数

  • 文档指数

  • 代码质量指数

每种指数类型的计算算法将在下面详细介绍。

为什么选择Cheesecake?

“质量”这一概念起源于Perl社区。这里有一段相关引用

  • 看起来像质量,听起来像质量,但并不是真正的质量。

“质量”是对特定代码体优良性的经验性度量。它定义了质量指标并沿着这些指标衡量代码。它目前被CPANTS测试服务用于评估CPAN包的“优良性”。

由于Python包仓库(又称PyPI)托管在Cheese Shop,因此,一个PyPI包的质量指标应该被称为Cheesecake指数!

使用示例

要计算给定项目的Cheesecake指数,请在命令行中运行cheesecake_index脚本,并指定

在任何情况下,cheesecake脚本都将尝试下载包(如果需要),然后在沙盒目录(默认为/tmp/cheesecake_sandbox)中解包。如果其中任一操作失败,则包的Cheesecake指数为0。如果包可以成功解包,则cheesecake脚本将计算文件末尾给出的算法中详细描述的各种指数的值。

如果包可以成功下载和解包,将在系统/tmp目录中创建一个日志文件,文件名为<package>.log(例如,twill-0.7.4.tar.gz的日志文件为/tmp/twill-0.7.4.tar.gz.log)。计算Cheesecake指数后,将自动删除日志文件,除非发生错误。

命令行示例

  1. 使用setuptools工具从PyPI下载Durus包,计算其Cheesecake指数

    python cheesecake_index --name=Durus
  2. 通过指定其URL来计算Durus包的Cheesecake指数

    python cheesecake_index --url=http://www.mems-exchange.org/software/durus/Durus-3.1.tar.gz
  3. 通过指定其本地文件系统中的路径来计算twill包的Cheesecake指数

    python cheesecake_index --path=/tmp/twill-latest.tar.gz
  4. 要增加输出的详细程度,请使用-v或–verbose选项。有关更多信息,请运行cheesecake_index -h或–help。

需求

  • pylint需要用于计算部分代码kwalitee指数

  • setuptools需要用于计算可安装性指数

单元测试

我们使用nose进行项目的自动测试,因此,如果您想在您的机器上测试Cheesecake,请先安装它。运行标准Cheesecake单元测试非常简单

python setup.py test

此命令等价于

nosetests --verbose --with-doctest --doctest-tests --include unit --exe

我们还有一组功能测试,可以通过以下命令运行

nosetests --verbose --include functional

功能测试可能需要更长的时间才能完成,因为它们测试cheesecake_index脚本的整体(而不是分别测试模块和类)。

如果您发现任何测试失败,请毫不犹豫地在GitHub上提交问题。

邮件列表

许可证

Cheesecake遵循Python软件基金会许可协议,该协议与Python本身使用的协议相同。许可协议的文本可以在源代码分发的LICENSE文件中找到,也可以从https://open-source.org.cn/licenses/PythonSoftFoundation.php下载。

作者联系信息

Grig Gheorghiu

Email:

<grig at gheorghiu dot net>

Web网站:

http://agiletesting.blogspot.com

Michal Kwiatkowski

Email:

<michal at trivas.pl>

Web网站:

http://trivas.pl

注意:此处使用的Cheesecake切片标志的剪贴画得到了Kazumi Hatasa(Middlebury College,Purdue大学日本学校校长)的许可。

计算Cheesecake指数的算法

Cheesecake的总分是3个主要指数(可安装性、文档和代码kwalitee)的值的总和。这些指数的值依赖于它们的子指数,依此类推。整个指数树以及每个叶子的对应值如下所示

  • 可安装性

    • 软件包已列在PyPI上,并可从中下载:50

    • 软件包可以从指定的URL下载:25

    • 软件包可以无问题解压:25

    • 解压后的软件包目录与包名相同:15

    • 软件包包含setup.py文件:25

    • 软件包可以通过“setup.py install”安装到指定目录:50

    • 软件包包含生成文件,如.pyc:-20

  • 文档

    • 软件包包含以下列出的文件

      • README:30

      • LICENCE/COPYING:30 [1]

      • ANNOUNCE/CHANGELOG:20 [1]

      • INSTALL:20

      • AUTHORS:10

      • FAQ:10

      • NEWS:10

      • THANKS:10

      • TODO:10

    • 软件包包含以下列出的目录

      • doc/docs:30 [1]

      • test/tests:30 [1]

      • demo/example/examples:10 [1]

    • 代码通过docstrings进行文档化:100 [2]

    • docstrings格式正确(如epytext或reST):30 [3]

  • 代码质量

    • 软件包有较高的pylint分数:50

    • 软件包包含单元测试:30

    • (可选)软件包不遵循PEP8约定 [4]:每种错误类型扣2分,每种警告类型扣1分

最终分数取决于软件包在上述所有指标上的得分。分数以绝对范围(分数)和相对范围(获得的最大可能分数的百分比)表示。

示例输出

$ python cheesecake_index -n nose --with-pep8
py_pi_download .........................  50  (downloaded package nose-0.9.1.tar.gz following 1 link from http://somethingaboutorange.com/mrl/projects/nose/nose-0.9.1.tar.gz)
unpack .................................  25  (package unpacked successfully)
unpack_dir .............................  15  (unpack directory is nose-0.9.1 as expected)
setup.py ...............................  25  (setup.py found)
install ................................  50  (package installed in /tmp/cheesecakeOzL_mb/tmp_install_nose-0.9.1)
generated_files ........................   0  (0 .pyc and 0 .pyo files found)
---------------------------------------------
INSTALLABILITY INDEX (ABSOLUTE) ........ 165
INSTALLABILITY INDEX (RELATIVE) ........ 100  (165 out of a maximum of 165 points is 100%)

required_files ......................... 110  (4 files and 2 required directories found)
docstrings .............................  43  (found 139/329=42.25% objects with docstrings)
formatted_docstrings ...................   0  (found 53/329=16.11% objects with formatted docstrings)
---------------------------------------------
DOCUMENTATION INDEX (ABSOLUTE) ......... 153
DOCUMENTATION INDEX (RELATIVE) .........  44  (153 out of a maximum of 350 points is 44%)

unit_tested ............................  30  (has unit tests)
pylint .................................  37  (pylint score was 7.29 out of 10)
pep8 ................................... -16  (pep8.py check: 7 error types, 2 warning types)
---------------------------------------------
CODE KWALITEE INDEX (ABSOLUTE) .........  51
CODE KWALITEE INDEX (RELATIVE) .........  64  (51 out of a maximum of 80 points is 64%)


=============================================
OVERALL CHEESECAKE INDEX (ABSOLUTE) .... 369
OVERALL CHEESECAKE INDEX (RELATIVE) ....  62  (369 out of a maximum of 595 points is 62%)

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定选择哪个,请了解有关安装软件包的更多信息。

源代码分发

Cheesecake-0.6.2.tar.gz (52.0 kB 查看哈希值)

上传时间 源代码

构建分发

Cheesecake-0.6.2-py2.7.egg (118.1 kB 查看哈希值)

上传时间 源代码

由以下支持