Як зазвичай люди це дуже швидко зазначають, однією з переваг програмного забезпечення є те, що його, можливо, легко та порівняно дешево змінити порівняно з апаратним. Це особливо важливо, коли ти пізно усвідомлюєш, що ти маєш щось принципово не так. Зроби так само з обладнанням, і ти втрачаєш мільйон доларів, так що, як ти вже говорив, ти використовуєш свої тренажери і т. Д., І тестуєш базінга з цього. Це, на мою думку, парадигма дещо провалюється при переході на програмне забезпечення.
Займіться головою середнього розробника програмного забезпечення, і у вас є дуже зайнята людина з неймовірно обмеженим терміном. Його менеджер каже, що нормально залишити кілька помилок, тому що ви завжди можете це виправити пізніше. Тести часто є думкою, але навіть у тестовому сценарії тести зводиться до мінімуму, а код записується до мінімуму тестів, і часто клавіші швидкого доступу приймаються так, що багато випадків меж можуть бути пропущені. Система може бути ретельно перевірена одиницею, але вона рідко перевіряється жорстко в цілому, і так само рідко перевіряється стрес у будь-якій великій мірі. Додайте до цього, що ви пишете програмне забезпечення з нуля, і мало можливостей для імітації програмного забезпечення, перш ніж ви зобов’язанісь його написати, насамперед тому, що ми рідко пишемо програмне забезпечення з того ж типу дрібнозернистих будівельних блоків, які ви знайдете в апаратному забезпеченні.
Повернення до питання ОП. Не могли б ви визначити систему будівельних блоків, з якої можна отримати все ваше програмне забезпечення? Можливо. Це було б дуже економічно? Мабуть, ні, тому що до того часу, коли ви обійдетеся над розробкою достатньо надійної системи компонентів, тестів та інших атрибутів, щоб підтримати цей ідеалВ системі програмування ви побачите, що ваша конкуренція вже перемогла б вас на ринку, і ще гірше, з точки зору середнього програміста ви, мабуть, знайдете стиль програмування «cookie-cut» для системи програмування дуже обмежуючим і, швидше за все, дуже нудно. Я особисто працюю над API, де основна частина коду модуля була вдосконалена та стандартизована настільки повністю, що все, що я зараз роблю, - це генерувати шаблон коду та заповнювати пробіли. Більшу частину мого часу я можу витратити на написання простого коду з роз'ємами та виведення модулів у двері якомога швидше. Це серйозно змарніло. Існує дуже мало можливостей зробити більше, ніж просто кодувати одні і ті ж речі знов і знов, тому, коли з'являється ще одна можливість проекту, я стрибаю на шанси, щоб мати змогу зробити щось інше.
Тож як ви можете доставити якісне і добре враховане програмне забезпечення, а ще насправді насолоджуватися цим? Я вважаю, що це зводиться до вашого вибору інструментів та методології. Для мене відповідь полягала в тому, щоб використовувати хороший BDD API, оскільки це дозволило мені створити дуже простий для читання, але дуже детальний код. Я можу створити набір тестів з мінімальної кількості методів багаторазового використання та описати свої тести мовою специфікацій. Таким чином я наближаюся до більш складового підходу до розробки, за винятком того, що я відповідаю за проектування та перевірку будівельних блоків. Крім того, тестовий вихід визначає точну частину тесту, де відбувається збій, так що мені не доведеться здогадуватися, чи є збої в налаштуваннях або у твердженні.
Налаштування вашої методології також допомагає. Я великий прихильник застосування худорлявих принципів розвитку та поєднання їх з багатьма іншими методами та принципами, про які рухливий рух веде вже багато років. Усунувши більшість марнотратних практик, які я вважав такими неприємними, дуже допомогли зробити розвиток більш приємним заняттям. У мене все ще залишається питання, яке іноді - але, сподіваюся, не дуже часто - помилки з'являться в моєму коді, проте зараз я знаходжу більше часу і ще більше стимулів витрачати більше часу на написання більш надійних тестів і націлених на 100 % покриття тесту. Ще краще, мені здається, дуже добре бачити, як усі ці зелені вогні з’являються наприкінці мого дня,