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 год.
Один человек может представить только один проект.
Предложения принимаются до 1 сентября 2016 года.
Я проверю историю коммитов, чтобы убедиться, что вы являетесь основным участником проекта.
Я оставляю за собой право отклонить любое предложение без объяснения.
Все представления будут опубликованы на этой странице (включая отклоненные).
Результаты будут объявлены 15 октября 2016 года на этой странице и по электронной почте.
Лучший проект получит $4,096.
Окончательные решения будут приниматься мной и не подлежат обсуждению (хотя я могу пригласить других людей помочь мне принять правильное решение).
Победители, которые получали денежные призы в предыдущие годы, не могут подавать заявки снова.
Каждый проект должен быть:
Не меньше 10 000 строк кода.
Возраст не менее одного года.
Объектно-ориентированный (это единственное, что я понимаю).
Лучший проект выбирается на основании этих критериев.
Что не имеет значения:
Я считаю, что любой язык программирования, если используется правильно, может быть применен для разработки высококачественного продукта.
Гул и тренды. Даже если ваш проект - это всего лишь еще один парсер аргументов командной строки, он все равно подходит для получения награды. Мне не важна ваша маркетинговая позиция; все дело в качестве.
Кстати, если вы хотите стать спонсором этой награды и увеличить бонус, напишите мне на электронную почту.
На данный момент подано 60 проектов (в случайном порядке):
”
artem-zinnatullin/qualitymatters” - “artem-zinnatullin/qualitymatters””
bladecoder/bladecoder-adventure-engine” - “bladecoder/bladecoder-adventure-engine”axet/desktop”
ppareit/swiftp” - “ppareit/swiftp”.”
DSteve595/Put.io” - “DSteve595/Put.io””
sniffy/sniffy” - “sniffy/sniffy””
HeinrichReimer/material-intro” - “HeinrichReimer/material-intro””
gerc99/SawimNE” - “gerc99/SawimNE””
orfjackal/jumi” - “orfjackal/jumi””
wbotelhos/raty” - “wbotelhos/raty”GautamGupta/Simple-Android-OCR- перевод не требуется, это ссылка на GitHub репозиторий.”
datavis-tech/reactive-model” - “datavis-tech/reactive-model””
apache/wicket” - “apache/wicket”nikolamilosevic86/owasp-seraphimdroid- переведите данную ссылку с английского на русский язык, не переводя технические термины и имена собственные.js-cookie/js-cookie- это ссылка на репозиторий GitHub для проектаjs-cookie/js-cookie.coala/coalaот@sils”
Cyan4973/zstd” - “Cyan4973/zstd”
15 октября 2016 года: Я попросил одного из наших Java-разработчиков провести предварительный анализ всех проектов. Вот отчет, который он прислал мне сегодня: award-2016.txt (вы можете найти свой проект там). Я добавил свои комментарии к его плюсам и минусам (вы можете увидеть их прямо в этом текстовом файле). Исходя из его мнения и предварительного анализа, я выбрал несколько финалистов.
“
NullVoxPopuli/aeonvera(Ruby)” - “NullVoxPopuli/aeonvera(Ruby)”“
SimonKagstrom/kcov(C++)” - “SimonKagstrom/kcov(C++)”“
skinny-framework/skinny-framework(Scala)” - “skinny-framework/skinny-framework(Scala)”“
paypal/squbs(Scala)” - “paypal/squbs(Scala)”“
ben-manes/caffeine(Java)” - “ben-manes/caffeine(Java)”coala/coala(Python) -coala/coala(Python)
Извините за задержку, но мне нужно несколько дней, чтобы анализировать их правильно и решить, кому присудить приз. Я объявлю победителя 21 октября, через шесть дней. Я отправлю всем электронное письмо и опубликую свое решение здесь.
18 окт 2016: Это мой анализ семи финалистов. Я пытался уделить максимальное внимание каждому проекту (они все довольно хорошие).
pholser/junit-quickcheck (19K LoC, 80K HoC)
Релизы GitHub находятся здесь, но я не нашел, как именно они создаются, где находится процедура релиза? Кроме того, они не задокументированы, нет никаких заметок о релизе.
Есть некоторые утилитарные классы, например
Lists,ItemsиSequences.Есть некоторые классы -ER, например
ShrinkerиSampleSizer(который имеет конструктор с кодом).Дизайн “генераторов” на самом деле не является объектно-ориентированным, по-моему. Все они являются поставщиками процедур, а не настоящими “объектами” в терминах ООП.
Score: 5
NullVoxPopuli/aeonvera (46K LoC, 835K HoC) - NullVoxPopuli/aeonvera (46 тыс. строк кода, 835 тыс. символов кода).
Это Ruby on Rails, который использует архитектуру MVC, но не является настоящим ООП. Кроме того, также имеется ORM с анемичной моделью (в директории
models/). За исключением этого, “сериализаторы”, “сервисы”, “валидаторы” и т. д. - также не настоящее ООП.Я не нашел никаких выпусков на GitHub.
В репозитории отсутствует официальная процедура выпуска. Я просто не могу понять, как этот продукт попадает в производство, процесс неавтоматизирован (или скрипт отсутствует в репозитории). Это серьезная проблема для веб-приложения.
Кроме того, приложение определенно является более чистым, чем многие другие подобные веб-приложения на RoR. Хорошая работа.
Score: 4
SimonKagstrom/kcov (15K LoC, 50K HoC) - SimonKagstrom/kcov (15 тыс. строк кода, 50 тыс. строк комментариев).
Некоторые фрагменты кода - это слишком сложные методы, например, в
ptrace.cc,elf-parser.ccилиhtml-writer.cc.Есть некоторые классы, оканчивающиеся на -ER, такие как “writers” (писатели), “verifiers” (проверяющие) и “parsers” (анализаторы), например:
AddressVerifierилиDwarfParser.Интерфейсы имеют префикс
I, что является плохой практикой в ООП, см.reporter.hh.Есть некоторые “utils”, которые я бы заменил на классы (большинство из них):
utils.hh.Score: 4
skinny-framework/skinny-framework (44K LoC, 191K HoC) - skinny-framework/skinny-framework (44 тыс. строк кода, 191 тыс. строк кода с комментариями).
Я не нашёл статического анализа.
Я не нашел контроля покрытия кода, хотя есть много модульных тестов.
Есть утилитарные классы, например
StringUtil,DateTimeUtil.Это MVC, что является анти-паттерном в ООП.
Есть ORM, которая также является анти-паттерном.
Сложность кода иногда очень высока, например вот этот файл:
AssociationsFeature.scalaScore: 2
paypal/squbs (28K LoC, 163K HoC) - paypal/squbs (28 тыс. строк кода, 163 тыс. строк комментариев)
Поглощение исключений кажется распространенной практикой здесь, например: здесь, здесь, здесь и т. д.
Есть утилитарные классы, например
ConfigUtil.Общее впечатление состоит в том, что сложность довольно высока, например эти файлы действительно сложны в понимании:
ServiceRegistry.scalaилиUnicomplexBoot.scala.Оценка: 3 (в основном из-за сложности)
ben-manes/caffeine (47K строк кода, 191K строк комментариев)
Есть некоторые классы -ER, например,
Weigherможно легко переименовать вWeight. То же самое относится к “loaders” и “writers”.Score: 4
coala/coala (15K LoC, 274K HoC) - coala/coala (15 тыс. строк кода, 274 тыс. строк кода с комментариями).
Есть некоторые классы -ER, такие как “parsers”, “collectors”, “importers”.
Я все еще не вижу последовательного форматирования кода, довольно странно видеть так много пробелов перед некоторыми строками, размещенных там без какой-либо логики (по крайней мере, я не вижу этой логики, например, здесь).
Некоторый код является полностью глобальным, без каких-либо классов, как в
Processing.pyи вCollectors.py(возможно, это неизбежно, но все же выглядит странно).Некоторые файлы достаточно длинные, например,
Lynter.pyилиConsoleInteraction.py.Score: 5
Я не могу найти сильного одиночного лидера… Позвольте мне подумать об этом.
23 октября 2016 года: В этом году я не нашел одного лидера, и приз достается двум проектам: pholser/junit-quickcheck и coala/coala ($2,048 каждому).
Поздравляю @pholser и @sils, победителей!
Вот ваши значки:
Поместите этот код в GitHub README (замените ??? на ваше имя пользователя GitHub в URL).
Спасибо всем за участие! Увидимся в следующем году.
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-27 at 05:15
