Software Quality Award, 2017

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

这是软件质量奖的第三年。奖金仍然是相同的 - $4,096。规则仍然是相同的。请继续阅读。往年的奖项在这里:2015,2016。

  • 一个人只能提交一个项目。

  • 提交截止日期为2017年9月1日。

  • 我会查看提交历史以确保您是该项目的主要贡献者。

  • 我保留拒绝任何提交而不给予解释的权利。

  • 所有提交内容将在此页面上发布(包括被拒绝的)。

  • 结果将于2017年10月15日在此页面和通过电子邮件公布。

  • 最佳项目将获得4096美元。

  • 最终决策将由我做出,并且不可商议(尽管我可能会邀请其他人帮助我做出正确的决定)。

  • 在过去几年中获得任何现金奖励的获奖者不能再次提交。

每个项目必须是:

  • 至少10,000行代码。

  • 至少一年以上。

  • 面向对象(这是我唯一理解的东西)。

使用以下标准选择最佳项目。

不重要的事项:

  • 编程语言。我相信任何语言,只要使用得当,都可以用来设计高质量的产品。

  • 潮流和趋势。即使您的项目只是另一个命令行参数解析器,它仍然有资格获得奖项。我不关心您的营销职位;质量才是最重要的。

顺便说一下,如果你想赞助此奖项并增加奖金,请给我发送电子邮件。

迄今为止已提交的这28个项目(按提交顺序):

javaslang/javaslang(Java)

onqtam/doctest(C++)

iboB/dynamix](https://github.com/iboB/dynamix)(C++)

atk4/data (PHP)

【javascript-obfuscator/javascript-obfuscator】(https://github.com/javascript-obfuscator/javascript-obfuscator)(TypeScript)

【DrBookings/drbookings】(Java)

【flyimg/flyimg】(https://github.com/flyimg/flyimg)(PHP)

【simplcommerce/SimplCommerce】(https://github.com/simplcommerce/SimplCommerce)(C#)

【octaviospain/Musicott】(Java)


[2017年9月15日] 我邀请了六个人来帮我审查这些项目。他们的名字是:

[2017年10月15日] 这是他们发送给我的所有内容的摘要:award-2017.txt。我将在接下来的几天内选择获胜者,敬请关注!

[2017年10月21日] 我的入围名单包括以下六个项目(随机排序):php-ai/php-mlvavr-io/vavrzetaops/ulakbusmafagafogigante/dungeonribtoks/xpiksjavascript-obfuscator/javascript-obfuscator。明天(希望如此)我将决定如何分割4096美元。

[2017年10月23日] 这是我根据入围名单对每个项目的个人观察。我只会提到负面的事情,因为所有的项目都非常出色,没必要说它们有多好。我按照问题的重要性进行了排序(最重要的在前)。

php-ai/php-ml(9.8K LoC PHP,29K HoC):

  • 在许多地方,有获取器(getters)、设置器(setters)和可变性。

  • 在许多地方都会出现NULL(再次提醒,我知道PHP中没有方法重载)。

  • -ER:估计器(Estimator)、分类器(Classifier)、聚类器(Clusterer)、优化器(Optimizer)等。

  • 在构造函数中编写代码(是的,我理解这是PHP)。

  • 方法体中的空行

  • Score: 5

vavr-io/vavr (70K LoC Java, 834K HoC): 【vavr-io/vavr](https://github.com/vavr-io/vavr)(70K行Java代码,834K行代码):

  • 有一些非常大的“类”,它们在io.vavr.collection包中非常庞大。

  • 接口 Seq 有 120 多个方法!发生了什么事?

  • 实用类,静态方法

  • 一些.java文件中有几个Java类。为什么?

  • 无法构建主要分支:#2147

  • Score: 4

zetaops/ulakbus(25K行Python代码,707K高度复杂度):

  • 没有CI,没有测试覆盖率,没有静态分析自动化?

  • 查看评论来自评论者

  • Score: 2

mafagafogigante/dungeon (14K LoC Java, 88K HoC):

  • 静态方法,获取器,设置器,可变性

  • 提交不会链接到问题和PR。

  • 在很多地方都有方法体内的注释,这是一个不好的做法。

  • Score: 5

ribtoks/xpiks (180K+ LoC C/C++, 739K HoC): ribtoks/xpiks(180K+行C/C++代码,739K HoC):

  • 类型非常庞大,拥有许多方法。

  • Util类,助手

  • -ERs:CommandManager(命令管理器)、SpellCheckWorker(拼写检查工作者)等。

  • 我在代码中没有找到太多的文档。

  • 提交不与问题/拉请求相关联。

  • Score: 4

javascript-obfuscator/javascript-obfuscator(72K LoC JS/TS,400K HoC):

  • 注解驱动的可注入依赖

  • -ERs: 阅读器,消毒剂,发射器

  • 类中的公共属性

  • 我相信这里许多“对象”只是DTOs。

  • 接口以I为前缀,这是一种反模式。

  • Score: 4

我对今年的总体印象是,我收到的垃圾信息要少得多。提交的项目更少,但它们的质量比前两年要高得多。我很高兴看到这种趋势。这对我来说意味着我正在做正确的事情。

这一次,我更加注重面向对象编程的优雅性和代码库的可维护性。可维护性的关键因素包括:

  • 自动静态分析

  • 自动构建 (CI)

  • Automated tests

  • 有纪律的提交,通过问题和 PR。

对于面向对象编程的优雅性,像往常一样,我关注了反模式的缺失,包括NULL、getter、setter、静态、可变性等等。

今年有两个获奖者:php-ai/php-mlmafagafogigante/dungeon。但我并不是真的喜欢我在这些代码库中发现的代码。它显然比其他人好,但并不完美。

因此,这是我的决定:我将只给每个获奖者$1,024,而不是$2,048。

恭喜@itcraftsmanpl获得php-ml($1,024),以及@mafagafogigante获得dungeon($1,024)。

这是你们的徽章:

将这段代码放入GitHub的README文件中(将URL中的???替换为你的GitHub用户名)。

感谢大家的参与!明年再见。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 15:40

sixnines availability badge   GitHub stars