Автоматизоване тестування: пояснення його ділової цінності


25

Для початку я не думаю , що це повторення з інших питань на модульному тестуванні . Що я шукаю допомоги - це висловлювати свою цінність команді програмістів, аналітиків, менеджерів і тестерів. За допомогою автоматизованих тестів, я не думаю, що мені потрібно розрізняти одиничні тести (наприклад, JUnit), BDD (наприклад, JBehave, Fitness) та інтерфейс користувача (Selenium, Watir), тому що я думаю, що всі вони надають аналогічну цінність (але не соромтеся напишіть відповідь, яка не погоджується :))

Далі йде список, який я визначив, я шукаю відповіді, які допоможуть розширити чи уточнити:

  1. Економія часу / витрат : написання автоматизованих тестів може зайняти більше часу, ніж письмові тестові випадки. Однак, враховуючи тести, які виконуються кілька разів, гранична робота (тобто вартість / час) для виконання автоматизованих тестів на кілька порядків менша. Те, що автоматичні тести дешеві для запуску, полегшує зміну системи з часом.
  2. Документація : немає більш правдивого способу дізнатися, як працює система, ніж її тести. Будь-яка інша документація, як правило, застаріла з моменту її написання, але тести (принаймні ті, що проходять) виявляють, як все насправді працює. Це справедливо як для документації кінцевого користувача, так і для API.
  3. Якість коду : тестове написання змушує вас:
    • вважайте клієнтів, оскільки тести - це клієнт
    • розбиває залежності, коли зробити код тестуваним часто означає, що з'ясувати, як зробити для цього коду не потрібну іншу велику систему

Відповіді:


21

Кілька моїх думок:

  1. Будьте чесні, що для написання автоматизованих тестів знадобиться більше часу. Якщо ви працюєте з TDD на рівні одиниці (що я рекомендую як вихідну точку, якщо ви збираєтесь інвестувати в автоматичне тестування), ви можете очікувати приблизно 30% додаткового часу, необхідного для кодування функції. Ключовим тут є пояснення того, що ці додаткові 30% (що, мабуть, перевищує 30% на початку, коли ваша команда вчиться писати хороші тести) - це інвестиція, побудована для економії витрат у часі. Як мінімум із рівнем TDD на рівні одиниці, конструкція вашої системи є зв'язаною та дуже згуртованою, що робить вашу систему пристосованою до змін у часі. Нові вимоги та несподівані помилки завжди потребують змін у вашій системі,
  2. Існує багато дискусій про значення тестів рівня прийняття та інтерфейсу інтерфейсу, враховуючи кількість часу, необхідного для написання цих тестів, скільки часу потрібно для їх запуску та скільки необхідного технічного обслуговування. Я рекомендую прочитати цю статтю Джеймса Шор про це.
  3. У світі автоматизованого тестування є хороші способи і погані способи зробити це. Якщо ви пропонуєте автоматизоване тестування для свого керівництва, я б наголосив на тому, як ви плануєте навчати свою команду в написанні хороших тестів. «Мистецтво одиничного тестування» Роя Ошерове, «Ефективна робота зі спадковим кодексом Майкла Пірса» та «Мистецтво спритного розвитку» Джеймса Шора - все це чудові книги, які безпосередньо чи опосередковано стосуються цих тем. Ви також повинні вивчити якусь тренерську чи офіційну підготовку. Це велика зміна.
  4. З точки зору вартості бізнесу, №2 та №3 ваших вище пунктів насправді служать вашій першій точці, тому я забиваю додому пункт №1 та поговорю про те, як №2 та №3 слугують цій кращій точці. Документація робить вашу систему більш зрозумілою, що робить вашу команду швидшою. Якість коду робить вашу систему пристосованою до змін, що робить вашу команду швидшою. Для ділових людей справа в тому, щоб максимально збільшити потік вартості від моменту подання ідеї до моменту подання ідеї як робочого програмного забезпечення.

