ДонНТУ   Портал магістрів

Реферат за темою випускної роботи

Зміст

            2.1 Сучасні методи генерації програмного коду

            2.2 Інструментарій для реалізації

            2.3 Існуюча реалізація. інваріанти алгоритмів

Вступ

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

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

1. Актуальність SADT методології

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

1.1 Загальні відомості про мову формальних специфікацій SADT

SADT (Structured Analysis and Design Technique) завоював популярність завдяки своїм характерним особливостям, а саме:

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

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

1.2 Області застосування методології SADT

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

2. Огляд досліджень за темою магістерської роботи

В даний час ведуться дослідження, спрямовані на вирішення проблем неузгодженістю структурних частин; двозначністю, надмірністю (неповнотою) супроводжуваної проектної документації. Сформувалося навіть цілий науковий напрям — CASE–технології (Computer Aided Software Engineering), що реалізують виконання деяких етапів розробки в автоматичному режимі. За даними деяких досліджень, використання такого підходу дозволяє підвищити продуктивність праці при розробці системи, зменшити матеріальні витрати, зменшити складність і підвищити якість проектів [2].

2.1 Сучасні методи генерації програмного коду

В даний час індустрія розробки програмного забезпечення використовує візуальний метод контакту з користувачем, а не текстовий, як це було, наприклад, в при роботі в DoS. У зв'язку з цим, важливим є питання генерації програмного коду по графічним моделям (примітивам). Моделі можна розділити на два класи: статичні і динамічні [3].

Основою для статичних моделей об'єктно–орієнтованих програм є діаграма класів. Багато інструментальні засоби (Rational Rose) використовують саме цей підхід — генерується основа, т.зв. скелет, коду за діаграмі класів [3].

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

На практиці ж для генерації програмного коду застосовуються апаратні рішення, що дозволяють отримати код на різних мовах програмування. Саме такий підхід був розглянутий в роботі Канжелева С. Ю. Автоматична генерація коду програм із явним виділення станів. Метою роботи було опис підходу до генерації коду програм з явним виділенням станів на будь–якому апріорі заданому мовою програмування [3].

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

Ще один підхід був розглянутий в роботі Кручиніна А. Н. Автоматична генерація програмних компонент по високорівневим специфікаціям. Автор приділяє увагу проблеми якості згенерованого програмного коду, вказує на появу складного коду, який з часом стає неочевидним і дуже важким для розуміння і подальшої модифікації. Головною метою роботи є розгляд методів досягнення прийнятної локалізації програмного коду. Пропонується рішення проблеми реалізації наскрізної функціональності. Це дозволить зменшити вартість внесення змін в програмний код. Робота є продовженням і розвитком робіт Фуксмана А. Л., присвяченим проблемам рассредоточенности програмного коді, а також ідей про вертикальному шарування програми.

У цій роботі були розроблені методи структуризації програмного коду. Для досягнення поставленої мети розробляються методи застосування аспектно–орієнтованої парадигми, не обмежених виключно об'єктно–орієнтованими мовами, шляхом вирішення наступних завдань: про розширення області застосування точок зв'язування на не об'єктно–орієнтовані мови; про розширення області застосування аспектів на не об'єктно–орієнтовані мови [4].

2.2 Інструментарій для реалізації

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

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

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

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

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

2.3 Існуюча реалізація. інваріанти алгоритмів

Подібна програмна система була розроблена Губанєм Б. [5]. Вона генерує програмний код для роботи з масивами цілих і масивами рядків. Були реалізовані функції пошуку максимального (мінімального) значень у масиві та перестановка елементів масиву.

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

Автор роботи виділяв загальні частини в алгоритмах, т.зв. інваріанти алгоритмів.

Розглянемо роботу методології на прикладі функцій пошуку і подальшого видалення елемента з одновимірного масиву і списку.

Алгоритм пошуку перебором

Рисунок 1 — Алгоритм пошуку перебором

Алгоритм видалення зі зміщенням

Рисунок 2 — Алгоритм видалення зі зміщенням

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

Діаграма станів автомата Мура

Рисунок 3 — SADT діаграма для одновимірного масиву
(анімація: 8 кадрів, 5 циклів повторення, 50 кілобайт)
(x — вхідний масив, b — елемент, що шукається, Res — індекс знайденого елементу в масиві, x` — вихідний масив)

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

Висновок

Проаналізувавши існуючі підходи до автоматичної генерації програмного коду, вибір зупинився на використанні мови формальних специфікація SADT із застосуванням інваріантів алгоритмів. Таким чином, напрямком подальших досліджень буде вдосконалення вже існуючої реалізації такого підходу. Спираючись на роботу [5] розширити функціональність для базових алгоритмів пошуку, модифікації і видалення елементів. Реалізувати роботу цих базових алгоритмів з великим набором основних структур даних мов програмування (матриці, списки, дерева).

При написанні даного реферату магістерська робота ще не завершена. Остаточне завершення: грудень 2012 року. Повний текст роботи та матеріали по темі можуть бути отримані у автора або його керівника після зазначеної дати.

Перелік посилань

  1. Герман М.В., Галактионов Е.А., Применение методологии структурного анализа и проектирования SADT/IDEF0 как инструмента менеджмента качества. Электронный ресурс. Режим доступа: http://www.hsb.tsu.ru/content.php?id=116
  2. Козлинский А.В. CASE-технология: индустриальная разработка систем обработки информации // Компьютерное обозрение. — 1993. — №1.
  3. Канжелев С. Ю. Автоматическая генерация кода программ с явным выделением состояний, Software Engineering Conference (Russia) — 2006 (SEC (R) 2006), с. 60–63.
  4. Кручинин А. Н. Автоматическая генерация программных компонент по высокоуровневым спецификациям, Ростов–на–Дону, 2006.
  5. Губань Б. И., Анализ эффективности алгоритмов генерации кода по технологии SADT, Реферат по теме выпускной работы. Электронный ресурс. Режим доступа: http://masters.donntu.ru/2010/fknt/guban/diss/index.htm
  6. Жарихина М.А. Подготовка управляющих программ для станков с ЧПУ / Учебно–научно–производственный журнал Автоматизация и управление в машиностроении, Выпуск №21, — Москва, — 2003.
  7. Анисимов Б.П., Котов В.В. Современные методологии структурного анализа и проектирования систем обработки информации / Журнал Программные продукты и системы, Выпуск №2, — Москва, — 1997.
  8. Gabrovska K., Smrikarov A. Structural analysis and methods for development of software tool for design and energy simulation of PV–hybrid power supply systems in poultry farms / International Conference on Computer Systems and Technologies CompSysTech, — 2005.
  9. Богатырёв М.Ю. Инварианты и симметрии в генетических алгоритмах. — Тула: Тульский государственный университет, 2003. — 8 с.
  10. Ross D., Structured Analysis (SA): A Language for Communicating Ideas, IEEE Transactions on Software Engineering, vol. SE–3, N. 1, pp. 16–34. 1, Jan. 1977.