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:

Это третий год Software Quality Award. Приз остался тем же - $4,096. Правила остаются прежними. Читайте дальше. Предыдущие годы здесь: 2015, 2016.

  • Один человек может представить только один проект.

  • Подача заявок принимается до 1 сентября 2017 года.

  • Я проверю историю коммитов, чтобы убедиться, что вы являетесь основным участником проекта.

  • Я оставляю за собой право отклонить любое предложение без объяснения причин.

  • Все представленные материалы будут опубликованы на этой странице (включая отклоненные).

  • Результаты будут объявлены 15 октября 2017 года на этой странице и по электронной почте.

  • Лучший проект получит $4,096.

  • Окончательные решения будут приниматься мной и не подлежат обсуждению (хотя я могу пригласить других людей помочь мне принять правильное решение).

  • Победители, получившие денежные призы в предыдущие годы, не могут подавать заявки снова.

Каждый проект должен быть:

  • Как минимум 10 000 строк кода.

  • Не моложе одного года.

  • Объектно-ориентированный (это единственное, что я понимаю).

Лучший проект выбирается с использованием следующих критериев.

Что не имеет значения:

  • Я считаю, что любой язык программирования, используемый правильно, может быть применен для разработки высококачественного продукта.

  • Шум и тренды. Даже если ваш проект является еще одним парсером аргументов командной строки, он все равно имеет право на награду. Мне не важно ваше маркетинговое положение; все дело в качестве.

Кстати, если вы хотите спонсировать эту награду и увеличить бонус, напишите мне на почту.

Эти 28 проектов, представленных до сих пор (в порядке представления):


[15 сентября 2017] Я пригласил шесть человек, чтобы они помогли мне просмотреть проекты. Их имена:

[15 окт 2017] Это краткое изложение всего, что они мне прислали: award-2017.txt. В ближайшие несколько дней я выберу победителя, оставайтесь на связи!

[21 окт 2017] Мой список включает в себя следующие шесть проектов (в случайном порядке): php-ai/php-ml, vavr-io/vavr, zetaops/ulakbus, mafagafogigante/dungeon, ribtoks/xpiks, javascript-obfuscator/javascript-obfuscator. Завтра (надеюсь) я определюсь, как разделить $4096.

[23 окт 2017] Это мои собственные наблюдения по каждому проекту из короткого списка. Я буду упоминать только негативные моменты, так как все проекты довольно хорошие, нет необходимости говорить, насколько они хороши. Я перечислил проблемы в порядке их важности (самые критические сверху).

php-ai/php-ml (9.8K строк кода на PHP, 29K строк комментариев):

  • Getters, setters and mutability in many places Получатели, установщики и изменяемость находятся во многих местах.

  • NULL находится во многих местах (опять же, я знаю, что в PHP нет перегрузки методов).

  • -ER: Оценщик, Классификатор, Кластеризатор, Оптимизатор и т.д.

  • код в конструкторах (да, я понимаю, что это PHP)

  • пустые строки в телах методов

  • Score: 5

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

  • Есть действительно большие “классы”, они огромные в пакете io.vavr.collection.

  • Интерфейс Seq имеет более 120 методов! Что происходит?

  • Утилитарные классы, статические методы

  • Некоторые файлы .java содержат несколько классов на языке Java. Почему?

  • Не удалось построить мастер: #2147

  • Score: 4

zetaops/ulakbus (25K LoC Python, 707K HoC):

  • Нет CI, нет покрытия тестами, нет автоматизации статического анализа?

  • См. комментарии рецензента.

  • Score: 2

mafagafogigante/dungeon (14K строк кода Java, 88K строк кода в целом):

  • Статические методы, геттеры, сеттеры, изменяемость.

  • Коммиты не связаны с задачами и запросами на слияние.

  • Во многих местах есть комментарии внутри тела метода, это плохая практика.

  • Score: 5

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

  • Типы довольно большие, с множеством методов.

  • Утилитарные классы, помощники

  • -ERs: CommandManager, SpellCheckWorker, и т.д.

  • Я действительно не нашел много документации внутри кода.

  • Коммиты не связаны с задачами/запросами на слияние (issues/PRs).

  • Score: 4

javascript-obfuscator/javascript-obfuscator (72K строк кода JS/TS, 400K строк кода высокого уровня):

  • Аннотациями управляемые внедряемые зависимости

  • -ERs: reader, sanitizer, emitter

-ERы: reader (читатель), sanitizer (санитайзер), emitter (излучатель)

  • Публичные атрибуты в классах

  • Я считаю, что здесь многие “объекты” являются просто объектами передачи данных (DTO).

  • Интерфейсы имеют префикс I, это является анти-паттерном.

  • Score: 4

В целом, впечатление от этого года состоит в том, что я получаю гораздо меньше мусора. Представлено меньше проектов, но их качество значительно выше, чем в предыдущие два года. Я рад видеть такую тенденцию. Это означает для меня, что я делаю правильные вещи.

На этот раз я уделил больше внимания элегантности ООП и поддерживаемости кодовой базы. Ключевыми факторами для поддерживаемости являются:

  • Автоматический статический анализ

  • Автоматизированные сборки (CI)

  • Automated tests

  • Дисциплинированные коммиты через задачи и запросы на слияние (PR).

Для элегантности ООП, как обычно, я обратил внимание на отсутствие анти-паттернов, включая NULL, геттеры, сеттеры, статику, изменяемость и т.д.

В этом году есть два победителя: php-ai/php-ml и mafagafogigante/dungeon. Но мне не очень нравится код, который я нашел в этих репозиториях. Он, конечно, лучше, чем у всех остальных, но далеко не идеален.

Вот почему я принял такое решение: я дам всего лишь $1,024 каждому победителю, вместо $2,048.

Поздравляю @itcraftsmanpl с php-ml ($1,024) и @mafagafogigante с dungeon ($1,024).

Вот ваши значки:

Разместите этот код на GitHub README (замените ??? своим именем GitHub в URL):

Благодарим всех за участие! Увидимся в следующем году.

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

sixnines availability badge   GitHub stars