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行代码。

  • 至少一年。

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

使用这些标准来选择最佳项目。

不重要的是:

  • 编程语言。我相信任何语言,只要使用正确,都可以应用于设计高质量的产品。

  • Buzz和趋势。即使你的项目只是另一个命令行参数解析器,它仍然有资格获奖。我不在乎你的市场营销地位;质量才是关键。

顺便说一句,如果您想赞助这个奖项并增加奖金,请给我发送电子邮件。

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

javaslang/javaslang(Java)

simplcommerce/SimplCommerce (C#)

【dkhmelenko/Varis-Android】(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行PHP代码,29K行注释):

  • 获取器、设置器以及可变性在许多地方。

  • NULL在许多地方都存在(再次强调,我知道PHP中没有方法重载)。

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

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

  • 方法体中的空行

  • Score: 5

vavr-io/vavr(70K LoC Java,834K HoC):

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

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

  • 实用类,静态方法

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

  • 无法构建主分支:#2147

  • Score: 4

zetaops/ulakbus (25K 行 Python 代码,707K 字符):

  • 没有持续集成,没有测试覆盖率,没有静态分析自动化?

  • 查看评审者的评论

  • Score: 2

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

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

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

  • 在许多地方中,存在着方法体内的注释,这是一个不好的习惯。

  • Score: 5

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

  • 类型相当大,具有许多方法

  • Util类,助手

  • -ERs: CommandManager, SpellCheckWorker, etc. -ERs:CommandManager,SpellCheckWorker等。

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

  • 提交不与问题/PR链接

  • Score: 4

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

  • 注释驱动的可注入依赖

  • -ERs:reader,sanitizer,emitter

  • 类中的公共属性

  • 我相信这里许多的“对象”只是DTOs(数据传输对象)。

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

  • Score: 4

今年的整体印象是,我收到的垃圾信息明显减少了。提交的项目数量较少,但其质量比前两年都要高得多。看到这种趋势,我感到很高兴。这对我来说意味着我正在做正确的事情。

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

  • 自动静态分析

  • 自动构建(CI)

  • Automated tests

  • 纪律严明的提交,通过问题和PRs

对于面向对象编程的优雅性,像往常一样,我注意到了反模式的缺失,包括NULL、getters、setters、static、mutability等等。

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

因此,这是我的决定:我将每位获胜者只给予1024美元,而不是2048美元。

祝贺@itcraftsmanpl获得php-ml(1024美元)和@mafagafogigante获得dungeon(1024美元)。

这是你们的徽章:

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

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

Translated by ChatGPT gpt-3.5-turbo/36 on 2023-11-17 at 12:43

sixnines availability badge   GitHub stars