Складність управління процесом розробки
Велике число вимог до системи неминуче призводить або до створення нового програмного продукту значних розмірів, або до модифікації існуючого, що також не робить його простіше. Сьогодні звичайними стали системи розміром в десятки тисяч і навіть мільйони рядків на мовах високого рівня. Жодна людина не в змозі зрозуміти і розробити повністю таку систему. Тому виникає необхідність розбиття системи на підсистеми і модулі та колективної розробки систем.
В ідеалі для успіху розробки команда розробників повинна бути якомога менше. Але якою б вона не була, завжди виникнуть труднощі, пов'язані з координацією робіт над проектом, і проблема взаєморозуміння вимог і специфікацій системи.
Програмування володіє максимальною гнучкістю серед технічних наук. Програміст, як і письменник, працює зі словом, і всіма базовими елементами, необхідними для створення програм, він може забезпечити себе сам, часто нехтуючи вже існуючими розробками. Така гнучкість - надзвичайно привабливе, але небезпечне якість: користувач, усвідомивши цю можливість, постійно змінює свої вимоги; розробник захоплюється прикрашення своєї системи на шкоду основним її призначенням. Тому програмні розробки залишаються дуже копіткою і «нескінченним» справою, а програмні системи потенційно незавершеними.
Складність опису поведінки системи
Складні програмні системи містять сотні і тисячі змінних, поточні значення яких в кожен момент часу описують стан програми. Крім того, вони мають велику кількість точок розгалуження, які визначають безліч залежних від ситуації шляхів вирішення завдання. Все це розробник повинен продумати, зафіксувати в програмах, протестувати і налагодити.
Будь-яка складна система, в тому числі і складна програмна система, володіє такими загальними ознаками:
1. Складні системи часто є ієрархічними і складаються з взаємозалежних підсистем, які, в свою чергу, також можуть бути розділені на підсистеми і т.д.
Складна система складається не просто з окремих компонентів, між ними є певні ієрархічні відносини.
Наприклад, більшість персональних комп'ютерів складається з одних і тих же основних елементів: системного блоку, монітора, клавіатури і маніпулятора «миша». Ми можемо взяти будь-яку з цих частин і розкласти її, в свою чергу, на складові. Системний блок, наприклад, містить материнську плату, плати оперативної пам'яті, центральний процесор, жорсткий диск і т.д.
Продовжуючи, ми можемо розкласти на складові центральний процесор. Він складається з регістрів і схем управління, які самі складаються з ще більш простих деталей: діодів, транзисторів і т.д. Виникає питання, що ж вважати найпростішим елементом системи? Відповідь дає друга ознака.
2. Вибір того, які компоненти в даній системі вважаються елементарними, відносно довільний і у великій мірі залишається на розсуд дослідника.
Нижчий рівень для одного спостерігача може виявитися досить високим для іншого. Якщо користувачеві досить виділити системний блок, монітор і клавіатуру, то для розробника комп'ютера цього явно недостатньо.
3. Внутрікомпонентная зв'язок звичайно сильніше, ніж зв'язок між компонентами.
Ця обставина дозволяє відокремлювати інтенсивні (високочастотні) взаємодії всередині компонентів від менш інтенсивних (низькочастотних) взаємодій між компонентами і дає можливість відносно ізольовано вивчати кожен компонент.
4. Ієрархічні системи зазвичай складаються з небагатьох типів підсистем, по-різному скомбіновані і організованих.
Іншими словами, різні складні системи містять однакові структурні частини. Ці частини, в свою чергу, можуть використовувати загальні більш дрібні компоненти. Наприклад, і у рослин, і у тварин є великі підсистеми типу судинних систем, і клітини як більш дрібні компоненти.
5. Будь-яка працююча складна система є результатом розвитку працювала більш простої системи.
Як приклад назвемо теорію еволюції живої природи.
Складна система, спроектована з нуля, навряд чи запрацює. Слід почати з працюючої простої системи.
У процесі розвитку системи об'єкти, спочатку розглядалися як складні, стають елементарними, і з них (як стійких проміжних форм) будуються більш складні системи.