загрузка...
загрузка...
На головну

Л. С. Зеленко

1. Енциклопедичний словник. М .; Сов. екцікл., 1952.

2. Кушнер В. С., Распутін Ю. П. Теорія експерименту. Новосибірськ; Омськ, 1976.

3. Політехнічний словник. М .: Сов. енциклопедії., 1977.

4. Гнеденко Б. В., Бєляєв Ю. К., Соловйов А. Д. Математичні методи в теорії надійності. М .: Наука, 1965.

5. Шор Я. Б., Кузьмін Ф. В. Таблиці для аналізу і контролю надійності. М .: Сов. радіо, 1968.

6. Наумов В. А., Єфремов В. В., Чурсін О. А. Теорія і практичні питання працездатності елементів машин приладів та апаратури. Іркутськ: Изд. Іргу, 1984.

7. Кандак Н. І. Логічний словник-довідник. М .: Наука, 1976.

8. Єрьомін А. Н. Фізична сутність процесів при різанні металів. M .: Машгиз, 1951.

9. Зайденберг А. П. Павлович І. П. Закони розподілу випадкових величин / ОМІІТ. Омськ, I975.

10. Щиголєв Б. М. Математична обробка результатів спостережень. М .: Физматгиз, 1960.

11. Бахвалов Н. С. Чисельні методи. М .: Наука, 1975.

12. Демидович Б. П., Марон І. А. Основи обчислювальної математики. М.: - Наука, 1970.

13. Вентцель Е. С. Теорія ймовірностей. М .: Наука, 1969.

Л. С. Зеленко

З 484 Технології програмування і програмна інженерія (частина 1): навчальний посібник/ Л. С. Зеленко. - Самара: Изд-во
Самар. держ. аерокосм. ун-ту, 2006. - 96 с .: іл.

ISBN

У посібнику розглядаються основні поняття двох взаємопов'язаних дисциплін «Технології програмування» і «Програмна інженерія», описуються принципи розробки складних програмних систем. Особливу увагу приділено основним методологій, на яких базуються технології програмування, і моделям життєвого циклу програмних систем. Також розглядаються питання якості програмних систем і показники для оцінки їх працездатності. Зміст навчального посібника є розширеним варіантом курсу лекцій, який читає автор на факультеті інформатики СГАУ.

Рекомендується для використання в навчальному процесі спеціальностей 010501 - «Прикладна математика та інформатика», 010600 - «Прикладна математика і фізика», а також студентам, які навчаються за спеціальностями, пов'язаними з інформатикою, інформаційними технологіями і розробкою прикладних програмних систем.

УДК 004.4 (075)

ББК

ISBN © Зеленко Л. с., 2006
© Самарський державний
аерокосмічний університет, 2006


Зміст

Передмова. 4

Вступ. 5

1 Технології програмування. Основні поняття і визначення. 8

1.1 Основні поняття і визначення. 8

1.2 Технології програмування: етапи розвитку та базові методології програмування 15

1.3 Ієрархія понять в технології програмування. 28

2 Загальні принципи розробки складних програмних систем .. 37

2.1 Особливості сучасних програмних систем як об'єктів розробки. 37

2.2 Показники якості програмних систем .. 39

2.3 Проблеми розробки складних програмних систем .. 43

2.4 Структура складних систем .. 46

2.5 Основні підходи до створення складних програмних систем .. 48

2.5.1 Структурний підхід до розробки програмних систем .. 50

2.5.2 Об'єктний підхід до розробки програмних систем .. 54

3 Життєвий цикл програмних систем .. 59

3.1 Стандарти та проблеми життєвого циклу ПО .. 59

3.2 Життєвий цикл і етапи розробки програмного забезпечення. 63

3.2.1 Інженерні процеси .. 67

3.3 Модель життєвого циклу ПО .. 69

3.3.1 Каскадна модель розробки ПЗ .. 70

3.3.2 Спіральна модель розробки ПЗ .. 74

3.3.3 Інші типи моделей життєвого типу. 79

3.3.4 Технологія швидкої розробки додатків RAD .. 82

Список літератури .. 87

Список термінів. 89


передмову

Цей навчальний посібник є розширеним варіантом курсу лекцій «Технології програмування», який читається автором протягом останніх років на кафедрах інформаційних систем і технологій та програмних систем СГАУ. Зміст курсу склалося в результаті аналізу багатьох наукових джерел, узагальнення та методичного осмислення досвіду, який був накопичений фахівцями з розробки програмного забезпечення, а також з урахуванням досвіду роботи автора даного курсу.

Поява в новому державному освітньому стандарті (напрямки 510200 «Прикладна інформатика і математика», 511900 «Інформаційні технології», 552800 «Інформатика та обчислювальна техніка») дисципліни «Технології програмування» дозволило в повному обсязі розглянути всі питання, пов'язані з розробкою складних програмних систем, до цього елементи технологій розглядалися лише в курсі «Алгоритмічні мови та програмування».

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