1
+1 хороша відповідь. Цікаве посилання на статтю Джеймса Шор. Я додав би «Чистий кодер » Роберта Мартіна до вашого списку книг. Я думаю, що тести, створені розробниками інтерфейсу, повинні охоплювати щасливі шляхи, а QA (якщо він існує) пише винятки. Експериментальні випробування дійсно повинні вирішувати виняткові випадки.
orangepips

@orangepips - Дякую за рекомендацію книги. Одним із недоліків цього тесту користувальницького інтерфейсу є щасливий шлях, а потім одиничні тести, що охоплюють винятки, є те, що складніше написати ці тестові одиниці, якщо ви не робите тестові одиниці для всього. Тестування блоку допомагає підвищити перевірку вашої програми, підтримуючи низький рівень зв’язку, в той час як для тестів інтерфейсу користувача не потрібно, щоб код внизу був зв'язаний.

мав на меті писати одиничні тести, які повинні охоплювати все.
orangepips

1
@orangepips - я не згоден. "Рівень якості" / тести прийняття повинні перевірити все, що має значення для користувача .. тобто щасливі шляхи та альтернативні сценарії. Тестові одиниці часто використовують макети, заглушки та підробки ... а це означає, що існує ймовірність того, що тест блоку щасливого шляху пройде, але коли всі компоненти зібрані разом, тест щасливого шляху в кінці може закінчитися невдачею. Занадто багато шансів залишити долю.
Gishu

2
@orangepips - Моє заперечення стосувалося QA / Dev Exceptions / Happy розділення. Існують одиничні тести, щоб переконатися, що ви правильно будуєте. Тести на забезпечення якості / прийняття існують, щоб переконатися, що ви будуєте правильну систему. Тому всі сценарії, що стосуються бізнесу (наприклад, термін дії кредитної картки закінчився), повинні бути перевірені QA перед тим, як вони поставлять його під готовність до доставки. Рекомендую автоматизувати приймальні тести - Автоматизуйте виснажливий, рутинний матеріал 80% +. Окрім цього, винайдете вигадане ручне тестування без сценаріїв.
Gishu

9

Одне певне значення полягає в тому, що автоматичні тести можна запускати постійно; наприклад, щогодини на перебудову чи подібне. Це змушує будь-які помилки чи регресії швидко виходити на вулицю протягом декількох годин або днів програміста, який працює над кодом-порушником, це значно спрощує переключення контексту. Друга перевага постійного тестування полягає в тому, що він змушує вас тримати випробування в робочому стані; ніщо не є більш стомлюючим, ніж витратити перший тиждень тестового циклу на виправлення всіх застарілих тестів. Якщо ви можете автоматизувати їх, ви можете запустити їх у будь-який час і, регулярно запускаючи їх, ви зможете швидко виявляти помилки в тестах або коді.


7

Витрати на тести

Після написання автоматичного тесту його можна запустити на комп’ютері ціною кількох джоулів. Еквівалентний ручний тест вимагає, щоб людина, яка нараховує зарплату, розробляла список інструкцій.

Надійність тесту

Комп'ютерові можна довіряти виконувати ту саму процедуру тестування кожного разу. Людина схильна робити помилки і лінуватися.

Режими відмов тестування комп'ютера також набагато легше очевидні - він вийшов з ладу (повідомлення про тести перестали з’являтися), у нього була невелика помилка, яка спричинила помилковий результат тестування (повторно проведіть детермінований тест, і результат відрізняється). Якщо людина пропускає крок і перевіряє "ОК", як ми можемо сказати?

Довговічність випробування

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

Значення тесту

Комп'ютер може бути запрограмований для виведення результатів тестів у послідовному, легко аналізованому вигляді. Людина або робить введення даних, щоб генерувати те саме, або записує нотатки у вільній формі, для яких потрібен дайджест аналітика, розробника чи менеджера.


+1 для поняття звітності та посилання на джоулі.
orangepips

