Чи можна писати програмне забезпечення, яке не потрібно постійно змінювати?


23

Я написав багато програмного забезпечення на багатьох різних мовах, а також "написав" апаратне забезпечення для використання з FPGA, використовуючи Verilog та VHDL.

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

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

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

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


8
Здається, ви описуєте OCP
Одід

Цей матеріал із відкритим закритим принципом виглядає чудово! Хтось користувався цим успішно?
Натан Фаррінгтон

2
@NathanFarrington: Більшість моделей дизайну (як описано в GOF ) відповідають OCP. Одним із прикладів може бути шаблон шаблону методу .
Спікей

2
@NathanFarrington Принцип відкритого закриття є загальним принципом, який застосовують розробники програмного забезпечення при розробці програмного забезпечення.
Джеспер

1
Я б міг уявити, що багато з програм, якими ми сьогодні користуємось, виготовлені з використанням шматочків і шматочків, які є копіями у вигляді коду, які були написані 20 років тому.
Мальв

Відповіді:


16

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

Саме мої думки!

Добре розроблені модулі з чіткими інтерфейсами, як правило, є ідеальними. Придумайте щось на кшталт Stringкласу Java. Це комп'ютерна програма, але вона має кристально чистий інтерфейс. У ньому немає відомих помилок. Це робить те, що належить робити, ідеально. Зрозуміло, він пройшов ретельне тестування протягом останніх 15 років, і оскільки практично всі програми використовують Strings як основні будівельні блоки, будь-яка помилка в ньому буде швидко помічена. Будь-які "химерності" - це не суворі помилки, але деталі дизайну, про які варто знати - такі, як описано тут http://www.jwz.org/doc/java.html, на сьогодні відомі, і тому їх можна брати до уваги рахунок.

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

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

Мабуть, немає срібної кулі, але хороша комбінація найкращих практик, включаючи, але не обмежуючись ними:

  • Прості, автономні модулі. Іншими словами, низька зв'язність і висока згуртованість.
  • Незмінюваність. Особливо важливо зі зростанням одночасності.

Варто зазначити, що обидва пункти спрямовані на зменшення складності. Це ключовий момент. Ентропія завжди має тенденцію до зростання, і якщо ми не будемо боротися з цим, ми скоро потонемо у складності. Цікаво також побачити, що протягом останніх кількох років мови програмування розвиваються у напрямку заохочення або навіть застосування вищезазначених практик. Зокрема, підвищення функціональних мов якраз таке: чисті функції завжди повертають одне і те ж значення для одного і того ж вводу, в них немає стану . Тоді ви просто складаєте чисті функції, які приймають і повертають незмінні значення , і обмежують неминучу змінність до невеликих чітко визначених місць замість того, щоб поширювати її навколо. Перевірте це: http://clojure.org/state


1
jwz не зовсім згоден, що клас String - помилка - jwz.org/doc/java.html

1
Це може працювати як розроблено, тому питання полягає в тому, якщо основна конструкція порушена. Я згоден, однак, що String - це дуже надійний клас.

1
Відмінна відповідь. Зараз я кодую майже виключно Python і намагаюся скористатися функціональними конструктивними програмами. Так, я думаю, ви праві, що незмінність є ключовою. Перший раз, коли я створюю програмний модуль, навіть якщо його перевіряю, тоді я, мабуть, переплутав інтерфейс, або, можливо, він не відповідає або занадто багато. Тому я роблю другий модуль і перший залишаю в спокої! Я все ще можу використовувати перший модуль у майбутньому, якщо бажаю, але ніколи не змінювати його, бо він не ідеальний, але він працює. Тож функціональні мови з незмінністю можуть допомогти, як ви пропонуєте.
Натан Фаррінгтон

1
@JoonasPulakka: Так, якщо є однорядковий підсумок програмного забезпечення, це може бути "завжди є інша помилка". :-) І я думаю, що це один із пунктів Натана.
Росс Паттерсон

1
Joonas, ви виграєте. Я почав вчитися Clojure. Це виглядає як найкращий спосіб зробити програмування знову цікавим.
Натан Фаррінгтон

9

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

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

Ви обов'язково повинні перевірити тестові розробки .


Багато відповідей на моє запитання, здається, містять фольклор. Чи обов'язково простіше знайти та виправити програмні помилки, ніж спроектувати помилки з самого початку? Скільки коштує насправді модифікувати програмне забезпечення? Напевно, ніхто насправді не знає. Що стосується розробки тестових програм, то є сенс перевірити програмне забезпечення, яке можна повторно використовувати. Потім програмне забезпечення стає фактичним будівельним блоком, а не кулькою грязі. Але не має сенсу тестувати програмне забезпечення, якщо воно просто зміниться завтра. Напевно, мені було цікаво, чи можна насправді робити програмне забезпечення із будівельних блоків, а не з грязі.
Натан Фаррінгтон

