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


18

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


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

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

6
Дуже мало прийомів розробки програмного забезпечення супроводжується науковими доказами такого роду, коли можна вказати на дослідницьку роботу і остаточно заявити, що методика цінна. Отже, більшість із нас покладаються на досвід та аналіз витрат / вигод для обґрунтування наших рішень. Ви вибираєте таку методику, як ін'єкція залежності, тому що вам потрібні переваги, які вона надає, і тому що ці переваги перевищують витрати. Справді, що числення завжди є дещо суб'єктивним.
Роберт Харві

1
@DocBrown Чесно кажучи, я не бачу це ні як дублікат, ні як поза темою. Обґрунтування та ефективність практики розвитку здається дуже актуальною для SE.SE. І я збираюся надати відповідь. ОП, напевно, не сподобається моїй відповіді ... але, я думаю, варто мати об'єктивну відповідь (майже відповідь) на те, чи можуть ТПО та прем'єр-міністри очікувати, що продуктивність їхніх команд магічним чином зросте (або рівень їх помилок знизиться) як як тільки хтось кричить "введення залежності".
svidgen

3
@gnat, мабуть, варто розпочати чітке мета-запитання на "доказові" запитання, які були додані до сфери метавідповіді "поза сайтом" задовго після того, як я його відкликав. Звичайно, просити нас знайти статистику, мабуть, не корисно. Але, суть питання цілком розумна. І, мені здається, лінь так швидко відмовитись від теми. У коментарях тут конкретно створюється враження, що ми - купа догматиків, які просто не можуть відстояти нашу практику. Що ж, можемо. І ми повинні.
svidgen

Відповіді:


14

TLDR

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


А тепер, з набагато більшою багатослівністю ...

Чи є емпіричні докази?

Звичайно, певно. Або хоча б можливо. Але, кого це хвилює? Це не актуально.

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

Отже, як ми знаємо, що ін'єкція залежності залежить від цінності ?

Гарне питання! ВЕЛИКИЙ питання, насправді. І я з вами - ненавиджу витрачати час і душевні зусилля на догматичні "найкращі практики", які ніхто не може виправдати. Отже, я радий, що ти запитав.

Ага. Але, ось проблема, яка бентежить ... Загалом , ви цього не знаєте. І, що ще більше бентежить, ваш код може насправді нічим не покращитись, запровадивши DI.


GASP!

    ⊙▃⊙     . . .      (╯°□°)╯︵ ┻━┻

...


Отже, можливо, зараз вам цікаво ...

Чому я повинен турбуватися, "що речі не були доведені ер-нутін!"

Перш за все, давайте всі - з кожної сторони дебатів - просто влаштуємось. Я можу вас запевнити, що між догматизмом і скептицизмом лежить прекрасний рай розуму та безтурботності. (І випадковий ексцентричний пост SE.SE.) І, POAP може привести вас туди.

... Під яким я маю на увазі Принцип застосування Принципів :

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

Вам потрібно зрозуміти, чому ви робите те, що робите!

(POAP не звільняється від POAP.)

(Я б сказав, "акцент мій", але це все одно з мого власного "блогу". Отже, це все моє!)

Дозвольте мені ще раз зазначити головний момент: Вам потрібно зрозуміти, чому ви робите те, що робите.

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

Якщо корисність DI або ООН -helpfulness вам не очевидно , - або , по крайней мере , за межами ваших міркувань повноважень - ви або не розумієте , DI, чи ви не розумієте , ваші власні проблем.


Розглянемо реальну "притчу".

Нам потрібно побудувати коробку. У нас є дрова. У нас цвяхи. І, у нас є два інструменти: стандартний кінцевий молоток і викрутка .

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

І якщо ви коли-небудь бачили, щоб хтось використовував будь-який інструмент раніше, і якщо ви розумієте, як виглядає коробка, рішення очевидно.

Телекінез!

Помилка ... хм ...


Так, яка проблема вирішує впорскування залежностей?

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

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

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

Отже, ревний хрестовий похід для ін'єкцій залежностей ...

К. Але я можу передати аргументи просто чудово. Чому каркаси ?

Як я розумію, рамки DI в першу чергу вирішують проблему нарощування котлоагрегатів (через надмірний DI, IMO) - особливо, коли для всіх модулів, які їх вимагають, існують стандартні залежності "за замовчуванням". Рамки DI роблять магічні (потенційно навіть пустотливі!) Речі, щоб проскочити ті залежності за замовчуванням, коли вони явно не передаються в точці виклику. (Той же ефект, що і Локатор послуг, коли використовується таким чином, пам’ятайте!)

Введення залежності в якості "дисципліни" насправді важко поправити. Справа не в тому, використовувати DI чи ні; справа в тому, щоб знати, які залежності можуть змінитись або потребуватимуть глузування та введення їх . І тоді, вирішувати, чи підходить DI краще, ніж якась альтернатива, як-от Місце розташування сервісу ...

Але, я закликаю вас до нагугліть , може побачити цей SO відповідь , можливо , поговорити з супер-дослідний і успішний розробник у вашій галузі, і розмістити приклади конкретних для CR.SE .