Навчальний посібник розрахований на читача, який має досвід програмування на мовах високого рівня (в тому числі об'єктно-орієнтованих) і розробки програм середньої складності. Його мета - допомогти особам, для тих, до розробки більш складних програмних продуктів, раціонально організувати свій програмістський працю.


Вступ

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

Швидке збільшення складності і розмірів сучасних комплексів програм при одночасному підвищенні відповідальності виконуваних функцій різко підвищило вимоги з боку користувачів до їх якості, надійності функціонування та безпеки застосування. Розробку складних програмних систем вже неможливо було вести «по-старому», без використання ефективних інструментальних засобів і засобів автоматизації всіх етапів розробки. Час талановитих одинаків минув, в розробці стали брати участь великі колективи програмістів, роботу яких необхідно було раціонально організовувати.

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

При індустріальному підході до розробки і супроводу ПЗ особливої ??ваги набувають технологічні характеристики розроблюваних програм, для отримання якісних програмних продуктів необхідно керуватися такими принципами [1]:

§ ефективністю - результати повинні відповідати заданим вимогам і стандартам в умовах обмежених ресурсів;

§ практичністю - результати повинні мати конкретних замовників;

§ фундаментальністю - результати повинні базуватися на знаннях фундаментальних наук;

§ успадкованого - результати повинні узагальнювати накопичений досвід, виключаючи діяльність «c нуля»;

§ сопровождаемости - результати, перебуваючи в експлуатації, обов'язково повинні обслуговуватися.

Початок робіт в даній області відноситься до кінця 60-х - початку 70-х років, коли зростання складності програмних систем (ПС) став приводити до зниження якості їх функціонування і появи великої кількості помилок. Складність ПС постійно збільшувалася через:

§ збільшення обсягів коду (мільйони рядків);

§ збільшення кількості зв'язків між елементами систем;

§ збільшення кількості розробників (сотні чоловік);

§ збільшення кількості користувачів (сотні і тисячі).

Перші істотні результати при вирішенні даної проблеми були отримані А. П. Єршовим, В. М. Глушковим, Е. А. Жоголева, В. В. Ліпаевим, в роботах яких описані базові методології та технології програмування того часу: структурне програмування і методологія процедурної (алгоритмічної) декомпозиції. До 90-х років з'явилася нова парадигма в програмуванні, побудована на об'єктної декомпозиції предметної області, яка призвела до методології об'єктно-орієнтованого аналізу і проектування. з'являється поняття програмної інженерії як практичного застосування наукових знань в проектуванні і конструюванні ПС, а також для створення документації, необхідної для їх розробки, експлуатації і супроводу.

Основною концепцією програмної інженерії стало поняття життєвого циклу ПО. Життєвий цикл розглядається як сукупність всіх дій, які треба виконати протягом усього «життя вироби» (ПО). В даний час застосовується кілька моделей життєвого циклу, Які відрізняються набором фаз (етапів, стадій) проекту зі створення ПЗ, окремих процесів, операцій і завдань. В даний час використовуються як класичні моделі життєвого циклу: каскадна (водоспадна) і спіральна, так і їх модифікації, які охоплюють всі етапи життєвого циклу ПО і успішно застосовуються для вирішення практичних завдань.

тільки скоординоване, комплексне застосування в проектах(З початку проектування до впровадження програмних систем) сучасних методів та промислових технологій дозволить досягти високої якості, необхідного для використання їх в складних системах обробки інформації.


1 технології програмування. Основні поняття і визначення

Новим видом сучасних виробів є програмний продукт (ПП) - комплекси програм управління і обробки інформації. Для ефективного виробництва програмного продукту необхідно створення і впровадження сучасних технологій, що дозволяють створювати складні комплекси програм в стислі терміни і при мінімальних затратах праці [21].

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

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

1.1 Основні поняття і визначення

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

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

Створення складних програмних систем повинно бути засноване на відповідних і досить ефективні технології програмування, що підтримують процес програмування на всіх етапах конструювання програм.

Перш ніж говорити про технології програмування, необхідно добре розібратися в глибинну сутність понять інформації, даних, алгоритму, Програми, програмування, Бо сама технологія не може бути відірвана від цих сутностей.

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

Алгоритм (algorithm) - заздалегідь задана послідовність чітко визначених правил або команд для отримання рішення задачі за кінцеве число кроків (це набір приписів, однозначно визначає зміст і послідовність виконання операцій для досягнення заданої мети або вирішення поставленого завдання).

Примітка: Прийнято вважати, що сам термін алгоритм походить від імені перського математика Абу-Ждафара Мохаммеда Ібн-Муси Аль-Хорезмі, який в 825 р описав правила виконання арифметичних дій в десятковій системі числення. Поняття алгоритму стало предметом відповідної теорії - теорії алгоритмів, яка займається вивченням загальних властивостей алгоритмів, якийсь період часу мови програмування називалися алгоритмічними.

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

Програма (program) - це набір операторів, який може бути представлений як єдине ціле в деякій обчислювальній системі і який використовується для управління поведінкою цієї системи.

Програмування (programming) (в широкому сенсі) - Всі технічні операції, необхідні для створення програми, включаючи аналіз вимог і все стадії розробки і реалізації.

програмування (У вузькому сенсі) - Процес кодування і налагодження програми в рамках реального проекту.

Метою програмування є опис процесів обробки даних (надалі - просто процесів). Згідно IFIP (Міжнародна федерація з обробки інформації) і ICC (Міжнародний обчислювальний центр) дані (data) - Це представлення фактів і ідей в формалізованому вигляді, придатному для передачі і переробки в якомусь процесі, а інформація (information) - Це сенс, який надається даними при їхньому уявленні.

На терміні «інформація» варто зупинитися більш докладно, т. К. Він є основоположним поняттям інформатики і має велике значення для наук, з нею пов'язаних. Існує кілька визначень даного поняття.

Основоположник кібернетики Н. Вінер вважав, що «Інформація - це інформація, а не енергія і не матерія», і поставив інформацію в один ряд з іншими найбільш загальними філософськими категоріями.

У словнику російської мови С. і. Ожегов [20] визначив інформацію як: 1) відомості про навколишній світ і що протікають у ньому; 2) повідомлення, що інформують про стан справ, про стан чого-небудь.

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

