Я працював над великою системою фінансових операцій для банку, який доглядав за пенсіями та інвестиціями. Після 15 років зміни функцій вартість ручного регресійного тесту зросла до 200 000 доларів за випуск. (10 млн. LOC, $ 10 млн у день). Ця система також взаємодіє з 19 іншими системами навколо компанії, переміщуючи безліч даних. Ця система була реалізована в Java.
Однак ми спостерігаємо, що чим більше ми повторно використовуємо, тим більше збільшуються витрати на тест регресії. (Причина в тому, що вам потрібно "протестувати код, який ви торкаєтесь" - і повторно використаний / спільний код впливає на безліч місць при його торканні. Тому, незважаючи на "DRY - не повторюйте себе" - тобто не копіюйте та не вставляйте код - ми спостерігаємо фінансовий стимул для копіювання та вставки коду. Це полягає у зменшенні витрат на тест регресії, оскільки ми не хочемо змінювати код, який можна поділити, оскільки це спричинить великий вплив регресійного тесту.)
Моє запитання: чи існує принцип інженерії програмного забезпечення, який описує залежність між витратами на повторне використання та регресійними тестами?
Причиною, що я задаю це питання, є те, що, мабуть, є корисна вигода від розкладання системи на менші частини, які підлягають тестуванню.
Припущення:
"Тест регресії" означає "тест на прийняття" - тобто інша група проводить час для написання нових і повторного використання старих тестів проти системи від імені бізнесу, включаючи середовище та налаштування даних.
Я знаю, що реагування на коліна на велику вартість тесту на регресію - це "більш автоматизовані тести". Це хороший принцип. У цьому середовищі є пара викликів.
(a) Автоматизовані тести є менш корисними через кордони системи, за винятком випадків, коли ця система також має високе автоматизоване покриття тесту. (Сфера впливу виклику).
(b) Культурно важко набирати обертів часу програміста або капітальних вкладень на високому автоматизованому тестовому покритті, коли ваша система вже велика і складна.
(c) Витрати на підтримку автоматизованих тестів приховані за проектом, і тому вони легко відкидаються на рівні проекту.
(d) Це лише культурна реальність роботи в банку.
(д) Я працюю над тим, щоб вирішити цю проблему по-іншому (розкладання).