"Комп'ютеру можна довіряти виконувати одну і ту ж процедуру тестування кожного разу." Варто пам'ятати, що люди виявляють деякі помилки, які роблять справи несподівано. Досить часто інший тестер виконує один і той же набір інструкцій по-різному. Це добре, оскільки збільшує охоплення тестом, тому, хоча автоматизація тестування економить час і є прекрасним способом перевірити очікувані збої та регресії, він не може повністю замінити тестування на людях.

У такому випадку здається, що людям-випробувачам надається загальний перелік областей, які слід досліджувати, і що слід спробувати, а не детальні інструкції, які вони повинні вірно повторювати.
Філ Міллер

4
@TafT: лише бідні або нерозумні без тестування вручну, але ручне тестування з найвищим значенням, я вважаю, є дослідним, а не написаним натурою. Таким чином, поштовх до автоматизації того, що може бути.
orangepips

5

Здебільшого (залежно від покриття тесту) код без помилок, і я б сказав, що один з найбільших аргументів - це коли ви скажете своєму менеджеру, що ви можете написати тест на виявлену помилку, гарантуючи, що ви завжди будете знати, якщо в майбутньому той помилка повертається :)

На мою думку, тести для одиниць / інтеграції є найважливішими, хоча якщо ви застосовуєте певний зразок інтерфейсу, наприклад, MVC, цього достатньо для більшості проектів. Зазвичай я перевіряю всі дії на своїх контролерах / презентаторах і залишаю прив'язку даних до перегляду.

Звичайно, автоматичне тестування не замінює стару добру точку і натискайте на пригоди навколо вашої програми, намагаючись з'ясувати найсміливіші речі, які може зробити ваш користувач.

Існує також точка постійної інтеграції .

Ще одне - треба прагнути, щоб якість коду призводило до якості продукції, цінності бізнесу та ремонтопридатності - інакше це не має сенсу робити.


+1 для безперервної інтеграції з технічної точки зору. Але я не впевнений, як я бачу ваші пропозиції полегшити розмову з нетехнічним персоналом (наприклад, аналітиками). Крім того, які ваші думки щодо перевірки в декількох браузерах та ОС?
orangepips

Ну, я просто можу сказати свою сторону з позицій розробника, про аналітиків - я не дуже розумію їх ролі в дійсно великих проектах - так що ніяких реальних порад там немає. Щодо тестів крос-браузера на крос-операційну систему теж не мали шансів зробити.
Денис Біондик

2

Я думаю, що вам слід погодитись із магічними точками "нижчої вартості" та "більшої кількості функцій / одиниці часу" / меншої кількості циклу.

Однак перед тим, як складати справу, радимо подумати над вашою ситуацією. Ваше запитання змусило мене написати допис у блозі про потенційні мінуси автоматизованого тестування.


+1 за хорошу публікацію в блозі, хоча ці пункти - це щось, що було б добре піднято тут. Мене вражає, що головне питання полягає в тому, щоб не мати програмістів, які просто проходять рух. З цією метою, як ви пропонуєте підвищити якість або принаймні уникати атмосфери, яка перешкоджає цьому?
orangepips

гарне посилання. Дозрівання будь-якого програмного процесу вимагає багато роботи. Я думаю, що важливим наслідком є ​​також зменшення обороту, тому у вас достатньо людей, які мають пам'ять організації та довіру, щоб рухати щось подібне вперед.
orangepips

1

Тут є важливим фактором простота рефакторингу. Маючи гарний та читаний (!!!) тестовий блок, ви можете переробити систему, не нервуючи при цьому, порушуючи існуючі функціональні можливості.


це відрізняється від моєї точки №1?
orangepips

@orangepips: Ні, я пропустив цю частину. Вибачте: o) Все-таки важливо підкреслити
Morten

1