Отже, дані беруть участь в деякому інформаційному процесі (information process) або в обробці даних. Обробка даних (data processing)-це виконання систематичної послідовності дій з даними. Дані представляються і зберігаються на так званих носіях даних. Сукупність носіїв даних, що використовуються при будь-якій обробці даних, називається інформаційним середовищем (data medium). Набір даних, що містяться в будь-який момент в інформаційному середовищі, називається станом цієї інформаційного середовища. Тому процес можна визначити як послідовність змінюють один одного станів деякої інформаційного середовища [10].

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

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

Примітка: Хоча програмування - дуже специфічний вид діяльності, разом з тим технологія програмування не може не мати хоча б кілька спільних рис з технологіями іншого роду, наприклад, в машинобудуванні, легкій промисловості і т. Д. Тому дамо спочатку визначення технології взагалі.

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

Технологія програмування (programming technology) - це сукупність методів і засобів, що використовуються в процесі розробки програмних продуктів, являє собою набір технологічних інструкцій, що включають в себе:

§ вказівку послідовності технологічних операцій;

§ перерахування умов, при яких виконується та чи інша операція;

§ опис самих операцій, де для кожної операції виділені вихідні дані, результати, а також інструкції, нормативи, стандарти, критерії та методи оцінки і т. П. (Малюнок 1) [6].

 
 


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

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


Будь-яка технологія має дві сторони:

§ принципову (внутрішню);

§ організаційно-виробничу (зовнішню).