4
Ви нюхали якийсь клей @ CandiedOrange? +1 для принципу прикладних цілей.
Роберт Харві

1
@RobertHarvey Бажаю, можу сказати, я новий, про який клей ми говорили! Я мав давню вендету проти віросповідної інженерії ... Якщо тільки ви не маєте на увазі розповідь - можливо, навіть занепокоєння - природи посади?
svidgen

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

3
@RobertHarvey не впевнений, про яке з моїх численних клеїв ви посилаєтесь, але я вважаю, що погоджуюся на кожне це слово. Думати, що молоток смокче, коли ти його використовуєш на гвинтах, легко.
candied_orange

Почав редагувати, щоб включити докладніші відомості про DI конкретно та передати TLDR на початок. І тоді діти почали метушитися, тому я вдарив Зберегти. ... Якщо я ненароком втратив суть того, що ви проголосили (для тих із вас, хто це зробив), будь ласка, дайте мені знати!
svidgen

12

Я шукав Google, Google Scholar, ACM та IEEE. Ось документи, які я зміг знайти:

  • Рамки ін'єкційних залежностей: поліпшення до встановленості? . Він стверджує, що "перевіряемость" можна визначити як "низьку згуртованість". У ньому зазначається, що DI призводить до зниження згуртованості, нижча згуртованість співвідноситься з більш високим покриттям випробувань, а також, що більш високе покриття випробувань корелює з виявленням більшої кількості несправностей. У ньому йдеться про те, що, виходячи з цього, DI покращує доказливість.

    Мені це не подобається з кількох причин. Перш за все, це говорить «A корелює з B, B співвідноситься з C, тому A викликає C», що є декількома кроками в логіці, яку я не вважаю добре підтримуваною папером. По-друге, він визнає, що це лише вимірювання "підрозділів довіреності", і що "заповітність" взагалі не є чимось легко визначити. Нарешті, їх міра доказовості визначається за кількістю введених залежностей!

  • Вплив ін'єкції залежності на ремонтопридатність . Вони порівнюють проекти, що використовують DI, та проекти, які не використовують DI, вони знайшли на SourceForge, і бачать, чи є якісь відмінності в показниках згуртованості. Щоб зменшити упередженість, вони з'єднали проекти, щоб вони були максимально схожими. Зрештою, вони побачили сигнали про те, що проекти з великою кількістю DI були дещо менш сполученими, ніж проекти з лише невеликим DI. Однак, схоже, не було суттєвої різниці в згуртованості між проектами DI та їхньою парою, що не стосується DI, тому це може бути наслідком конкретних областей. Вони перераховують "відсутність кореляції" як основний результат, і "можливо, це трохи допомагає?" як тема для подальшого вивчення.

  • Емпірична оцінка впливу введення залежностей на розробку програм веб-служб . Реферат насправді не пояснює, що вони шукають. Я викопав і прочитав переддрук, і наскільки я можу сказати, це насправді про те, наскільки добре автоматизовані інструменти можуть виявити послуги. Послуги, написані в стилі DI, були легше відкриті. Крім того, воно цитує попереднє дослідження, яке я перераховував, як надання емпіричних доказів того, що DI зменшує з'єднання, що є протилежним тому, що заявляв цей документ.

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


2
Це відповідає безпосередньо на питання. +1
Меттью Джеймса Бріггса

3
@MatthewJamesBriggs Я не прихильник, але чи має значення відповідь на питання безпосередньо, чи відповідь є оманливою чи неповною ???
svidgen

@svidgen Я не бачу, як відповідь неповна. Питання було "чи є у нас емпіричні докази того, що DI працює?" а відповідь - «ні». Це нічого не говорить про те, чи працює це чи ні, лише про те, що на цьому немає досліджень.
Говеркуч

1
Неповна та оманлива у тому, що ви відповідаєте, обмежує сферу "доказів" на "документах, які ви (sic) змогли знайти" та закреслили над "ефективністю" без поваги до реальних цілей DI, і що у вас є тому зробив висновок, що відповідь "ні" без кваліфікації ... Я б заперечував, що якщо ви збираєтеся "безпосередньо" відповісти на питання, як @MatthewJamesBriggs пропонує, ви зробили серйозну тягу до того, щоб копати глибоко і бути змогли з високою впевненістю продемонструвати, що ви дослідили усі шляхи ...
svidgen

1
І я думаю, коли об'єднати , що з поспішної оцінкою одного ресурсу ви ж процитувати, я міг би навіть назвати цей відповідь дуже вводить в оману. Тому що, окрім усіх можливих доказів, які ви ігноруєте, ви берете документально підтверджені докази та негайно знижуєте їх з причин, не пояснених повністю. ... Якби я, наприклад, стверджував, що "немає жодних доказів, що ми приземлилися на Місяць", тому що "єдиний" папір, який я коли-небудь читав з цього питання, був із "застарілої" редакції підручника, яку я не довіряю, сподіваюся, ви поставитесь скептично до моїх методів ...
svidgen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.