На головну

ПРОЕКТУВАННЯ програм

  1. II. Регіональна програма капітального ремонту
  2. III етап. Складання програмного коду
  3. IV етап - Запуск програми 1 сторінка
  4. IV етап - Запуск програми 2 сторінка
  5. IV етап - Запуск програми 3 сторінка
  6. IV етап - Запуск програми 4 сторінка
  7. IV. ПРОГРАМА ДЕРЖАВНОГО РЕГУЛЮВАННЯ

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

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

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

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

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

1) Постановка завдання;

2) проектування програми;

3) побудова моделі;

4) розробка алгоритму;

5) реалізація алгоритму;

6) аналіз алгоритму і його складності;

7) тестування програми;

8) Документування.

Коротко зупинимося на кожному з цих етапів.

припостановці завдання для великих комп'ютерних програм необхідно провести наступні роботи:

- Виробити вимоги (властивості, якості і можливості), необхідні для вирішення проблеми або досягнення мети (як правило, ця діяльність носить експертний характер);

- Разработатьспеціфікаціі, що включають:

- Мета програми;

- граничні умови;

- Опис функцій системи;

- Специфікації вхідних і вихідних даних;

- Верифікаційні вимоги (встановлення тестових випадків);

- Тип і кількість документів.

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

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

- Як визначити рішення;

- Яких даних не вистачає і чи всі вони потрібні;

- Які зроблені припущення і т. П.

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

- Ім'я / мета - даетсяімя модулю і пропозиція про функції модуля з формальними параметрами;

- Неформальне опис - огляд дій модуля;

- Посилання - які модулі посилаються на нього і на які модулі посилається даний модуль;

- Вхід / вихід - формальні і фактичні параметри, глобальні, локальні і пов'язані (загальні для ряду модулів) змінні;

- Примітки - корисні коментарі загального характеру по модулю.

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

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

Методи проектування архітектури діляться на дві групи:

1) орієнтовані на обробку та

2) орієнтовані на дані.

Методи, орієнтовані на обробку, включають такі загальні ідеї.

а) Модульне програмування. Основні концепції:

- Кожен модуль реалізує єдину незалежну функцію;

- Має єдину точку входу / виходу;

- Розмір модуля мінімізується;

- Кожен модуль розробляється незалежно від інших модулів;

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

б) Функціональна декомпозиція.

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

в) Проектування з використанням потоку даних.

Використовує потік даних як генеральну лінію проектування програми. Містить елементи структурного проектування зверху-вниз з покрокової деталізацією:

- Експертиза потоків даних і відображення графа потоку даних;

- Аналіз вхідних, центральних і вихідних перетворюють потік даних елементів;

- Формування ієрархічної структури програми;

- Деталізація і оптимізація структури програми.

г) Технологія структурного аналізу проекту.

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

Методи проектування, засновані на використанні структур даних, описані нижче.

а) Методологія Джексона.

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

- Розробка і зображення структури вхідних та вихідних даних;

- Зображення структури програми шляхом з'єднання зображень цих структурних елементів:

- Визначення дискретних операцій над структурами даних;

- Побудова алгоритмів обробки структур даних.

б) Методологія Уорнера.

Подібна попередньої, але процедура проектування більш деталізована. Використовуються такі види представлення проекту:

- Діаграми організації даних (описують вхідні і вихідні дані);

- Діаграми логічного слідування (логічний потік цих даних);

- Список інструкцій (команди, які використовуються в проекті);

- Псевдокод (опис проекту);

- Визначення вхідних даних системи;

- Організація вхідних даних в ієрархічну структуру;

- Детальне визначення формату елементів вхідного файлу;

- Те ж саме для вихідних даних;

-спеціфікація програми: читання, розгалуження, обчислення, виходи, виклич підпрограм;

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

в) Метод ієрархічних діаграм.

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

Алгоритм проектування за цим методом полягає в наступних кроках:

- Почати з найвищого рівня абстракції, визначивши вхід, вихід, обробку;

- З'єднати кожен елемент входу і виходу з відповідної обробкою;

- Документувати кожен елемент системи, використовуючи діаграми;

- Деталізувати діаграми, використовуючи кроки 1 - 3.

г) Об'єктно-орієнтована методологія проектування.

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

· Визначення проблеми;

· Розвиток неформальної стратегії, яка відповідає вимогам до системи;

· Формалізація стратегії;

· Створення об'єктів і їх атрибутів;

· Визначення операцій над об'єктами;

· Установка інтерфейсів;

· Реалізація операцій.

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

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

Мал. 3.3. Схема побудови моделі при дедуктивному способі