Ви повинні продати концепцію - вам потрібно уникати того, щоб їм сказати, що це поліпшить код. Якщо у них є якісь інвестиції в код, це негайно поставить їх проти вас / автоматичне тестування. Якщо вони добрі, вони також зрозуміють GIGO, тому не зрозуміють, чому ви вважаєте, що це не стосується.

Я також не можу продати це як аспект документації, такі речі, як Fitnesse, можуть зробити це добре, але поки вони не пережили це, можливо, важко уявити.

Сфери, на які я думаю, можуть продати далі

  1. Тестові одиниці можуть зайняти багато джгутів розробників - там, де ви створюєте додаток просто для того, щоб потрапити в область налагодження / тестування, не проходячи всі логіни / меню.

  2. Тести дозволяють налаштувати та легко повторити проблемні ситуації - не витрачаючи багато часу на налаштування тестових даних (особливо з використанням гідної глузуючої системи)

  3. Коли ви збираєте набори тестів BDD & UI - ви отримуєте набагато швидшу відповідь, якщо є прості перерви, ніж чекати наступного разу, коли тестер перегляне її

  4. Тести BDD та інтерфейсу можуть уникнути багаторазового натискання кнопок, щоб перевірити всі аспекти, на які могли вплинути ваші зміни, і заощадити вам про запам'ятовування всіх областей.

  5. Автоматичні побудови часто виділяють, коли хтось забув перевірити код

  6. Тести допомагають уникнути появи нових помилок.

  7. Тести підрозділів та гідне глузування означатимуть менше взаємопов’язаного коду та їх буде легше вирішити

Пам'ятайте, що ви намагаєтесь продати його, а не перетворювати їх на релігію - тому приймайте невеликі кроки і намагайтеся не перешкоджати їм анти-вас. Також знадобиться час, щоб вони налагодили та навчилися писати хороші тести.


+1 для коментаря до релігії. Я думаю, що тут є питання визначення того, для чого варто писати автоматизовані тести, і чітко відповідь - це не все. OTO, я думаю, нам краще мати хоча б якісь автоматизовані тестування. Можливо, справжнім ключем є визнання того, що принаймні в моїй організації вузьким місцем SDLC є QA. Тож мої власні зусилля спрямовані на вирівнювання цієї кривої зусиль шляхом розвитку, які беруть на себе певну відповідальність.
orangepips

Що стосується числа 3) це дозволяє створювати статистику та формувати звіти; видимо може бути великою точкою продажу. Цього тижня введення функції X спричинило збій 10 тестів, які ми виявили за Y час завдяки автоматизованому тестуванню - це приємна «виграш» для проекту, а також допомагає задокументувати ризики впровадження нових функцій у майбутньому.

1

Хтось повинен вважати, що існує проблема, перш ніж приймати запропоноване рішення цієї проблеми.

Автоматизовані тести можуть заощадити витрати на виправлення помилок, тому якщо ваші колеги не вірять, що витрати на виправлення помилок значні чи надмірні, їх важко переконати. Якщо ці витрати є високими або надмірними, але люди не вірять, що вони є, можливо, спочатку вам доведеться отримати переконливі дані про ці витрати.


1
так звідки ви думаєте, що ця інформація повинна надходити?
orangepips

0

Те, що люблять компанії, - це підвищення вартості та зниження вартості. Ви повинні пояснити, як автоматичне тестування підвищить вартість, оскільки це додасть додаткових витрат.

Якщо ваш код модульний, його можна буде повторно використовувати. Це означає, що тести не потрібно писати заново, і ви можете просто працювати над цим наявним кодом.

Якщо є застарілі проекти, автоматичне тестування значно спрощує рефакторинг. Технічний борг повинен бути погашений в якийсь момент.

Аргументація документації, яку ви надаєте, не дуже добре. Різниця між актуалізацією тестів та оновлюваною документацією - лише звичка.


