Чи покладається методологія тестування програмного забезпечення на недосконалі дані?


45

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

Однак виявляється, що цих даних ніколи не було . Дані, наведені в Code Complete, очевидно, не показують такого співвідношення витрат / часу розвитку, а подібні опубліковані таблиці лише показали кореляцію в деяких особливих випадках та плоску криву в інших (тобто відсутність збільшення вартості).

Чи є незалежні дані, які підтверджують це або спростовують це?

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


Це звучить логічно, оскільки помилка, виявлена ​​пізніше, у більшості випадків також пов'язана з пошкодженням даних. Більше того, пошкоджені дані коштують бізнесу чимало, якщо це виявлено згодом у процесі виправлення помилки.
Е.Л. Юсубов

8
@ElYusubov Це дійсно так. Але здоровий глузд може бути дуже оманливим. Наші розуми легко обманюються очевидною логікою, коли насправді навпаки. Ось чому інженерія програмного забезпечення на основі доказів настільки важлива.
Конрад Рудольф


2
Для запису (і згаданого у моїй відповіді), найдавніша згадка про це, яку я зміг знайти, знаходиться задовго до завершення коду. Робота Фагана і Стіфенсона (незалежно) 1976 року - це найдавніша згадка про це, яку я можу знайти. Перше видання Code Complete було опубліковано до 1993 року, майже через 20 років. Я б очікував, що робота Баррі Бума в 1980-х призвела до зростання популярності цієї ідеї - робота Бома дуже вплинула на процес розробки програмного забезпечення в 1980-х і навіть в кінці 2000-х.
Томас Оуенс

1
Це аксіоматично, що будь-яке твердження про статистику інженерії програмного забезпечення є помилковим, включаючи це. (Помилки, які ви знайдете пізніше, - це, як правило, більш складні помилки. А їх виправлення ускладнюється тим, що "елементи керування", які встановлюються на місці, є пізнішими виправленнями.)
Daniel R Hicks

Відповіді:


25

Чи покладається методологія тестування програмного забезпечення на недосконалі дані?

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

Чи є незалежні дані, які підтверджують це або спростовують це?

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

Отже, припускаючи, що у нас все ще виникає проблема з виправданням цих цифр:

як це впливає на методологію розробки програмного забезпечення?

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

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

  • що власність більшості практичних програмного забезпечення не заважає збирати достатньо корисних та релевантних даних;
  • що висновки, отримані з цих даних, є загальноприйнятними (оскільки інженерія програмного забезпечення - професія кваліфікована, особистісні відмінності у досвіді, здатності та смаку можуть вплинути на таку застосовність);
  • що інженери програмного забезпечення "у цій галузі" здатні та мотивовані використовувати отримані таким чином результати; і
  • що ми насправді знаємо, які питання ми повинні задавати в першу чергу. Це, очевидно, найбільший момент: коли ми говоримо про вдосконалення інженерії програмного забезпечення, що ми хочемо вдосконалити? Що таке вимірювання? Чи покращення цього вимірювання насправді покращує результат, чи це гра в систему? Наприклад, припустимо, що керівництво моєї компанії вирішило, що ми будемо зменшувати співвідношення між фактичною вартістю проекту та прогнозованою вартістю проекту. Я міг би просто почати множувати всі мої кошториси на коефіцієнт видумки, і я досягну цієї "мети". Чи слід тоді стати стандартною галузевою практикою для підробки всіх оцінок?

Дивовижна метавідповідь про доказову техніку. Дякую.
Конрад Рудольф

4
Чорт, я щойно зрозумів, що це іде прямо з уст коня. Хе-хе. Дивовижно.
Конрад Рудольф

1
У мене виникає відчуття, що всі трактують використання "помилкових даних" як "абсолютно неправдиві, правда навпаки", але я відчуваю, що ваша позиція просто вказати, що це може бути неправдою. Це правильно?
Даніель Б

3
@DanielB Правильно. Покажіть мені докази того, що насправді це неправильно, і я можу змінити свою думку; до цього часу я лише знаю, що це не демонструється правильно.

1
@GrahamLee Я бачу вашу думку (просто подумайте, що фразування могло бути трохи надмірно агресивним). З цікавості я знайшов тут папір Фагана , і там написано: "... дозволяє переробляти ... біля їхнього походження ... в 10 до 100 разів дешевше, ніж якщо це робиться в останній половині процесу". Я не бачу цитат поблизу цього тексту.
Даніель Б

8

З мого боку, відповідь на питання "як це впливає на методологію розробки програмного забезпечення" - "не так багато".

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

