суббота, 31 мая 2014 г.

Как тестировать "нетестируемые" приложения

Скажем так. Реферат (от словосочетания "набор ссылок") на тему:

Как тестировать "нетестируемые" приложения. Или как сделать приложения тестируемыми.

Скажем так - ОСНОВОПОЛАГАЮЩЕЙ для меня является точка зрения Сергея Теплякова, который не раз уже писал, что тестируемость приложения является ИНДИКАТОРОМ (лакмусовой бумажкой) того, что архитектура приложения является "ХОРОШЕЙ".

Ещё раз - архитектура "хорошая" тогда, когда она хорошо тестируется.

Если к "классу" СЛОЖНО написать тест, то почему можно думать, что этот класс ЛЕГКО могут использовать ваши коллеги?

Об этом Тепляков писал вот тут - Идеальная архитектура (статьи Теплякова вообще рекомендую - ВСЕ).

На эту же тему немного порассуждал Роман Янковский вот тут - Тестируемая архитектура

О том как я сам пришёл к необходимости тестирования и к, тому что "хорошая архитектура это та, которая хорошо тестируется" и "начал спать спокойно" я написал вот тут - http://18delphi.blogspot.ru/2013/03/blog-post.html

Однако, я давно задумываюсь вот на какую тему - хорошо если мы ИЗНАЧАЛЬНО думали о тестировании и "хорошей архитектуре", и применяли различные практики (TDD в частности), но что делать если у нас есть ОГРОМНОЕ количество кода, который написан так, что о тестируемости никто не задумывался.

Что же делать?

Как сделать приложение "тестируемым"?

И как "выправить" его архитектуру?

С тех пор я попытался написать множество "статей".

Из "доисторического":

В думах о тестировании №5
GUI-тестирование "по-русски". Back to the basics. Пример нажатия на кнопку формы из скрипта

- там я пытался рассказать про GUI-тестирование так как "я его вижу". Так как я сам развивал тестирование почти пять лет.

И о ТОМ, что GUI-тестирование это - ОТ БЕДНОСТИ, т.е. от "плохой архитектуры".

Но оказалось, что "люди не понимают".

Тогда была предпринята ещё одна попытка:

Как тестировать "вообще нетестируемое"

- там я ЕЩЁ раз попытался рассказать, как тестировать приложения, которые ИЗНАЧАЛЬНО не предполагались для ТЕСТИРОВАНИЯ.

Но ОПЯТЬ оказалось, что "люди не понимают".

И тут появился Всеволод Леонов и "бросил вызов".

Вот тут:
http://programmingmindstream.blogspot.ru/2014/02/anemicdomainmodel.html?showComment=1392717297690#c4055365633171954826

За что ему - ОТДЕЛЬНО СПАСИБО!

И появился "современный" цикл "Тестирование калькулятора":
http://programmingmindstream.blogspot.ru/2014/05/61.html

По ссылке перечислены все семь статей, которые мы пока написали.

Эти статьи "навскидку" кажутся "банальными", но по-моему они тянут за собой МНОЖЕСТВО принципиальных вопросов касающихся разработки, тестирования и написания ТЗ.

- этот цикл это "открытый проект". Мы с моим коллегой из Украины будем развивать его. И планируем множество статей. И сейчас вплотную работаем над ними.

В частности есть план - http://programmingmindstream.blogspot.ru/2014/03/blog-post_5.html

Хотя жизнь уже опередила этот план и у нас есть ГОРАЗДО БОЛЬШИЕ задумки (с интересующимися - могу поделиться).

Кроме того мы РАДЫ принять "конструктивных критиков" и СОАВТОРОВ.

И есть ещё одна "хотелка" - перевести цикл про "Тестирование калькулятора" на английский.

Может быть кому-нибудь это интересно и кто-нибудь возьмётся это сделать?

Можно на "добровольных началах", а можно и "о цене попробовать договориться".

Вот собственно пока всё "что я знаю о тестировании".

P.S. Ну и есть репозитарий в котором мы сейчас ведём разработку - https://bitbucket.org/ingword/lulinproject/src/9674200a1892ab5e2682f740632c9513b3cf9e1e/DummyCalculator/?at=Release

P.P.S. Появилась следующая часть, посвящённая использованию "Тестов с эталонами" - http://programmingmindstream.blogspot.ru/2014/06/62.html