Таке ж становище і в області програмування: внутрішня технологія є первинною, а зовнішня - вторинна (Це в чомусь нагадує філософську зв'язок між змістом і формою). Без внутрішніх новинок, властивих тільки даній технології, не може бути технології взагалі. Нова ідея тому, як конструювати програми, утворює той генетичний матеріал, який в подальшому при сприятливих умовах може призвести до нової технології. Така ідея не з'являється з нічого, вона, як правило, - складний результат вивчення дійсного стану речей, проникнення в такі сутності, які раніше «не проглядається».

Примітка: Частина ідей веде до створення дійсно нових способів мислення і програмування, навіть не пов'язаних з конкретним мовою. У цьому випадку говорять про моделях (model) або парадигмах (paradigm) програмування, які можуть послужити основою самостійних мов програмування.

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

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

Методологія програмування - сукупність механізмів, що застосовуються в процесі розробки програмного забезпечення та об'єднаних одним загальним філософським підходом [4] [1].

У літературі широко використовується близьке до технології програмування поняття програмної інженерії (software engineering), яка визначається як систематичний підхід до розробки, експлуатації, супроводу і вилученню з обігу програмних засобів [9] [2]. Головна відмінність між технологією програмування і програмної інженерії як дисциплінами для вивчення полягає в способі розгляду і систематизації матеріалу. В технології програмування акцент робиться на вивченні процесів розробки ПП (технологічних процесів) І порядку їх проходження - методи та інструментальні засоби розробки ПП використовуються в цих процесах (їх застосування і утворює технологічні процеси). Тоді як в програмної інженерії вивчаються різні методи та інструментальні засоби розробки ПС з точки зору досягнення певних цілей - ці методи і засоби можуть використовуватися в різних технологічних процесах (і в різних технологіях програмування) [36].

Підводячи підсумок всьому вищесказаному, розглядаючи ту чи іншу технологію програмування, ми будемо:

§ розглядати всі процеси розробки ПС, починаючи з моменту виникнення задуму її створення до написання необхідної документації (програмної, системної, для користувача);

§ розглядати не тільки питання побудови програмних конструкцій і вибору структур даних, а й питання опису функцій і прийнятих рішень з точки зору їх людського (неформального) сприйняття;

§ використовувати ряд базових принципів (про них йтиметься пізніше) для досягнення поставленої мети - випуску надійної ПС.

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

1.2 Технології програмування: етапи розвитку та базові методології програмування

Якщо спробувати охарактеризувати сучасний рівень розвитку комп'ютерних та інформаційних технологій, то перше, на що слід звернути увагу, - це зростаюча складність не тільки окремих фізичних і програмних компонентів, але і лежать в основі цих технологій концепцій та ідей [15].

Щоб розібратися в існуючих технологіях програмування і визначити основні тенденції їх розвитку, доцільно розглянути ці технології в історичному контексті, виділяючи основні етапи розвитку програмування як науки. Зробимо коротку характеристику розвитку програмування по десятиліттях.

В 50-ті роки потужність комп'ютерів (першого покоління) була невелика, а програмування для них велося в основному в машинному коді. Програмування було мистецтвом: програмісту необхідно було відстежувати не тільки послідовність виконуваних операцій, а й місце розташування даних при програмуванні (рисунок 3).

 
 


Примітка: Відповідно до принципів фон Неймана програми і дані зберігалися в одній і тій же пам'яті (концепція зберігається програми) І виконувалися послідовно на одному процесорі.

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

В 60-ті роки можна було спостерігати бурхливий розвиток і широке використання мов програмування високого рівня (Fortran, Algol-60, PL / 1), значення яких в технології програмування явно перебільшувалося. Поява в цих мовах засобів реалізації механізму підпрограм стало революційним. Це дозволило створити великі бібліотеки розрахункових і службових підпрограм, які можна було зберігати і потім використовувати в різних програмах.

Примітка: Мови програмування спочатку робили упор на синтаксичні аспектиі проблеми записи програм, т. е. наформу. Це значно відвело в сторону від насущних проблем семантики, Т. Е. змістовного сенсу аналізу і синтезу програм, що не минуло безслідно. Надія на те, що мови програмування високого рівня вирішать всі проблеми, що виникають в процесі розробки великих програм, не виправдалася.

Спочатку програма складалася з основної програми, області глобальних даних і набору підпрограм, що виконують обробку або всіх даних, або тільки її частини (рисунок 4). Така архітектура підвищувала ймовірність спотворення частини глобальних даних будь-якої підпрограмою, тому для підвищення надійності програм була запропонована нова ідея: використовувати частину даних як локальні всередині підпрограм (малюнок 5).

 
 


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

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

 
 


Розробка великих програм перетворилася в серйозну проблему, для зниження кількості помилок і підвищення надійності програмну систему стали розбивати на більш дрібні фрагменти. Основою для такого розбиття стала процедурна (алгоритмічна) декомпозиція, При якій окремі частини програми або модулі представляли собою сукупність процедур для вирішення деякої сукупності завдань.

В середині 60-х років в мовах програмування з'явилася спеціальна синтаксична конструкція, і закріпилося нове поняття процедури (procedure). Головна особливість процедурного програмування полягає в тому, що програма завжди має початок в часі і закінчення, для початку дій подальшої процедури необхідно завершення всіх дій попередньої процедури.

З появою транзисторів, а потім і інтегральних схем, вартість комп'ютерів різко знизилася, а їх продуктивність росла майже експоненціально. Поява в комп'ютерах 2-го покоління переривань призвело до розвитку мультипрограмування і можливості створення великих програмних систем. Широко стала використовуватися колективна розробка, яка поставила ряд серйозних технологічних проблем, вибухнув «криза програмування»: фірми, які взялися за розробку складних ПС, зривали строки їх завершення (деякі проекти так ніколи і не були завершені), істотно збільшувалася вартість таких проектів (вартість програмного забезпечення стала наближатися до вартості апаратури).

Об'єктивно це було викликано недосконалістю технології програмування. Застосовуваний в цей час підхід розробки складних ПС «знизу-вгору», при якому спочатку розроблялися найпростіші підпрограми, а потім з них конструювалися складніші, привів до того, що при узгодженні підпрограм виявлялося велика кількість помилок, на усунення яких потрібно дуже багато часу . Процес тестування і налагодження став займати більше часу, ніж процес кодування (за оцінками деяких фахівців, час «збирання» ПС стало займати до 80% всього часу на розробку). Це стало початком серйозних роздумів над методологією і технологією програмування, став розвиватися новий підхід до програмування, який був названий структурним (structured programming).

Примітка: Поява і інтенсивне використання умовних операторів і оператора безумовного переходу goto стало предметом гострих дискусій серед фахівців з програмування. Справа в тому, що безконтрольне застосування в програмі оператора безумовного переходу goto здатне серйозно ускладнити розуміння коду. Ситуація здавалася настільки драматичною, що в літературі зазвучали заклики виключити оператор goto з мов програмування. Саме з цього часу прийнято вважати хорошим стилем програмування - програмування без goto [15].

В 70-ті роки набули широкого поширення інформаційні системи (ІС) і бази даних (БД), тому що до середини 70-х років вартість зберігання одного біта інформації на комп'ютерних носіях стала менше, ніж на традиційних носіях. Це різко підвищило інтерес до комп'ютерних систем зберігання даних. Базовою методологією стала методологія структурного програмування, в основі якої лежить процедурна декомпозиція (Розбиття на частини) ПС і організація окремих модулів у вигляді сукупності виконуваних процедур.

Примітка: На відміну від процедурного, структурний підхід вимагав уявлення завдання у вигляді деякої ієрархії підзадач, для досягнення спільної ідеї проектування системи повинно було вестися за принципом «зверху-вниз» із застосуванням методу покрокової деталізації.

З'явилися мови програмування 3-го покоління (Clu, Pascal, Modula-2), відмінною рисою яких стала наявність розвинених засобів абстрагування типів для структурування даних. Поява призначених для користувача типів дозволило зменшити кількість помилок при роботі з глобальними даними. Стала розвиватися технологія модульного програмування (modular programming), яка передбачає об'єднання декількох підпрограм, які використовують одні й ті ж дані, в окремо компільовані модулі, зв'язку між якими встановлювалися через спеціальний інтерфейс, а доступ до реалізації регулювався механізмами імпорту-експорту шляхом відповідних декларацій (рисунок 6).

 
 


Примітка: Модульне програмування стало вдалою основою для реалізації інкапсуляції і механізму імпорту-експорту. Інкапсуляція дозволила розглядати модуль як програмний еквівалент певного класу об'єктів, що містить в собі всю інформацію про об'єкти цього класу [14] [3].

Таким чином, технологія програмування в цей час інтенсивно розвивається в наступних напрямках:

§ широке впровадження низхідній функціональної розробки ПС і структурного програмування;

§ розвиток абстрактних типів даних і модульного програмування (зокрема, виникнення ідеї поділу специфікації і реалізації);

§ дослідження проблем забезпечення надійності и мобільності ПС;

§ створення методики управління колективною розробкою ПС;

§ поява інструментальних програмних засобів (програмних інструментів) підтримки технології програмування.

80-ті роки характеризуються широким впровадженням персональних комп'ютерів в усі сфери людської діяльності і тим самим створенням великого і різноманітного контингенту користувачів ПС, що, в свою чергу, змістило акценти на які вирішуються завдання (на перший план стали виходити завдання обробки і маніпулювання даними). Стало очевидним, що традиційні методи процедурного програмування не здатні впоратися ні зі зростаючою складністю програм і їх розробки, ні з необхідністю підвищення їх надійності. У другій половині 80-х років виникла нагальна потреба в новій методології програмування, яка була б здатна вирішити весь цей комплекс проблем. Такий методологією стало об'єктно-орієнтоване програмування (ООП) [4].

В об'єктно-орієнтованому підході до розробки програм центральним є поняття класу об'єктів. Клас (class) визначається як безліч об'єктів, що володіють внутрішніми (іманентними) властивостями, які грають роль классообразующіх ознак і при будь-якому об'єкту класу. Класи утворюють ієрархію з спадкуванням властивостей, Заснованих на таксономічних моделях узагальнення [14].

Примітка: Механізм наслідування властивостей в ООП дозволяє підвищити лаконічність програм шляхом використання декларацій «клас-підклас» і їх надійність (будь підклас може бути розроблений на основі вже створеного і налагодженого надкласса). Використання даного механізму безпосередньо пов'язано з можливістю розшарування властивостей предметної області, Для якої розробляється ПС, і визначення ставлення «клас-підклас» (для багатьох областей визначення таких відносин проблематично).

Відмінною особливістю ООП є організація взаємодії об'єктів шляхом посилки повідомлень (Рисунок 7). Розробка нових архітектурних рішень, адекватних цій концепції, пов'язана зі створенням багатопроцесорних ЕОМ, хоча може бути вирішена і на однопроцесорних ЕОМ за допомогою механізмів, що забезпечують «логічний» паралелізм: сопроцесс, подієвих взаємодій, методу дискретно-подієвого управління і т. П.

Основними принципами (парадигмами) ООП є:

§ інкапсуляція (encapsulation) - об'єднання в класі даних (властивостей) і методів (Процедур обробки), приховування окремих деталей внутрішнього устрою класів від зовнішніх по відношенню до нього об'єктів або користувачів;

§ спадкування (inheritance) - можливість виведення нового класу зі старого з частковою зміною властивостей і методів;

§ поліморфізм (polymorphism) - Визначення властивостей і методів об'єкта по контексту (поліморфізм має на увазі відділення ідеї «що робити» від її втілення всередині ієрархії класу об'єктів «як робити»).