Незалежно від фактичної вартості годин розробника, щоб виправити помилку, виявлену кінцевим користувачем, існує нематеріальна вартість підтримання стереотипу, який кодери смокчуть у тому, що вони роблять. Коли користувач знаходить помилку, винна розробник. Тому кожна помилка, яку знайде кінцевий користувач, зменшує довіру користувача до системи. Це як подорожувати будинком, який ви хочете придбати, і побачити пляму води, що відображається через стелю в одному куті будинку. Це саме по собі є легким виправленням, але вам цікаво, що це спричинило, і що ще могло вплинути на цю першопричину. Чого вартий ваш спокій? Можливо, вам доведеться зірвати стіни назад до шпильок і візуально оглянути все, щоб переконатися, що пляма було від ізольованого випадку, який був виправлений. Знаючи, що це може бути можливим, ви не дуже впевнені в будинку. Аналогічно

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


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

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

6

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


Я щойно витягнув свою копію Software Engineering Economics і знайшов посилання на дані, що стоять за цією діаграмою, в главі 4. Він цитує "Інспекції дизайну та коду для зменшення помилок у розробці програми" від ME Fagan ( IEEE , PDF від UMD ), EB "Управління інженерією програмного забезпечення" Далі, "Аналіз ресурсів, використовуваних у розробці програмного забезпечення захисних систем" ( ACM ), і "декілька проектів TRW" Делі .

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

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

Bohem також розглядав два менші, менш формальні проекти та виявив збільшення собівартості, але набагато менш значне, ніж у 100 разів, визначене у великих проектах. Зважаючи на діаграму, різниці виявляються в 4 рази більшими для виправлення дефекту вимог після роботи системи, ніж на етапі вимог. Він пов'язував це з меншою кількістю запасів предметів, що складаються з проекту, та зниженою формальністю, що призвело до можливості швидшого впровадження простішого виправлення.

Виходячи з Boehm в економіці програмного забезпечення, таблиця в Code Complete є досить роздутою (низький кінець діапазонів часто занадто високий). Вартість, щоб внести будь-які зміни в рамках фази, дійсно є 1. Екстраполюючи з рисунка 4-2 в Економіці програмного забезпечення, зміна вимог повинна бути в 1,5-2,5 рази в архітектурі, 2,5-10 в кодуванні, 4-20 в тестуванні і 4- 100 в обслуговуванні. Сума залежить від розміру та складності проекту, а також від формальності використовуваного процесу.


У Додатку Е Баррі Бума та Річарда Тернера " Збалансованість спритності та дисципліни" міститься невеликий розділ про емпіричні висновки щодо вартості змін.

У вступних параграфах цитується Кента Бека Екстремальне програмування, пояснене, цитуючи Бека. У ньому йдеться про те, що якщо вартість змін зростатиме повільно з часом, рішення приймаються якомога пізніше, і буде реалізовуватися лише те, що потрібно. Це відоме як "плоска крива", і саме це рухає Екстремальне програмування. Однак попередня література виявила «круту криву», коли малі системи (<5 KSLOC) мали зміну 5: 1, а великі системи мали зміну 100: 1.

У розділі цитується Центр емпірично заснованої програмної інженерії Меріленду (за підтримки Національного наукового фонду). Вони здійснили пошук доступної літератури і виявили, що результати, як правило, підтверджують співвідношення 100: 1, а деякі результати вказують на діапазон від 70: 1 до 125: 1. На жаль, це, як правило, проекти "великого дизайну на передній план" та керовані ними послідовно.

Є зразки "малих комерційних Java-проектів", які виконуються за допомогою програми Extreme Programming. Для кожної історії було відстежено велику кількість зусиль для виправлення помилок, нового дизайну та рефакторингу. Дані показують, що в міру розвитку системи (впроваджено більше історій користувачів) середні зусилля мають тенденцію до збільшення нетривіальної швидкості. Зусилля у рефакторингу збільшуються приблизно на 5%, а зусилля на фіксацію зусиль збільшуються приблизно на 4%.

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

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


Метрики та моделі Стівена Кан в інженерії якості програмного забезпечення має розділ у розділі 6 про економічну ефективність видалення дефектів фази.

Він починає, цитуючи статтю Фагана 1976 року (також цитується в програмі Економіка програмного забезпечення), щоб стверджувати, що переробку, виконану у дизайні високого рівня (архітектура системи), низькорівневому дизайні (детальний дизайн) та впровадженні, може бути в 10 і 100 разів менш дорогим. ніж робота, виконана під час тестування компонентів та системного рівня.