1
@NathanFarrington: Я вважаю, що існує велика різниця в тому, як виробляються технічні характеристики та дизайн програмного забезпечення. Більшість виробників обладнання мають, швидше за все, кращі технічні характеристики того, що вони роблять, ніж розробник програмного забезпечення, клієнт якого може сказати лише "Я хочу програму, яка робить це!" Це майже гарантовано отримати нові функції, а що ні.
RCE

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

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

Зміна програмного забезпечення здається простішою і менш дорогою, ніж апаратне забезпечення, але це насправді? Так, я можу змінитись і миттєво зробити нове складання одним натисканням пальця. Однак збірка все ж потребує проходження перевірки / якості. Яка ціна була можливою? Що б я робив, а не виправляти цю помилку. Що б QA робила, якби вони не потребували повторної перевірки програмного забезпечення. Чи відштовхувались інші проекти, щоб виправити це виправлення на ринок? Є багато "прихованих" витрат, про які люди не замислюються. Це може бути простіше, але не обов'язково менш дорого.
Pemdas

6

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

Одне з моїх головних розладів щодо програмного забезпечення - це те, що це ніколи не робиться.

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

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

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

"Як я можу веселіше писати програмне забезпечення, не вводячи помилок у робочий код та завжди досягаючи прогресу?"

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

2. Зробіть так, щоб ваш користувач розумів цю довгострокову філософію.

3-Планове виконання ретельно

4 -дизайн перед кодом.

5 - Використовуйте загальний дизайн, коли це доречно.

6-Використовуйте прототипи як інструмент підтвердження дизайну.


Це все чудові поради. Підводячи підсумки моїх думок до цього моменту: (1) зробити випуски BIG DEAL і зробити багато тестування та QA перед випуском, (2) зробити модулі BIG DEAL і переконайтесь, що вони мають чітко визначені документовані інтерфейси з тестами для цих інтерфейси та твердження, щоб побачити, чи порушено інтерфейс і після того, як модуль буде «звільнений», він ніколи не змінюється (OCP).
Натан Фаррінгтон

4

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

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

Повернення до питання ОП. Не могли б ви визначити систему будівельних блоків, з якої можна отримати все ваше програмне забезпечення? Можливо. Це було б дуже економічно? Мабуть, ні, тому що до того часу, коли ви обійдетеся над розробкою достатньо надійної системи компонентів, тестів та інших атрибутів, щоб підтримати цей ідеалВ системі програмування ви побачите, що ваша конкуренція вже перемогла б вас на ринку, і ще гірше, з точки зору середнього програміста ви, мабуть, знайдете стиль програмування «cookie-cut» для системи програмування дуже обмежуючим і, швидше за все, дуже нудно. Я особисто працюю над API, де основна частина коду модуля була вдосконалена та стандартизована настільки повністю, що все, що я зараз роблю, - це генерувати шаблон коду та заповнювати пробіли. Більшу частину мого часу я можу витратити на написання простого коду з роз'ємами та виведення модулів у двері якомога швидше. Це серйозно змарніло. Існує дуже мало можливостей зробити більше, ніж просто кодувати одні і ті ж речі знов і знов, тому, коли з'являється ще одна можливість проекту, я стрибаю на шанси, щоб мати змогу зробити щось інше.

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

Налаштування вашої методології також допомагає. Я великий прихильник застосування худорлявих принципів розвитку та поєднання їх з багатьма іншими методами та принципами, про які рухливий рух веде вже багато років. Усунувши більшість марнотратних практик, які я вважав такими неприємними, дуже допомогли зробити розвиток більш приємним заняттям. У мене все ще залишається питання, яке іноді - але, сподіваюся, не дуже часто - помилки з'являться в моєму коді, проте зараз я знаходжу більше часу і ще більше стимулів витрачати більше часу на написання більш надійних тестів і націлених на 100 % покриття тесту. Ще краще, мені здається, дуже добре бачити, як усі ці зелені вогні з’являються наприкінці мого дня,


Мені цікаво, ви пишете, що тестування є важливим, але також омертвілим.
Натан Фаррінгтон

@NathanFarrington Дякую за вказівку на це. Моя суть полягала в тому, щоб позитивно говорити про тестування, але я думав про це, вводячи щось інше, тому в цьому абзаці вийшло абсолютно неправильно! Я виправив, що відповідає дійсній точці, яку я намагався висвітлити!
S.Robins

3

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

Якщо це вас засмучує, подумайте про іншу кар’єру. Серйозно.

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

Часто при додаванні функції вводиться помилка десь в іншому місці, яка раніше працювала просто чудово.

Це проблема QA.

Це не відбувається в апаратному забезпеченні, доки інтерфейси не порушені.

Це справедливо і в програмному забезпеченні.

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

Так. Ви повинні фактично практикувати забезпечення якості.


