Як великі компанії розробників програмного забезпечення перевіряють на наявність помилок у своїх програмах?


15

Мені було цікаво, як великі компанії розробників програмного забезпечення перевіряють на наявність помилок у своїх програмах.

Вони просто тестують його на кількох комп'ютерах?


13
Звільняючи їх. (судячи з баггі-кучі ...., які виходять з великих установ)
Орлінг

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

Чому, на вашу думку, для великих компаній це відрізняється від малих?
JohnFx

Відповіді:


30

Ось деякі методи, якими користується Google.

  1. Найміть хороших розробників, які, ймовірно, вироблять надійний код.
  2. Тест блоку сильно.
  3. Використовуйте огляд коду .
  4. Налаштуйте безперервну збірку для вирішення проблем інтеграції.
  5. Виділили відділи забезпечення якості. Мається на увазі як тестування людей, так і автоматизовані програми (наприклад, за допомогою Selenium), що імітують кінцевих користувачів.
  6. Здійснюйте моніторинг у виробництві, щоб отримати свідчення про те, що речі погано себе ведуть.

Я класифікував це в тому, що я підозрюю, що це порядок зниження ефективності у виловленні помилок.


2
Хоча це і не погана відповідь, ви використовуєте безліч термінологій, таких як "QA", "unit test" та "суцільна збірка", які, ймовірно, невідомі тому типу людини, який би задав таке питання. Було б краще, якщо ви пов’язали або дали визначення.
Гейб

@gabe: я додав покажчики до використовуваної термінології.
btilly

3
+1 - Насправді це досить хороший порядок (1-> 6) того, коли найкраще (тобто найдешевше, за часом та складністю) ловити помилок.
ozz

1
можливо також тестування на зручність, перш ніж стрічка 90% запитів на функцію слова була для функцій, які слово вже було, користувачі просто не могли їх знайти
jk.

@jk: чия статистика це? цитування, будь ласка.
JBRWilkinson

19

Більші компанії зазвичай мають цілі підрозділи Q / A, які відповідають за тестування коду та переконують, що він працює так, як належить. Зазвичай так само, як ви описали - купа людей, які випробовують багато машин. Іноді тести автоматизовані, іноді - ні. Див. Забезпечення якості - Вікіпедія

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

Більш дрібні компанії, як та, в якій я зараз працюю, використовують практику Agile Testing


1
Так, і люди з QA складають плани тестів.
Робота

+1: Це саме так, як ми це робимо, тестова команда (на якій я зараз працюю) пише тестові плани та записує весь тестовий код, за винятком тривіальних одиничних тестів (devs пише ті, деякі з яких практикують TDD, але це не доручено). Ми зосереджуємось на прийнятті, інтеграції та регресії. Коли розробники знайдуть помилки, вони записують його, виправляють, і ми перевіримо його та напишемо автоматизацію для цього.
Стівен Еверс

18

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

Загалом команда зрілого розвитку бере участь у наступних заходах до 1; мінімізувати введення нових помилок у систему та 2; знайти помилки в існуючій системі.

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

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

Тестування прийняття: Тести приймання пишуться для тестування вимог користувачів. Зазвичай вони просто перевіряють "щасливий шлях". У моїй команді ці тести розроблені, щоб показати, що якщо користувач використовуватиме функціонал, як він був розроблений для використання, у них не виникне проблем. Може бути ручним або автоматизованим.

Функціональне тестування: Ці тести схожі на тести прийняття, але вони також перевіряють «нещасний шлях». Ці тести означають перевірити не настільки очевидні сценарії. Може бути ручним або автоматизованим.

Регресійне тестування: Цей термін ми використовуємо для повного тестування системи перед її випуском для клієнтів. Ручний або автоматизований.

Тестування горили: (лише вручну). Це такий вид тестування, коли дуже розумні люди навмисно намагаються зламати додаток.

Тестування ефективності Намагається переконатися, що продуктивність є прийнятною та не погіршується з часом. Зазвичай автоматизовані.

Тестування на стабільність: Ці випробування розроблені так, щоб система залишалася стабільною з часом. Автоматизовані.

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

Звіти про покриття коду: Показує, яка частина вашого коду перевірена. Код, який не має тестового покриття, швидше за все порушиться.

Різні інструменти, що аналізують код. Вони зазвичай показують, де код потрібно повторно врахувати, щоб зробити його менш схильним до потенційних помилок.

Парне програмування: два розробника працюють разом, щоб забезпечити функціональність. "Згурчена пара краща за суму її частин."

Найважливіше відібрати: автоматизація та безперервна інтеграція .


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

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

4

Це залежить від компанії та від продуктів, які вона розробляє.

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

По-друге, багато компаній мають відділи забезпечення якості, які відповідають за перевірку поведінки. Це особливо часто зустрічається у фінансах (де помилки можуть бути дорогими, а правила перевірки складними), але існує також у компаніях, які продають продукти користувачам, де виклики можуть бути дорогими (наприклад, Intel, Microsoft тощо).

По-третє, коли це можливо, компанії роблять Dogfooding (мають власні користувачі, які використовують продукт всередині), а потім випускають обмежені бета-версії. На цьому етапі виявлено багато помилок. Наприклад, люди, які працюють у Microsoft, використовують новіші внутрішні версії Office та Windows та DevStudio, ніж ті, що у вас є поза. Тоді обмежені групи користувачів або підрядні компанії отримують вибірку. Так само в Google ми використовуємо внутрішні версії GMail та Docs до випуску. Ігрові компанії організовують відкриті бета-версії для тестування своїх продуктів та завантаження серверів тощо.


1

Звичайно, відповідь - "Це залежить", але я наведу зразок з мого найбільшого проекту досі, в який в пік було залучено близько 50 розробників.

Основна настройка: Запуск програмного забезпечення для обробки великої кількості даних за допомогою BizTalk.

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

Наступним кроком була щотижнева збірка віртуальних ПК, де тестувальники виконували серію в основному автоматизованих тестів "в кінці" на потоці даних на основі специфікаційних документів для кожного компонента.

Після цього той же Віртуальний ПК збагатився деякими бізнес-даними, досить близькими до реальних, і знову перевірився на деяких конкретних випадках використання.

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

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

Після встановлення у виробничому середовищі ми провели там навантажувальні та стресові тести, щоб перевірити загальну стабільність (не те, що слід сприймати з легкістю, коли ви працюєте на 10 серверах BizTalk, 8 SQL серверах та купі іншої спеціалізованої апаратури, як прискорювач XML і спеціальний Архів - все це згруповано, звичайно).

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


1

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

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

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

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

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

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

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


0

Ну, я ненавиджу бути цинічним, але з кількістю відкритих помилок в певній операційній системі «пристроїв» здається, що чим більша та багатша компанія, тим більше помилок вони здатні створити та доставити кінцевому користувачеві. Якщо програмне забезпечення ніби працює і виглядає круто, вони все одно просто випускають його. Якщо менеджери думають, що вона готова, то вона готова. Ось тоді справді неприємні помилки починають виходити з дерев’яних виробів, і кінцевими користувачами стають морські свинки. Через десять років, більшість помилок буде відпрацьовано (і кілька додано для гарної міри), і компанія буде готова перейти до наступної великої ідеї.

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