Він також цитує дві публікації Фрідмана та Вайнберга (1982 і 1984), які обговорюють великі системи. Перший - "Довідник покрокових інструкцій, інспекцій та технічних оглядів", а другий - "Огляди, покрокові інструкції та інспекції". Застосування оглядів на початку циклу розробки може зменшити кількість помилок, які досягають етапів тестування, в 10 разів. Це зменшення кількості дефектів призводить до зниження витрат на тестування на 50% до 80%. Мені довелося б прочитати дослідження більш докладно, але виявляється, що вартість включає також пошук та виправлення дефектів.

У дослідженні Remus 1983 р. "Комплексна перевірка програмного забезпечення з огляду на перевірки / огляд" було вивчено вартість усунення дефектів на різних фазах, зокрема перевірки дизайну / коду, тестування та обслуговування, використовуючи дані лабораторії Санта-Тереза ​​IBM у Каліфорнії. Наведені результати вказують на коефіцієнт витрат 1:20:82. Тобто, дефект, виявлений при перевірці дизайну чи коду, має змінитись у вартість 1. Якщо той самий дефект уникне тестування, він обійдеться у 20 разів дорожче. Якщо він уникне повного шляху до користувача, він збільшить витрати на виправлення до 82. Кан, використовуючи зразкові дані з IBM Rochester, Minnessota, встановив, що вартість усунення дефектів для проекту AS / 400 є аналогічною о 1:13:92. Однак він вказує, що збільшення вартості може бути пов’язане із збільшенням труднощів у пошуку дефекту.

У публікаціях Гілба 1993 р. ( "Огляд програмного забезпечення" ) та 1999 р. ("Оптимізація специфікації інженерії програмного забезпечення та процесів контролю якості") про перевірку програмного забезпечення підтверджуються інші дослідження.


Додаткову інформацію можна знайти на сторінці Construx, присвяченій збільшенню витрат на дефекти, яка містить ряд посилань на збільшення вартості виправлення дефектів. Слід зазначити, що Стів МакКоннелл, автор Code Complete, заснував і працює для Construx.


Я недавно слухав бесіду, Real Software Engineering , дану Гленн Vanderburg в Lone Star Ruby - конференції в 2010 році він дав той же розмову в шотландської рубіновим конференції і Erubycon в 2011 році, QCon Сан - Франциско в 2012 році , і O'Reilly Software Architecture конференції у 2015 році . Я слухав лише Конференцію самотньої зірки Рубі, але розмова розвивалася з часом, коли його ідеї були вдосконалені.

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

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


@AndresF. Однією з проблем, які я виявив у відстеженні цих цитат, є те, що Боссавіт назвав проблемою «голка в копиці сіна» у книзі, з якою ви пов’язані. Посилання на книгу - це велика неприємність - навіть якщо вона все ще надрукована, коли ви переходите читати цитування, у вас є кілька сотень сторінок, щоб прочитати той маленький самородок, який підтримує претензії автора цитування.

3

Його просто проста логіка.

Виявлена ​​помилка в специфікації.

Case : Error found while reviewing UseCase/Function spec.
Actions:
        Rewrite paragraph in error.

Case : Error found during unit test.
Actions:
        Fix code.
        (Possibly) rewrite paragraph in spec.
        rerun unit test.

Case : Error found in integration test.
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.

Case : Error found in UAT
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        build new release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.


Case : Error found in production
        Fix code.
        (possibly) rewrite paragraph in spec.
        rerun unit test.
        Build release.
        rerun integration test for whole system.
        deploy release to UAT.
        rerun UAT tests.
        deploy release to production.

Як видно, чим пізніше виявлена ​​помилка, чим більше людей залучається, тим більше роботи потрібно повторити, і в будь-яких "нормальних" умовах робота з папером та бюрократія зростають експоненціально, коли ви потрапляєте на UAT.

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

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


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

2
Але проблема полягає в тому, що виправлення помилок може мати несподівані побічні ефекти, тому, якщо ви не зможете абсолютно гарантувати, що виправлення вплине лише на певний підмножина компонентів, які ви застрягли в переробці SIT UAT і т.д. змінити.
Джеймс Андерсон

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

@KonradRudolph Не могли б ви детальніше розробитись? Ця публікація також є моїм розумінням, і я не бачу, чому час матиме значення, а фаза - ні. Для мене міра часу в проекті - це ваша поточна фаза (а іноді ітерація, що обробляється часом, щоб пройти всі етапи). Я не бачу різниці між роботами, виконаними в 3-й день детального проектування, і в День 300 - детальний дизайн-проект не використовувався для виготовлення будь-яких інших робочих виробів, тому дефект, введений у детальний дизайн, існує лише в одному місці і тільки вимагає змін там. Я не бачу, як має значення проходження днів.
Томас Оуенс

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