1
До речі, я не намагаюся троліти, і так, можливо, я не вирізаний для програмного забезпечення. Але ви кажете, що "пункт програмного забезпечення - це можливість додавати функції". Це насправді? фон Нойман винайшов програмне забезпечення для створення комп'ютера, який міг би обчислити більше однієї математичної функції, не перемотуючи її логічні та арифметичні одиниці. Мені цікаво, звідки походить ця філософія програмного забезпечення. Обладнання має функції, але мета обладнання не полягає в тому, щоб додавати функції.
Натан Фаррінгтон

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

Зараз у мене є більш розумний коментар до вашої відповіді. Причина, по якій я переймався тим, що програмне забезпечення ніколи не робилося, - це, мабуть, тому, що я завжди використовував дуже виграшний підхід до випусків. Одна нова функція дорівнює наступному випуску, без регресійних тестів і дуже мало QA. Якби випуски були ВЕЛИКИМИ ВИГОДНІ, то я сумніваюся, що моє програмне забезпечення, яке ніколи не робиться, піде назовні.
Натан Фаррінгтон

@NathanFarrington: Тьюрінг винайшов програмне забезпечення, щоб зламати постійно мінливі коди Enigma. "під гарантуванням якості ви маєте на увазі тестування". Помилковий. Я маю на увазі Забезпечення якості - кожен аспект розвитку повинен мати стандарти якості, яких слід дотримуватися. Тестування - це один (обмежений) спосіб оцінки якості одного виду артефакту. "код змінено ... що може вводити помилки". Правильно. Це невдача щодо забезпечення якості - не притаманна особливість програмного забезпечення.
С.Лотт

Ми, безумовно, відходимо від теми. Згідно з цим посиланням , Колос Тьюрінга не був універсальним (в обчислювальному сенсі) і не використовував збережені програми (програмне забезпечення).
Натан Фаррінгтон

2

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

Рекомендую вивчити " формальні методи " для перевірки правильності конструкцій та програмного забезпечення. Інструменти тренажера, які ви використовуєте для дизайну апаратних засобів, намагаються зробити щось близько. Я не вірю, що інструменти для формальних методів в даний час близькі до того, щоб бути корисними в промисловості в даний час, і єдині галузі, які мають сильний стимул бути бездефектними, - це авіоніка та медицина (що цікаво, FDA чітко говорить, що "програмне забезпечення інше від обладнання "на цьому посиланні). Крім того, якщо ви розробляєте Verilog / VHDL, ви дотримуєтесь бінарної логіки. Це різко знижує складність. Існує не апаратний еквівалент проблеми Y2K.

Велика проблема полягає в тому, що справи складні. І ви не можете усунути складність, ви можете лише переміщати її.


1

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

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

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

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

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

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

Останній момент: Програмне забезпечення має іншу фінансову модель від апаратної, навіть програмованого обладнання. Більшість програм, що не є споживачами, а також деякі споживчі програми також продаються таким чином, що заохочує зміни. Коли ви зможете сказати компанії "Платіть нам $ 10000 зараз плюс 18% на рік", ви можете реально продавати товар кожні кілька років. Але щоб виправдати цю плату, потрібно надати клієнту потрібні зміни. Хм ... думаючи про апаратну криву застарілості Apple, можливо, це зовсім не різниця - апаратне забезпечення просто змушує вас по- справжньому перекупити!


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

0

як я можу веселіше писати програмне забезпечення, не вводячи помилок у робочий код і завжди досягаючи прогресу?

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

http://en.wikipedia.org/wiki/Extreme_Programming

Коли ви взаємодієте з обладнанням, обладнання потребує значення x і це все (теоретично), але коли ви спілкуєтесь з людьми, сьогодні їм потрібен х, а завтра вони можуть знадобитися y і т.д. . Тому що Persons! = Машини, тому код, який НІКОЛИ не змінюється в більшості разів, неможливий.

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


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

Як я завжди кажу, найкращий код - це не код. :-)
H27studio

0

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

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

до речі, ви не чули про помилки HW? Набагато неприємніше, ніж будь-яку помилку SW і важче виправити (не лише оновлення програмного забезпечення)


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

1
@NathanFarrington Програмне забезпечення, як правило, складніше, ніж HW. HW випробовується більш ретельно. ЮЗ може змінюватися легше, тому люди, як правило, не приділяють стільки уваги.
BЈоviћ

0

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

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


У вас є дійсна точка. Типи речей, які ми традиційно виготовляємо в апаратному забезпеченні, добре розуміються: процесори, USB-контролери, кінцеві точки PCI Express, контролери пам'яті тощо. Потім ми запускаємо всю цю бізнес-логіку програми в програмне забезпечення. Можливо, коли ми працюємо на шляху до складання програмного забезпечення, то речі стають більш суттєвими та менш зрозумілими?
Натан Фаррінгтон

-1

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

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