На мій досвід повторне використання коду - це якась програма програмного забезпечення, яка не планується. Іншими словами, це було, поки я не переписав те саме на третій, четвертий чи п’ятий раз, що я справді зрозумів, як зробити його багаторазовим. Тому я думаю, що менеджери часто відчувають опік від поняття програмістів про "дайте мені більше часу, щоб це правильно скласти, і це призведе до економії витрат", оскільки на практиці я вважаю це загально помилковим підходом.
orangepips

0

"Те, що я шукаю допомоги, полягає в тому, щоб сформулювати свою цінність для команди програмістів, аналітиків, менеджерів і тестерів. За допомогою автоматизованих тестів я не думаю, що мені потрібно розрізняти одиничні тести (наприклад, JUnit), BDD ( наприклад, JBehave, Fitness) та інтерфейс користувача (Selenium, Watir), тому що я думаю, що всі вони мають подібну цінність (але не соромтесь написати відповідь, яка не погоджується :)) "

Гаразд, я прийму це виклик;)

Я здебільшого працюю з програмістами та контролем якості, а мої інструменти - це рубін, рейки, тестувальник, rspec, жасмін та селен.

Інструменти BDD / TDD для rspec та testunit є частиною програмування. Ви не розбиваєте їх і не розмовляєте про них окремо керівництву, ви не відкладаєте їх через брак часу, ви включаєте їх у всі свої часові оцінки. Якщо насправді підштовхували, запитували, скільки часу у вас людей, щоб пояснити їм інформатику та програмування. Я не використовую ці тести для передньої частини

GUI / UI / Жасмін / Селен. Це різні. У мене це зроблено людьми, які мають досвід програмування. Ми переконуємося, що тести написані як можна більш надійними та заснованими на вмісті, не макеті. (Можливо, нову) вартість цього слід пояснити як зміщену вартість . Замість того, щоб згодом платити зі зламаним програмним забезпеченням, втраченими клієнтами та дорогими виправленнями, ви платите набагато менше (відносно) за кілька простих практик.


0

Я думаю, що головне - говорити про конкретні категорії тестів, які ви будете створювати, а не про "автоматизоване тестування" в цілому. Останнє може бути трохи туманним і тривожним, і надто легко придумувати приклади, де це було б марною тратою часу.

Я завжди рекомендую розділити свої тести на 4 групи (детальніше тут ). Дотримуйтесь мене тут, я довідаюся, як це допоможе вам за мить продати тестування іншим.

  1. Тести вашої основної функціональності . Тобто, для інструменту моніторингу веб-сайтів це будуть тести сповіщень, які повинні спрацьовувати для веб-сайтів, які ви відстежуєте. Ці тести гарантують, що цей матеріал ніколи не ламається.
  2. Димові тести для всієї вашої програми . Наприклад, використовуючи Selenium для навігації по всіх посиланнях / кнопочках у веб-додатку та переконайтесь, що немає помилок з боку сервера. Ці тести дозволяють вам не витрачати час тестувальників на явно пошкоджені склади.
  3. Тести будь-якого крихкого коду . Тобто, за цей старий модуль ніхто не хоче торкатися, або складний фрагмент коду, який, здається, завжди має в ньому помилки.
  4. Тести, які розробники хотіли написати, щоб підтримати їх роботу . Тому що іноді тести корисні, коли щось пишеш, але не потрапляєш до категорій вище.

Розбивши свої тести на ці категорії, тепер ви можете вести іншу дискусію. Візьміть перші три групи (четверта все одно на власний розсуд) і запитайте, чи люди вважають, що тести на ці фрагменти коду доцільні? Якщо ви не можете домовитися, можливо, ви зараз не включаєте ці тести. Якщо ви можете, тобто якщо люди погоджуються, що тести навколо основних функціональних можливостей, які виконуються при кожній комісії, корисні, тоді почніть додавати їх.

Інша група, яка може бути корисною, - це тести, які важко або забирають багато часу вручну . Тут має бути досить легко пояснити вигоду з точки зору економії часу на тестування вручну або отримання тестування речей, які пропускаються через брак часу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.