2

Я вважаю, що це стосується управління ризиками та економіки. Яка вартість зменшення кількості дефектів проти теперішньої вартості впливу майбутніх дефектів. Траєкторія жовтого птаха, що злегка відходить у Angry Birds, не зрівняється з відключеною траєкторією крилатої ракети Tomahawk. Розробники програмного забезпечення в будь-якому проекті не можуть приймати рішення на основі цієї таблиці. У зв'язку з цим нічого не змінюється.

Я вважаю, що це, як правило, працює через зворотний зв'язок, дорогі помилки в цій галузі змушують компанії посилювати свої процеси якості, тоді як жодні скарги на місцях не приносять компаніям їх розслаблення. Тому з часом компанії з розробки програмного забезпечення будуть схильні конвергуватись або коливатися навколо чогось, що для них працює (+/-). Code Complete може вплинути на деякі початкові значення або може трохи потягнути компанії так чи інакше. Компанія, яка витрачає занадто багато зусиль на усунення дефектів, про які ніхто не помітив, ймовірно, втратить бізнес конкуренту, який має більш оптимізований підхід. З іншого боку, компанія, яка випускає баггі-продукти, також вийде з бізнесу.

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

Систематичний огляд літератури дослідження вартості програмного забезпечення (2011)

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

Оцінка вартості якості програмного забезпечення (1998)

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

Поведінка витрат на програмні дефекти (2004)

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

Тестове покриття та дефекти після підтвердження: багаторазове дослідження (2009)

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

Подолання розриву між процесом тестування програмного забезпечення та цінністю бізнесу: дослідження справи (2009)


0

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

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

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

Можливість розуміння коду значно розширюється за рахунок використання перевірених інструментів інженерії програмного забезпечення, які, на жаль, в основному недостатньо або неправильно використовуються. Використання правильного рівня абстрагування, модульність, посилення згуртованості модуля та зменшення з’єднання модулів є критичними інструментами для подолання складності, які потребують належного використання. Кодування інтерфейсів або, наприклад, OOP, уникнення надмірного використання спадкового над складом, упаковка за ознаками - це деякі методи, яким часто приділяється недостатня увага при кодуванні.

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

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

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


Я стою біля своєї відповіді навіть з негативною оцінкою. Нещодавно я взяв інтерв'ю у кандидата, який підтримує інструмент онлайн-банкінгу одного з найкращих банків. Під час випадкового чату він запропонував не використовувати його через велике повторне використання копіювальної пасти та інакше сором’язливої ​​структури. На попередній роботі я був розробником у такій компанії, яка пише інструменти аналізу для таких банків, як Lehman, MS, UBS, і нам довелося діяти як доменні експерти, з'ясовуючи наступне, що потрібно поставити на іншу галузь, якнайбільше з розрідженої документації. Навіть якщо не погоджуєтесь із конкретними практиками, загальне повідомлення про: галузь є правдою.
Михай Даніла

-1

Ще одна відповідь! Цього разу для вирішення заголовного питання "Чи покладається морфодолігія програмного забезпечення на хибні дані".

Справжня відповідь - "даних немає". Оскільки у великого надійного масиву даних щодо програмних проектів немає дефектів, часу на успіх на ринку тощо.

Усі спроби зібрати такі дані були недофінансовані, статистично недостовірні або ,, настільки специфічні для конкретного проекту, що не можна отримати загальних висновків.

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

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

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


1
Ні, я цього не купую. По-перше, є дані, хоча ви, можливо, маєте рацію, що це хибно. Але це вимагає індивідуальної критики кожного набору даних, а не загального звільнення. І я дуже підозрюю твердження, що даних ніколи не буде, і таких причин, як "це занадто суб'єктивно". Це, по суті, аргумент від браку фантазії . Я не претендую на те, що збирати достовірні статистичні дані тут просто, але я стверджую, що це цілком можливо. В інших сферах успішно аналізуються способи складніших систем.
Конрад Рудольф

@Konrad - візьміть щось основне і просте, як-от "кількість дефектів", деякі магазини рахують помилки тестових одиниць, деякі магазини не починають відслідковувати дефекти до UAT, деякі магазини відстежують лише дефекти коду, деякі магазини містять документацію, конфігурацію та ін. сценарії розгортання в процесі відстеження дефектів. Чи неправильний колір тла вважається дефектом? Деякі проекти відслідковуватимуть це як дефект, інші - ігноруватимуть його.
Джеймс Андерсон

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