Широке поширення методології ООП вплинуло на процес розробки програм:

§ з'являються мови програмування (наприклад, Ада, Object Pascal, C ++), що враховують вимоги технології програмування;

 
 


§ процедурно-орієнтована декомпозиція програм поступилася місцем об'єктно-орієнтованої декомпозиції, при якій окремими структурними одиницями програми стали є не процедури і функції, а класи і об'єкти з відповідними властивостями і методами;

§ програма перестала бути послідовністю визначених на етапі кодування дій, а стала подієво-керованої (ця обставина стала домінуючим при розробці широкого кола сучасних додатків);

§ розвиваються методи і мови специфікації ПС, починається бурхливий процес стандартизації технологічних процесів і, перш за все, документації, створюваної в цих процесах [18];

§ створюються різні інструментальні середовища розробки і супроводу ПС.

Середина 80-х років вважається «переломним моментом» в технології програмування (проектування) ПС - з'явилася концепція автоматизованої розробки програмного забезпечення (Computer Aided Software / System Engineering, CASE). Передумовами появи і розвитку CASE-технологій стало зміна масштабів створюваних ПС: зростання складності їх функціонування і розробки, а також зміна масштабів показників якості ПС. Поява перших CASE-засобів було зустрінуте з певною настороженістю. Ранні CASE-засобу були простий надбудовою над деякою системою управління базами даних (СКБД), графічна нотація, реалізована в тому чи іншому CASE-засобі, не мала суворого синтаксису (на відміну від мов програмування), і спроби запропонувати відповідний синтаксис для візуального представлення концептуальних схем БД були сприйняті далеко неоднозначно.

В 90-х роках триває бурхливий розвиток технологій програмування, заснованих на об'єктному підході. Були створені середовища візуального програмування (Borland Delphi, Visual C ++, C ++ Builder і т. Д.), За допомогою яких можна спроектувати інтерфейс ПС. Але найбільш істотним обставиною у розвитку методології ООП стало усвідомлення того факту, що процес написання програмного коду може бути відділений від процесу проектування структури програми, пов'язаного із загальним аналізом вимог до майбутньої системи, а також з аналізом конкретної предметної області, для якої вона розробляється. З'явилася спеціальна методологія, яка отримала назву методології об'єктно-орієнтованого аналізу і проектування (ООАП).

