Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Про код рендера — в гугле работают автоматические тесты, которые проверяют что рендеринг сайтов не сломался.Не одними сайтами мир един. Опять же, пусть даже сайт. У нас страница меняется в процессе девелопинга. Тут что-то добавили, или тут переместили. В результате тесты упали (как и должны), и надо обновлять все тесты? Это опять проверять вручную что ничего не сломалось. Спорное удобство. Ваша новая страница сломала другие страницы? Явно что-то не так в архитектуре.
У вас новые фичи никогда не требуют изменения общих кусков кода? Как вы этого добиваетесь без рефакторинга и дублирования кода?Вы сами практически ответили на свой вопрос. Рефакторинг должен быть отдельно, фича — отдельно. Рефакторинг — это очень сложно, и в момент рефакторинга может поменяться логика. Тут хорошо бы тесты. Но возьмем например паттерн MVC. Тестами реально покрыть только Model. А controller, и тем более view покрыть тестами практически нереально.
В момент рефакторинга не должна меняться логика.Допустим функция раньше возвращала только номера домов. После рефакторинга она может возвращать структуры, в которых есть номера домов. Логика поменялась? Я думаю да. Но никто пока еще не использует новую информацию. Это еще рефакторинг или уже фича?
TDD is particularly difficult with user interfaces because most UI frameworks weren't designed with testability in mind.Это один из примеров, когда TDD не может покрыть часть кода. Туда же еще можно смело добавить исключительные ситуации (не установлены драйвера, юзер выдернул флешку, оборвалось соединение и т.п.). Туда же во многих случаях можно добавить асинхронный код. И того на моей практике TDD может покрыть мизерный объем кода, т.к. я разрабатываю прикладное ПО.
«метод может получить любую строку на вход, а тесты должны быть детерминированы по определению => метод не может быть протестирован вообще. „
PS. Про детерминированность тестов: en.wikipedia.org/wiki/Fuzz_testing
techblog.netflix.com/2012/07/chaos-monkey-released-into-wild.html
1. Вы не знаете контракт клиента полностью — это решается его исследованием
Я не вижу в чем проблема протестировать write_cb на неприятие мусора — вызвать его с мусором, и протестировать что результат совпадает с ожидаемым.
2. Проблема взаимодействия асинхронного кода. Тут хотелось подробнее — в данном коде взаимодействие не показано вообще.
Дык TDD это про тестирование известных требований, а не про выдумывание новых.
Я бы насытил код ассертами на предусловия, постусловия и инварианты и прочей диагностикой, чтобы схватить ошибку как можно раньше.
Тестирование вообще невозможно потому, что порядок вызова функций зависит от входных данных. Так?
При чем тут асинхронность вообще?
Причем соверщенно пофиг какие именно эти 11 символов. Надо тестировать классы эквивалентности а не все варианты входных значений.
например узким местом можеть быть БД и тогда «оптимизация» — работа админов.
Ситауция 2. Раньше обрабатывали 100500 записей в единицу времени, теперь в 1000 раз больше, поэтому памяти и не хватило. Очевидно, что нужно сходить и купить больше памяти.
а) если потребление ресурсов не превысило возможности сервера\устройства, то можно отложить вопрос об оптимизации
(в будущем с высокой долей вероятности надо будет вернуться к этому вопросу)
б) если потребление ресурсов превысило возможности сервера\устройства, то нужно оптимизироватьраз уж код в силу разных причин не оптимальный
то дешевле будет купить дополнительное железо, а уж потом искать «бутылочные горлышки».
Что дешевле: новое железо или труд разработчиков?