Обновить
8
0
Юрий Орлов@e_Hector

software engineer

Отправить сообщение

не трудно) Мне самому интересна эта тема.

Отлично же :) Тогда давайте я попробую применить ваши критерии.

Первый вариант я написал за 5 минут.
Чтобы написать пятый вариант, понадобилось 10 минут.

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

Технически, я сначала написал вариант 1, а потом потратил еще столько же времени, чтобы его улучшить и, в итоге, получился вариант 5.

Сколько времени уйдет на внесение изменений в будущем не понятно. Ведь мы не знаем какого рода это будут изменения и кто их будет вносить.

В силу простоты задачи какой-то явно заметной отладки не получилось.

На решение написано 5 тестов:

  • 3 теста на случай когда не передали какой-то из параметров

  • 1 тест когда пользователь не имеет доступа и получает отлуп

  • 1 тест когда все хорошо и доступ есть

Оба варианта успешно проходят все тесты.

Как понять какой вариант лучше? Первый, потому что потребовал меньше времени?

Кстати, если я не знаю сколько времени потрачено на написание кода, например, смотрю на код опенсорсной библиотеки, то получается в рамках этой схемы качество оценить нельзя?

До вашего пояснения я думал что между "понятно" и "академически" существует дихотомия.

Теперь я уже не уверен. В вашей "системе ценностей" код может быть одновременно и "понятным" и "академическим" (варианты 1 и 5), или я что-то понял не так?

Если вам не трудно, могли бы в классифицировать примеры из статьи по системе "понятно"/"академически" с комментариями почему именно так?

На мой взгляд, ваши критерии

  • позволяет как можно быстрее вносить изменения сохраняя при этом минимально необходимый уровень качества

  • соответствие реального поведения программы ожидаемому поведению описанному в ТЗ

все равно довольно абстрактны.

Сейчас я не понимаю как их можно свести к числам.

Если вам не трудно, можете провести оценку пары вариантов, например, первого и пятого по своей схеме?

Понятное дело, что это примеры и в жизни все сложнее. Но думаю для общего понимания методики их хватит.

Если нужны какие-то уточнения по ТЗ, или другого плана, то я готов отвечать на вопросы.

А как вы определяете читаемость?

Гипотетически, если бы мне действительно надо было проходить ревью у вас, как бы я мог понять, достаточно ли читаемо написал?

Тут есть ловушка

Дело в том, что "критерии лучшести" часто выражаются абстрактными словами.

Допустим, мы считаем, что хороший код должен быть выразительным и поддерживаемым (и работать правильно, само собой)

А что такое выразительность и поддерживаемость?

Тут есть забавный нюанс.

Характеристики "понятно" и "академически", сами по себе, довольно абстрактны и каждый человек вкладывает в них какой-то свой смысл.

Когда я обсуждал статью с коллегами внутри компании, то получалась такая ситуация
* "простым" считали либо первый, либо пятый
* "академическим" считали либо второй, либо третий

Вот лично для вас, на пальцах, что значит "просто", а что "академически"?

Нет, никакой "технической оценки" вариантов не делали.

Никак :)

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

Я за то, чтобы не тащить к себе хоть и крутой, но избыточный инструмент.

Да, но в таком варианте растет количество "не естественного" синтаксиса, имею в виду конструкции библиотеки every, returns вместо "родных" языковых override

Плюс, сходу не понятно, как сделать собственное поведение для мокируемого метода?

Например, как будет выглядет вот такой мок, но сделанный на mockk

fun repository(repositoryId: Int, origin: Repository? = null, project: Project? = null) = object : Repository by proxy() {
    override fun getId() = repositoryId
    override fun getState() = AVAILABLE
    override fun getOrigin() = origin
    override fun isFork() = getOrigin() != null
    override fun getProject() = project!!
    override fun equals(other: Any?) = (other as? Repository)?.id == id
    override fun hashCode() = id.hashCode()
    override fun getName() = "Repository #$id"
    override fun getSlug() = "repository-$id"
    override fun toString() = name
}

p.s. Вариант moсkk выглядит лучше, чем mockito, но концептуальные претензии такие же

Лютый зашквар,
Трэш и хардкор
Струпья ю-трупа
Жрёт хайпожор.

(с) Louna, «Шум»
Экстравагантность гения, очевидно же :)

Конечно, ведь он прямо так и называется Bitbucket Server https://www.atlassian.com/software/bitbucket/server

Читал статью с надеждой, что в итоге все сведется к статическому анализу и IntelliJ IDEA, эх :(
А что значит currency 643.0?
Эта инспекция будет работать только для java-кода? Для того же Kotlin или Scala нужно писать отдельно? Есть ли в принципе какие-то кросс-языковые инспекции?
а почему код новой инспекции написан не на Kotlin? :)
а как же nullability на уровне системы типов?
а гитхабу почти 10 уже
но ведь для этого давно придумали системы сборки

Информация

В рейтинге
Не участвует
Откуда
Черногория
Дата рождения
Зарегистрирован
Активность