Monday, September 8, 2008

Почему я не использовал модульное тестирование 3 года назад.

Для тех из нас, кто открыл для себя модульное тестирование (Unit Testing) очень сложно понять, почему до сих пор не все используют его. У тех, кто еще не познал его, есть сокровенное желание, что бы те, кто познал, перестали постоянно и занудно сверлить им в мозг этим самым модульным тестированием. На протяжении многих лет, я читал блоги и статьи о модульном тестировании, общался с коллегами, которые его эффективно использовали(правда их было не очень много), но сам не использовал его в своей работе. Оглядываясь назад, можно выделить следующие причины:

  1. Я был в заблуждении относительно выгоды использования модульного тестирования. Модульное тестирование повышает качество вашего приложения, что на самом деле в дальнейшем так же упрощает модифицируемость и поддержу приложения. В будущем, если продвинуться на следующую ступень и освоить Test Driven Development (разработку основанную на тестировании:)), модульное тестирование становится неотъемлемой частью процесса формирования дизайна (детальной архитектуры) вашего приложения. "TDD это не тестирование, потому что вы не думаете как тестер, когда занимаетесь им, вы думаете как дизайнер." - Scott Bellware.
  2. Как и многие другие, я привык думать, что тестирование это проблема QA инженеров, но, ни как не моя. Я не знаю, откуда была такая уверенность, но сейчас я убежден, что это отговорка неквалифицированных разработчиков. Тестирование - это процесс нахождения дефектов (багов) в приложении, но это так же, в равной степени, и процесс проверки написанного (кода) на то, что оно работает как и задумывалось. Может быть разработчику и сложно найти дефект в написанном им приложении, но кто лучше него может убедится в том, что написанный им код, делает именно то, что он хотел?
  3. Тестирование это не особо весело. Сидеть перед монитором, вбивать входные данные и проверять, что все работает как и задумывалось, полный "ацтой". Но написание модульных тестов это тоже программирование, которое ничем не отличается от работы выполняемой нами каждый день. Временами, как и в разработке других частей приложения, это не совсем гениальный код, но при его написании совершенствуются имеющиеся навыки работы и осваиваются новые подходы и техники.
  4. Написание тестов занимает время. На самом деле модульное тестирование не тратит ваше время, оно экономит его. Время, затрачиваемое на проверку после внесения изменений и на исправление дефектов намного превышает время написания модульных тестов. Если честно, написание и модификация тестов действительно отнимает время (особенно много, когда вы только начинаете использовать модульное тестирование). У вас может не хватать времени на написание модульных тестов или ваш клиент(руководство) могут не понимать, что эти временные затраты оправданы, в таких случаях необходимо выделить критически важные секции кода вашего приложения, и производить, по возможности, модульное тестирование на них.

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

Литература: "Foundations of Programming: Building Better Software" by Karl Seguin.

No comments:

Post a Comment