Примітка: Необхідність аналізу предметної області до початку написання програми була усвідомлена давно, при розробці масштабних проектів і баз даних (при проектуванні БД виникає необхідність в попередній розробці концептуальної схеми, яка відображала б загальні взаємозв'язки предметної області і особливості організації відповідної інформації).

Під предметною областю (application domain) прийнято розуміти ту частину реального світу, яка має суттєве значення або безпосереднє відношення до процесу функціонування програми. Іншими словами, предметна область включає в себе тільки ті об'єкти і взаємозв'язки між ними, які необхідні для опису вимог і умов вирішення деякої задачі [36]. Для виділення або ідентифікації компонентів предметної області було запропоновано кілька способів і правил, а сам процес отримав назву концептуалізації предметної області. При цьому під компонентом розуміють деяку абстрактну одиницю, яка володіє функціональністю, т. Е. Може виконувати певні дії, пов'язані з вирішенням поставлених завдань.

Примітка: Поява методології ООАП зажадало, з одного боку, розробки різних засобів концептуалізації предметної області, а з іншого - відповідних фахівців, які володіли б цією методологією. На даному етапі з'являється відносно новий тип фахівця, який отримав назву аналітика або архітектора. Поряд з фахівцями з предметної області аналітик бере участь в побудові концептуальної схеми майбутньої ПС, яка потім перетворюється програмістами в код. При цьому окремі компоненти вибираються таким чином, щоб при подальшій розробці їх було зручно представити у формі класів і об'єктів. У цьому випадку важливе значення набуває і сама мова представлення інформації про концептуальну схему предметної області.

Поділ процесу розробки складних програмних додатків на окремі етапи сприяло становленню концепції життєвого циклу (ЖЦ) програми (SLC - Software Lifetime Cycle), при цьому кожен з них має свої методи і засоби автоматизації [17] [4]:

1. Системний аналіз предметної області, планування, організація і управління розробкою різних версій ПС;

2. Розробка і накопичення програмних та інформаційних компонент для їх багаторазового застосування в певній проблемно-орієнтованої галузі створення ПС;

3. Складання, налагодження та випробування базових версій ПС з підготовлених програмних та інформаційних компонент;

4. Модифікація і розвиток версій ПС, а також складу їх компонент для зміни і розширення характеристик базових версій ПС.

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

Методологія системного аналізу служить концептуальною основою системно-орієнтованої декомпозиції предметної області. В цьому випадку вихідними компонентами концептуалізації є системи і взаємозв'язку між ними. При цьому поняття системи є більш загальним, ніж поняття класів і об'єктів в ООАП [36]. Результатом системного аналізу є побудова деякої моделі (model) системи або предметної області.

Примітка: Загальною властивістю всіх моделей є їх подібність оригінальній системі або системі-оригіналу. Важливість побудови моделей полягає в можливості їх використання для отримання інформації про властивості або поведінці системи-оригіналу. При цьому процес побудови і подальшого застосування моделей для отримання інформації про систему-оригіналі отримав назву моделювання.

Процес розробки моделей і їх подальшого конструктивного застосування вимагав від розробників не тільки знання загальної методології системного аналізу, але і наявності у них відповідних образотворчих засобів або мов для фіксації результатів моделювання та їх документування. Природна мова не цілком підходив для цієї мети, оскільки володіє неоднозначністю і невизначеністю. Для побудови моделей були розроблені досить серйозні теоретичні методи, засновані на розвитку математичних і логічних засобів моделювання, а також запропоновані різні формальні і графічні нотації, що відображають специфіку вирішуваних завдань. Поява уніфікованої мови моделювання (Unified Modeling Language, UML), який спочатку був орієнтований на вирішення завдань перших двох етапів ЖЦ - програм, а потім став використовуватися на всіх етапах розробки ПС, було сприйнято з великим оптимізмом усіма програмістами.

Поява мережі Інтернет дало можливість підключити до неї величезна кількість користувачів, це поставило ряд проблем (як технологічного, так і юридичного та етичного характеру) регулювання доступ до інформації. Гостро постала проблема захисту комп'ютерної інформації та переданих по мережі повідомлень. З появою Інтернет [30]:

§ сильно зросла важливість масштабованих архітектур, що підтримують необмежену кількість користувачів;

§ виникає необхідність в захисті організації від спроб злому серверів і проникнення через Інтернет вірусів і небезпечних компонентів;

§ зростає асинхронне використання розподілених ресурсів;

§ з'явилася необхідність в розробці користувальницьких інтерфейсів, які не потребують спеціальної установки (оглядачі);

§ з'явилася необхідність у відділенні логіки додатків від призначеного для користувача інтерфейсу;

§ з'явилася необхідність створення багаторівневих додатків і перенесення їх на потужні Інтернет-сервери;

§ з'явилася необхідність доступу до функцій програми з різних клієнтських платформ і можливість створення інтерактивних додатків, що використовують функції WEB-серверів;

§ з'явилася необхідність і можливість створення ПС, що працюють на різних платформах (з деякими обмеженнями в сумісності і надійності);

§ з'явилася можливість публікувати величезний обсяг інформації, завдяки зниженню вартості супроводу збільшується доступність продукції та обсяг продажів;

§ з'явилася можливість створення нових типів додатків як чисто інформаційних (простий HTML), так і активних (Active X, Java).

Вирішити ці проблеми багато в чому вдалося за рахунок застосування компонентного підходу до розробки ПС, який передбачає побудову програмного забезпечення (ПО) з окремих компонентів - фізично окремо існуючих частин ПО, взаємодіючих між собою через стандартизовані виконавчі інтерфейси. Об'єкти-компоненти можна збирати в динамічні бібліотеки або виконувані файли, поширювати в двійковому коді і використовувати в будь-якій мові програмування, що підтримує відповідну технологію (рисунок 8) [12].


Компонентний підхід лежить в основі технологій, розроблених на базі COM (Component Object Model - компонентна модель об'єктів) І технології створення розподілених додатків CORBA (Common Object Request Broker Architecture- загальна архітектура з посередником обробки запитів об'єктів). Ці технології використовують подібні принципи і розрізняються лише особливостями реалізації. Про них докладніше розповімо в наступних розділах.

1.3 Ієрархія понять в технології програмування

Розглянемо ієрархічна побудова понять, пов'язаних в єдине ціле в рамках єдиної технології програмування (малюнок 9), і наведемо різного роду класифікації, які дозволять зрозуміти взаємозв'язок цих понять.

 
 


Апаратура - ось той «кит», який визначає все нове в програмуванні. До кінцевому рахунку все нові ідеї в програмуванні йдуть від нових технологій в розробці апаратного забезпечення ЕОМ. Розвиток обчислювальної техніки відбувається стрибкоподібно, це призводить до перегляду загальних концепцій і виникненню нових парадигм програмування. Так, поява переривань в ЕОМ 2-го покоління призвело до Мультипрограмування; створення мікропроцесорів до появи ПЕОМ і до розвитку потужних графічних засобів, і як наслідок, до появи CASE-інструментів; створення багатопроцесорних систем призвело до появи паралелізму обчислень; поява потужних ПЕОМ та розвиток телекомунікаційних технологій - до появи мережі Інтернет і т. д.

Кожне покоління ЕОМ програмувалося по-своєму. Перше - машинними командами, для другого були створені перші мови програмування високого рівня - Fortran, Algol, PL / 1 і ін., А потім і Pascal, які виявилися придатними і для програмування ЕОМ третього покоління. Однак мови програмування постійно змінювалися і вдосконалювалися, щоб служити адекватними моделями засобів програмування. ЕОМ четвертого і п'ятого поколінь були розраховані на «інтелектуальні пакети програм», для яких традиційне програмування не підходить.

Примітка: Синтаксичний вантаж і зараз обтяжує розуміння процесу програмування, т. К. При розробці мов програмування спочатку робили акцент не на семантику, а на синтаксис (див. П. 1.2).

За однією з класифікацій мови програмування діляться на імперативні (операторні або процедурні) і декларативні (логічні або функціональні) (рисунок 10) [22] [5].

Імперативна програма складається з послідовності операторів і пропозицій, які керують послідовністю їх виконання (оператори введення / виведення, присвоєння, передачі управління і т. П.). В основі такого програмування лежать взяття значення будь-якої змінної, вчинення над нею дії і збереження нового значення за допомогою операторів присвоювання, і так до тих пір, поки не буде отримано бажане остаточне значення.


На відміну від процедурного програмування (в якому рішення зводиться до розробки алгоритму, що виконує дію) в декларативному програмуванні рішення задачі отримують з опису структури і умов завдання. Декларативні формалізми відповідають на питання «Що?». Щоб в декларативну мову можна було виконувати обчислення, в нього вводиться процедурна семантика. У декларативною програмою послідовність і спосіб виконання програми не фіксуються, і вона (програма) може працювати в обох напрямках. Найбільш істотними класами декларативних мов є функціональні (аплікативного) і логічні.

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

Частина ідей в програмуванні веде до створення дійсно нових способів мислення і програмування, навіть не пов'язаних з конкретним мовою. Парадигма - це нова модель конструювання програми та взаємодії її з даними. На малюнку 11 наведено основні парадигми програмування, які використовуються в даний час.

Було б неправильним відривати програми від оброблюваних ними даних. Добре відома формула Н. Вірта «Алгоритми + структури даних = програми », Що відображає точку зору, що дані і програми діалектично переплітаються складним чином [7].

Примітка: Не можна однозначно стверджувати, що пріоритетно: програма або дані, так як програми можуть використовувати в якості даних інші програми (синтаксичні аналізатори, транслятори, інтерпретатори); дані можуть використовуватися як програми (в системах програмування, заснованих на базах знань).

 
 


У програмуванні дані і знання можуть виражатися як у вигляді пасивних декларативних структур даних, так і у вигляді процедурних знань по їх інтерпретації та обробки [23] [6]. У традиційних обчислювальних машинах фон неймановского типу представлення даних і команд на машинному рівні однаково. У мовах високого рівня, навпаки, дані і програма зазвичай чітко відокремлені один від одного, тому вплив на програму можливо тільки за допомогою параметрів. У логічному програмуванні в поданні даних і програми спостерігається інша крайність: там немає необхідності відокремлювати дані від програми, програму можна трактувати як сукупність логічних правил. У функціональному програмуванні між програмою і даними досягнутий певний компроміс: форма представлення програми і даних єдина, і програму можна вільно трактувати як дані, також як дані можна інтерпретувати і застосовувати як програму (це вирішує програміст). В об'єктній моделі дані об'єднуються в єдину структуру (клас) разом з процедурами, їх обробляють (див. П.1.2).

Методи програмування включають всі варіанти структурування даних. Програми є в кінцевому рахунку конкретні формулювання абстрактних алгоритмів, засновані на конкретних уявленнях і структурах даних. Рішення про структуруванні даних програміст зобов'язаний приймати з урахуванням алгоритмів, застосовуваних до цих даних, і навпаки, структура і вибір алгоритмів істотно залежать від структури даних [8].

У науково-технічних обчисленнях в основному використовуються числові дані і (або) структури, на них базуються, а в системах штучного інтелекту для представлення даних в основному використовуються символьні структури, тому для задач з області штучного інтелекту замість традиційного алгоритмічного підходу застосовуються різні евристичні методи пошуку рішення.

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

Коли наявні дані недостатні або коли інші способи не придатні для прийняття рішення, доводиться вдаватися до евристичним методам, які дозволяють отримати рішення задачі з використанням процедури самонавчання. Вони зазвичай грунтуються на пов'язаних із завданням спеціальних знаннях, найпростіших правилах, інтуїтивних умовах, які базуються на попередньому досвіді. При обробці знань важлива якісна сторона даних, Т. Е. Особливості їх зберігання і їх функціональні особливості. Знання в більшості випадків представлені в символьному вигляді або у вигляді символьних структур, При обробці важлива не стільки форма розглянутих знань, скільки їх зміст і значення.

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

Таким чином, методи програмування можна застосовувати по-різному для вирішення різних завдань. Однак те чи інше їх застосування в першу чергу залежить від того, чи задовольняє розробляється система встановленим для неї вимогам - специфікаціям (specification). Збільшення розмірів ПС і ускладнення програмування пред'являють все більші вимоги до якості програм. Автоматизація програмування і автоматичний синтез програм також висувають високі вимоги до використовуваного мови і методам програмування.

Для розробки надійних програм необхідно вибирати адекватні системи та середовища програмування, які повинні підтримувати весь технологічний процес розробки: від проектування до супроводу.

Середовище програмування утворюється з набору різних допоміжних засобів програмування і управління даними, які часто об'єднуються інтегровану робочу середу, в якій різні допоміжні засоби можна викликати один з одного, не звертаючись до операційної системи. Основна мета створення середовища програмування - підтримка процесів програмування (кодування), налагодження та тестування ПС. Найбільш відомими середовищами програмування є середовища візуального програмування Borland Delphi (мова програмування Object Pascal), MS Visual C ++, Power Builder, MS Visual Basic, MS Visual Studio і т. Д.

Широко використовуються для проектування і розробки ПС CASE-засоби являють собою інструментальні системи технології програмування, призначені для підтримки всіх процесів розробки і супроводу протягом всього життєвого циклу ПС, і орієнтовані на колективну розробку великих програмних систем з тривалим життєвим циклом (більш докладно розглянемо ці питання в наступних розділах).

Контрольні запитання до розділу 1:

1. Дайте визначення понять алгоритм, програмування, інформація.

2. Що включає в себе поняття «технологія програмування»?

3. Чим відрізняється технологія програмування від методології програмування і програмної інженерії?

4. Перерахуйте основні етапи розвитку технології програмування і відповідні їм методології програмування.

5. Розкажіть про еволюцію в архітектурі програм.

6. У чому відмінність методології структурного проектування програмних систем від методології об'єктно-орієнтованого проектування?

7. У чому особливості методології об'єктно-орієнтованого аналізу і проектування?

8. Що таке парадигма програмування? Перерахуйте їх основні особливості.

9. Які парадигми програмування лежать в основі об'єктно-орієнтованого програмування?

10. Що таке предметна область? У чому полягає принцип концептуалізації предметної області?

11. Наведіть класифікацію мов програмування. У чому їх особливості?


2 Загальні принципи РОЗРОБКИ складних ПРОГРАМНИХ ??систем

Як вже говорилося раніше (див. П. 1.1), програмування - специфічний вид інтелектуальної діяльності людини, розробка програмного забезпечення має ряд специфічних особливостей [10]:

§ Перш за все, слід відзначити деяке протистояння: неформальний характер вимог до ПС (постановка завдання) і поняття помилки в ньому, але формалізований основний об'єкт розробки - програми ПС. Тим самим розробка ПС містить певні етапи формалізації, а перехід від неформального до формального істотно неформалів.

§ Розробка ПС носить творчий характер (На кожному кроці доводиться робити якийсь вибір, приймати будь-яке рішення), а не зводиться до виконання будь-якої послідовності регламентованих дій (хоча регламент в роботі великих колективів розробників необхідно дотримуватися). Незважаючи на те що ПС відносяться до промислових програмних продуктів, процес розробки ПС ближче до процесу проектування будь-яких складних пристроїв, але ніяк не до їх масового виробництва. Цей творчий характер розробки ПС зберігається до самого її кінця.

§ Програмна система являє собою деяку сукупність текстів (т. Е. статичних об'єктів), сенс ж (семантика) цих текстів виражається процесами обробки даних і діями користувачів, які запускають ці процеси (т. е. є динамічним). Це зумовлює вибір розробником ряду специфічних прийомів, методів і засобів.

§ Програмна система при своїй експлуатації не витрачається і не витрачає використовуваних ресурсів.

2.1 Особливості сучасних програмних систем як об'єктів розробки

Розробка програмного забезпечення за останні 20 років сильно змінилася (див. П. 1.2). Оновилися традиційні методи управління, які тепер враховують накопичений за довгий час досвід. Раніше вважалося, що потрібно розробити якомога більше функцій за найменший час, і саме з цієї причини сучасні програмні продукти такі складні. Однак тиск конкуренції, зростаючий вплив користувачів, постійна зміна ситуації на технологічному ринку і невпинно розвиваються технології привели до того, що організації прагнуть спростити процес розробки. Головне ж, що спонукало їх до цього - провал величезної кількості проектів. Сьогодні мета розробників - створити якомога кращу програму при мінімумі витрат, а їх девіз - «випустити потрібний продукт в потрібний час» [30].

В об'єктах програмної інженерії (ПС) за останні роки відбулися такі докорінні зміни:

§ різко зросли масштаби і функціональна розмірність програмних компонентів (програм, компонентів динамічних бібліотек та інформаційних масивів БД), готових до використання в різних додатках і поєднаннях;

§ збільшилася трудомісткість створення таких комплексів ПС і БД та наповнення їх інформацією (сотні людино-років), тривалість життєвого циклу-кілька років чи десятиліть, ПС часто функціонують в декількох версіях, істотно розрізняються функціональними характеристиками і якістю;

§ комплекси взаємодіючих ПС та інформаційних масивів БД можуть розміщуватися на різних по архітектурі віддалених апаратних і операційних платформах і переноситися між ними;

§ для забезпечення мобільності починає застосовуватися стандартизація структури і інтерфейсів їх компонентів з операційної і зовнішнім середовищем;

§ формалізується спектр показників якості, Різко зросли вимоги до надійності і безпеки функціонування ПС.

Перераховані вище зміни об'єктів і проблеми забезпечення їх ЖЦ викликали ряд принципових змін в методології їх створення і розвитку:

O на зміну індивідуальному програмування приходить методологія колективної, індустріальної розробки з професійним розподілом праці;

O виникла необхідність застосування автоматизованих методів і засобів управління складними проектами і колективами;

O висока вартість і великі ресурси привели до необходімостідетальноготехніко-економічного аналізу і обгрунтування проектів до початку їх здійснення;

O створення ПС не закінчується після сертифікації першої версії, а, як правило, вони тривалий час розвиваються і модифікуються, Перетворюючись в серію версій;

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




Об'єктний підхід до розробки програмних систем | інженерні процеси | Каскадна модель розробки ПЗ | Спіральна модель розробки ПЗ | Інші типи моделей життєвого типу | Технологія швидкої розробки додатків RAD | ТЕХНОЛОГІЇ ПРОГРАМУВАННЯ І ПРОГРАМНА ІНЖЕНЕРІЯ |

загрузка...
© um.co.ua - учбові матеріали та реферати