При дедуктивному підході (рис.3.3) розглядається окремий випадок загальновідомою фундаментальної моделі. Тут при заданих припущеннях відома модель пристосовується до умов модельованого об'єкта. Наприклад, можна побудувати модель вільно падаючого тіла на основі відомого закону Ньютона та = mg - Fcoпp і в якості допустимого наближення прийняти модель рівноприскореного руху для малого проміжку часу.

Мал. 3.4. Схема побудови моделі при індуктивному способі

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

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

1) емпіричний етап

- Умовивід;

- Інтуїція;

- Припущення;

- Гіпотеза.

2) постановка завдання длямоделірованія;

3) оцінки; кількісне і якісне опис;

4) побудова моделі.

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

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

- Кодування;

- Інтеграцію;

- Тестування (сертифікацію).

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

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

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

тестування-це процес виконання програм з метою виявлення (виявлення) помилок. Тестування - процес деструктивний, тому вважається, шануй тест вдалий, якщо виявлена ??помилка. Хорошим вважається тест, який має велику ймовірність виявлення ще не виявленої помилки. Вдалим вважається тест, який виявляє ще не виявлену помилку.

Існують різні способи тестування програм.

Тестування програми як «чорного ящика» (стратегія «чорного ящика» визначає тестування з аналізом вхідних даних і результатів роботи програми). Критерієм вичерпного вхідного тестування є використання всіх можливих наборів вхідних даних.

Тестування програми як «білого ящика» полягає в стратегії управління логікою програми, дозволяє використовувати її внутрішню структуру. Критерієм виступає вичерпне тестування всіх маршрутів і керуючих структур програми.

Розумна і реальна стратегія тестування - поєднання моделей «чорного» і «білого ящиків».

Принципи тестування:

- Опис передбачуваних значенні вихідних даних або результатів має бути необхідною частиною тестового набору;

- Тести для неправильних і непередбачених вхідних даних слід розробляти так само ретельно, як для правильних і передбачених;

- Необхідно перевіряти не тільки робить програма то, длячого вона призначена, але і не робить вона те, що не повинна робити;

- Не можна планувати тестування в припущенні, що помилки не будуть виявлені;

- Ймовірність наявності невиявлених помилок в частині програми пропорційна числу помилок, вже виявлених в цій частині;

- Тестування - процес творчий.

При розробці програм дуже корисним буває метод «ручного тестування» без комп'ютера на основі інспекції і наскрізного перегляду (тестування «всуху»).

Інспекція і наскрізний перегляд - це набір процедур і прийомів виявлення помилок при читанні тексту.

Основні типи помилок, що зустрічаються при програмуванні:

- Звернення до змінних, значення яких не присвоєно або НЕ ініціалізовані;

- Вихід індексів за межі масивів;

- Невідповідність типів або атрибутів змінних величин;

- Явні чи неявні проблеми адресації пам'яті;

- Помилкові передачі управління;

- Логічні помилки.

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

Особливу увагу необхідно приділяти тестів на граничних умовах. Граничні умови - це ситуації, що виникають безпосередньо на, вище або нижче меж вхідних і вихідних класів еквівалентності (т. Е. Поблизу кордонів еквівалентних розбиття). Зокрема, прикладами класів еквівалентних тестів для алгоритму рішення квадратного рівняння можуть бути такі класи: безліч дійсних, відмінних від нуля, чисел а, b, с, таких, що b • b - 4аз <0; безліч чисел а = 0, b і з не дорівнюють нулю; b = 0, а і з не рівні нулю, і т. п.

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

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

Є золоте правило програмістів - оформлюй свої програми в тому вигляді, в якому б ти хотів бачити програми, написані іншими. До кожного кінцевого програмного продукту необхідно документоване супровід у вигляді допомоги (help), файлового тексту (readme.txt).

Контрольні питання і завдання

1. Які основні етапи проектування та розробки програми?

2. Що означає добре сформульована постановка задачі?

3. Назвіть методології проектування і розробки програм.

4. Як вибрати модель задачі?

5. Що таке тестування програми?

6. Побудуйте групу тестів для алгоритму розв'язання системи лінійних рівнянь.




ГРАММАТИКА МОВ ПРОГРАМУВАННЯ | ВСТУП | ОСНОВНІ КОНСТРУКЦІЇ МОВИ | СТРУКТУРИ ДАНИХ | ПРОЦЕДУРИ І ФУНКЦІЇ | РОБОТА З ФАЙЛАМИ | Динамічні ІНФОРМАЦІЙНІ СТРУКТУРИ | Деякі відомості про драйвери н визначених ними режимах | Приклади графічних програм | ТУРБО-ОБОЛОНКИ. ВЕРСІЇ Паскаль |

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