Питання: Чи можемо ми як розробники вчитися з процесів обробної галузі? Чи може прийняття їх процесів підвищити рівень успішності розробки програмного забезпечення?
Відповідь: Так, звичайно. Є багато уроків, які розробники програмного забезпечення можуть засвоїти у виробництві, незважаючи на те, що розробка програмного забезпечення - це творчий процес. Розробка програмного забезпечення сама по собі є процесом, і вона включає багато інших процесів. Чим краще ви можете визначити і контролювати ці процеси, тим краще ви зможете контролювати процес розробки програмного забезпечення в цілому. Це не означає, що вам слід прописати кожен набір клавіш, який виробник робить; це просто означає, що як розробник ви, природно, виконуєте завдання в певному порядку, і тими завданнями часто можна керувати. Ось кілька прикладів:
відстеження дефектів: коли спостерігається або повідомляється про помилку, що з нею відбувається? Ви записуєте це на клаптик паперу і наклеюєте його на «розслідувальний» шип? Згодом ви видаляєте ці записки по черзі, досліджуєте їх і врешті переміщуєте їх до "вирішеного" шипа? Якщо ви робите це безвідмовно кожен раз, коли отримуєте звіт про помилку, у вас є чітко визначений, вимірюваний процес, і ви, ймовірно, набагато краще, ніж той, хто має вигадливу високотехнологічну систему відстеження дефектів, яка настільки обтяжлива що деякі члени команди відслідковують помилки іншими способами, або зовсім не.
контроль версій: є хороший шанс, що ви використовуєте управління версіями там, де працюєте, а контроль над версіями, очевидно, набагато корисніший, коли всі використовують його однаково.
дизайн продукту: Ви вирішуєте, які функції застосувати, кидаючи дротики на стіну, покриту нотами пост-це? Якщо так, у вас є процес. Я не думаю, що хтось заперечуватиме, що це чудовий процес, але, принаймні, це відправна точка. Якщо ви змінюєте процес, як ви можете точно знати, що ваша зміна насправді була поліпшенням, якщо ви не вимірюєте до і після? Ви не можете.
огляди коду: Чи корисний би перегляд коду, якщо процес огляду та критерії кодування змінилися для кожного огляду? Звичайно, ні.
Життєвий цикл розробки програмного забезпечення: Весь аналіз -> дизайн -> реалізація -> тест -> цикл обслуговування - це процес, який слід чітко визначити.
У кожному з цих випадків створення процесу дозволяє вимірювати входи та виходи та визначати, чи внесені вами зміни мають намічений ефект. Відсутність процесів означає, що ви просто здогадуєтесь, коли намагаєтесь покращити свій спосіб роботи. Це справді те, про що йдеться у виробництві, і має сенс запозичити послідовні інструменти для вдосконалення виготовлення лише тоді, коли вони доречні.
Існує ціле поле, присвячене визначенню та вдосконаленню процесів, що використовуються для створення та підтримки програмного забезпечення; це називається інженерія програмного забезпечення . Не дивно, що у вас виникають питання щодо процесу розробки, читаючи про CMMI - CMMI - продукт Інституту програмного забезпечення .
Розробка програмного забезпечення вже прийняла багато виробничих концепцій:
Важко не побачити вплив взаємозамінних частин Елі Вітні як на ООП, так і на основі компонентів .
Методи управління проектами, що застосовуються при розробці програмного забезпечення, не сильно відрізняються від технологій, розроблених для виробництва. Як лише два приклади, світ програмного забезпечення лише нещодавно прийняв концепцію Kanban, розроблену десятиліттями тому в Toyota, і діаграми Ганта використовувались у виробництві задовго до того, як був побудований перший електронний комп'ютер.
Методології управління якістю, такі як Six Sigma, розроблені для виготовлення, були адаптовані до розробки програмного забезпечення.
Незважаючи на важкі умови, керовані процесами, розробник повинен брати участь у створенні речей "на льоту".
Ви мені скажете, що хтось збирається вирішити самостійно додати патч до пакету розпізнавання обличчя, і вони збираються додати його до складання виробництва, не створюючи попередньо проблеми в системі відстеження, переглянувши дизайн, перевірка коду в контролі версій чи те, що тестуючі люди спочатку переглядають його? Наш процес вимагає цих речей з дуже поважних причин. Якщо "під час руху" ви маєте на увазі "поза процесом", це неприпустимо.
Робити речі на льоту - це проти духу виготовлення.
Знову ж таки, якщо "на льоту" означає "поза процесом", ви маєте рацію. Але якщо ви думаєте, що виготовлення не вимагає швидкого мислення та розвитку творчих рішень проблем, ви помиляєтесь. У процесі виготовлення виникають усілякі проблеми - кекси не мають достатнього наповнення кремом, пофарбовані поверхні раптом перестають проходити тест на подряпину QA, у 20% готових деталей відсутнє важливе фіксуюче кільце, система замішування тіста зламала критична частина ...