уповноважений по милицях в Дарницькі печери
  • Вопросы к практикующим TDD

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

    Если она это делает на каждую скобку, не спросив... конечно, дело вкуса, но IMHO это некорректный подход. Запуск теста должен быть явно инициирован пользователем.

  • Вопросы к практикующим TDD

    Архитектура чего? Всей системы или модуля?

    Каждого уровня. И системы, и модуля. Разумеется, на каком-то уровне сам термин «архитектура» начинает терять смысл, сводясь к очевидному.

    Всей системы если и появится, то не на первом шаге, прийдется упорно рефакторить.

    Возможно, и появится. А может, и нет. Далеко не всю архитектуру надо будет переделывать (неважно, рефакторингом или нет).
    Важнее то, что здесь действует принцип, что лучше разрабатывать под (заведомо) неправильную архитектуру, но лучшую из того, что можно придумать на данный момент, чем вообще ни под какую.

    Ок 1 и 2 покрываем. А что не покрываем тестами?

    А почему Вы спрашиваете? Разве я писал, что что-то не покрываем?

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

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

    Во-первых, откуда ожидать появление этой ветки? Почему она будет? Если она не нужна ни для какого требования спецификации, то ей нет причины вообще существовать. Если же она существует, то отрабатывает какой-то сценарий согласно спецификации, а значит, на неё наверняка будут тесты в составе первого пакета (BDD).

    Конечно, может быть, что она добавлена автором кода под какие-то свои замыслы (например, спецификация не отрабатывает ситуацию, когда что-то ломается, а в коде на это отдельная обработка). Но это уже допустимо не во всех моделях разработки. И на такие случаи должны быть свои тесты (может быть, не сразу).

    Во-вторых, предположим, что есть какая-то ветка, которую не покрыли тестом. Почему тестеры и пользователи её не заметят (а потом кто-то один заметит)? Может, спецификация просто содержала ненужное?

    Я готов поверить в такие ситуации в случае старого кода, который разрабатывался без всякого тестирования (ну, иногда с ручными тестами) и медленно и задумчиво приводится к полному покрытию хотя бы по веткам исполнения (кстати, что-то Вы на этих ветках слишком сконцентрировались). Но в случае нового кода, разрабатываемого с адекватным покрытием тестами, это как-то маловероятно, мягко говоря.

    Снова же если исходить из «сначала тесты», то появление такой ветки практически не возможно

    Неверно. Оно было бы теоретически возможно, если бы следовали другому правилу — «пишите только тот код, который удовлетворяет тесты» (что само по себе — грубая ересь: писать надо тот код, который решает задачу по спецификации и является минимальным для удовлетворения теста, а иначе можно писать только кучу if-return для значений тестов). Но Вы это правило тут не упомянули, а упомянули зачем-то порядок тестов, который вообще это не решает. Можно написать вперёд тесты, потом код, а можно вперёд код, потом тесты — и код будет одинаковый, если программист в состоянии держать в голове задачу.

    Вот если он не в состоянии удержать всё в голове (как правило, это потому, что язык такой, что вместо сущностей предметной области код переполнен геттерами-сеттерами и прочими бульдогами) — да, тесты являются средством сосредоточения на целевой задаче. Я этим регулярно пользуюсь: написал тест, убедился, что не работает, и вижу твёрдо сам себе стимул исправления и место для раскопок. Но это опять же не прямо реализуемый декларированный эффект метода, а его побочный эффект. И он никак не гарантирует появление минимально необходимого кода со всеми покрытыми ветками ни при начальной разработке под тест, ни при рефакторинге «под ключ».

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

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

  • Вопросы к практикующим TDD

    по теме, похоже, нечего сказать?

    Я достаточно высказался по теме в предыдущих комментариях.

  • Вопросы к практикующим TDD

    Ваше намеренное игнорирование проблематики? Да, доказано.

  • Вопросы к практикующим TDD

    понятней станет откуда у «адйжайл» ноги растут

    Они растут совсем не из XP. XP только частный специфический случай Agile. Сами по себе принципы типа «не затыкаться на водопаде» были сформулированы ещё Бруксом, а обязательность тестов выросла ещё из самых правил военной приёмки, от людей, которые не верили ничему, кроме того, что сами видели.

    Это то что было у многих на уме — светлая голова Кента Бека выразила словами, простыми принципами.

    Ну да, а Apple придумала оконный интерфейс, планшеты, и вообще компьютеры.</mode="kidding">

    Учите первоисточники, а не шумных эпигонов.

  • Вопросы к практикующим TDD

    Это Вам не тут.

  • Вопросы к практикующим TDD

    Я не силён в теории этих понятий, но если оно 1) постоянно само пускает тесты, 2) умеет прогонять через тесты новые коммиты, то это то, что я имел в виду.

  • Релиз Конца Света переносится

    Лучший формат времени для общего применения на сейчас, как ни странно, — NT time.
    А за идею использовать unixtime для широкого диапазона дат уже надо начинать ругать.

  • Релиз Конца Света переносится

    Эту идею рассматривали в самом начале перехода на 64 бита (задолго до того, как об этом задумались всякие Intel и микрософты) и отвергли. Поэтому в действующих архитектурах int остался и останется, возможно, навсегда 32-битным.

    (Что никак не относится к time_t, %username%)

  • Вопросы к практикующим TDD

    TDD — некорректная, обманная комбинация правильных частных подходов. В обычно описываемом виде она имеет смысл только для менеджеров и только для разработки типа «написал и забыл».

    Подробнее я писал, например, тут: netch80.livejournal.com/17832.html

    И, разумеется, архитектура должна быть продумана изначально, хотя бы для первой версии. Никакие предварительные тесты не покроют отсутствие архитектуры и её придумку на ходу. Не обязательно реализовывать всё из запланированного по архитектуре, многое может дорисовываться на ходу, но надо иметь хотя бы в голове (а лучше на бумаге) общий план кампании.

    Правильнее всего обеспечить выделение доли времени на тесты и жёстко его соблюдать, покрывая тестами 1) все основные сценарии и применения (включая те, что вытекают из спецификаций — это уже BDD) и 2) все подозрительные с точки зрения программиста места и случаи (маргинальные значения параметров, внесценарные повторные вызовы методов, etc.)

    Сколько времени — определяется по возможностям — но это не менее 20%, а в соседних ветках рекомендовали 50%. Этого должно гарантированно хватить на доведение до рабочего состояния. Ну и см. выше про архитектуру.

    Підтримав: undefined pointer
  • Вопросы к практикующим TDD

    Чем он отличается от других средств continuous integration?

  • Distributed Systems

    Так не бывает. У разных схем и задач распределения практически нет ничего общего, кроме самого факта выполнения чего-то не на одном процессоре.

    Підтримав: Viktor Sovietov
  • Почему важно уточнять все детали рабочего процесса до выхода на работу, или как не платит зарплату один из «Лидеров рынка IT»

    Хехе, не зря я убил из почты предложение работы от некоей Marina Kopytova. Может, компания и приличная, но пока в ней такие сотрудники — её стоит обходить за километр.

    P.S. Не рассказывайте сказки, что ничего не посылали:)

  • Лучшие программисты в Украине или России?

    Ну и пусть себе хотят дальше:)

  • Программирование по контракту

    Вот на тему глубокого дебага — как раз проверка выполнения контракта является нормальной там, где разработчики или слишком ленивы, чтобы сидеть в отладчике (привет Луговскому), или не в состоянии, например, потому что софт выполняется на далёком сервере и обрабатывает в реалтайме сотни параллельных сущностей (как на моих работах). Реализуется это уже способом, специфичным для языка, платформы и обстановки: где-то это просто assert, где-то вывод в лог, где-то увеличение счётчика... главное, чтобы проблема была известна и опознавалась (хотя бы до такого уровня, чтобы в следующей версии плавно углубиться в неё). Фактически, я отладчик как инструмент не запускал на своих задачах уже... мнэээ... лет 10:) Вижу его только у дочки на задачах по информатике (когда задача тривиальна, но требуется понять, что именно нужно).

    К ссылке про контракты в Аде — оно очень похоже выглядит в Erlang. Например, если функция foo должна получать на входе список, достаточно записать её определение в виде

    foo(L) when is_list(L) ->

    ...

    вместо простого

    foo(L) ->

    ...

    и рантайм автоматически проверит (точнее, он будет искать подходящее определение, но для foo(X) с X не списком он его не найдёт и будет исключение типа function_clause).

    Подозреваю наличие аналогичных средств в других ФЯ, но не видел.

    Схожие средства я применял в случае особо тяжело понимаемого кода, например, если я знаю, что функция должна вернуть record(nns), пишу

    NewNNS = #nns{} = process_message(Message, OldNNS)

    и в рантайме выполняется соответствующая проверка.

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

    Это я чуть пробежался по теме «мысью по древу», она значительно обширнее, но описал практически важные «в среднем по больнице» вехи. Главное — не бойтесь форсировать в коде проверку выполнения условия конкретного контракта, по крайней мере в отладочных сборках; это поможет не только отладке, но и чтению.

    Підтримав: anonymous
  • Инглиш в описании вакансий

    > И, кстати, эйчары не набирают людей на работу.

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

  • Страшно жить

    А что эти две? Как приколы у них песни отличные, развеять голову от засушенного кода:)

  • Через пятнадцать лет останется джава или останется C# в масcовом использовании?

    Никакой Си не даст результат, что "5"-3==2, но "5"+3=="53″. И точно так же никакой Си со своим синтаксисом не даст того, что если после слова return перевести строку, то выражение за ним проигнорируется в ноль. Это всё PHP’шные выбредки.

  • Через пятнадцать лет останется джава или останется C# в масcовом использовании?

    ... и от необходимости трезво, связно и чётко излагать мысли.

  • Через пятнадцать лет останется джава или останется C# в масcовом использовании?

    Ключевое слово — «разумная». Хотя кому-то и APL слишком многословен.

← Сtrl 1... 403404405406407408 Ctrl →