42588

Дослідження засобів документування програм

Лабораторная работа

Информатика, кибернетика и программирование

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

Украинкский

2013-10-30

366.5 KB

1 чел.

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ АВІАЦІЙНИЙ УНІВЕРСИТЕТ

ФАКУЛЬТЕТ КОМП’ЮТЕРНИХ НАУК

Лабораторна робота № 9

З дисципліни «МРПП та ВПС»

на тему: “ Дослідження засобів документування програм

Виконав: 

студент ФКН 405

Рощак I.М.

Перевірив:

викладач

Варнавський В. В.

Київ 2010

Теоретичні відомості

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

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

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

Doxygen – це утиліта генерації документації для програм, написаних на C++, C, Java, Objective-C, Python, IDL(Corba та Microsoft), деяких версій PHP, C# і D. Вихідна документація є файлами в html-форматі, у форматі LaTex(зокрема, для подальшого створення pdf-файлів), rtf, довідкового керівництва в стилі Unix-man, довідкового керівництва в стилі кросплатформенної бібліотеки Qt, xml і т.ін. Крім документування кожного окремого файлу, Doxygen формує звідні індекси по іменах функцій, змінних, визначень типів і т.ін. (рис.2.13).

Відношення між приложениями та інформаційними потоками між ними:

Інформаційні потоки Doxygenww.pdffactory.com

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

Vykonavchyy̆ fay̆l doxygen - holovna prohrama, yaka rozbyraye vykhidnyy̆ kod i heneruye dokumentatsiyu.

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

1. Відкрити DoxygenWizard.

2. [Load…] – вибрати основний файл проекту (cpp).

3. [Expert…]

3.1. [Project]

3.1.1. Output Language → Russian

3.1.2. FULL_PATH_NAMES → Off

3.1.3. TAB_SIZE → 4

3.2. [Build]

3.2.1. EXTRACT_ALL → On

3.2.2. EXTRACT_PRIVATE → On

3.2.3. EXTRACT_STATIC → On

3.2.4. EXTRACT_LOCAL_METHODS → On

3.2.5. INTERNAL_DOCS → On

3.2.6. SHOW_DIRECTORIES → Off

3.3. [Input]

3.3.1. Видалити поточне (-), додати кожен файл для документування (cpp) через ‘Select’ → ‘+’.

3.4. [LaTeX]

3.4.1 Generate LaTeX → Off

4. [Save…] →Зберегти в директорії основного файлу проекту.

5. Start.

Деякі параметри що використовуються в Doxygen наведені нище.

EXTRACT_ALL Включення в документ усіх класів, файлів і т.д. За умовчанням в документацію потрапляють тільки спеціально віддокументовані частини коду

EXTRACT_STATIC Включення в документ статичних членів файлу

HAVE_DOT Використовується пакет візуалізації графів Graphviz для генерації діаграм

HIDE_UNDOC_RELATIONS Прибирає з класу зв’язки між документованими класами

CLASS_GRAPH В описі класу з’являється діаграма успадкування класу та список класів нащадківww.pdffactory.com

(успадковані класи) і класів предків (базові класи)

COLLABORATION_GRAPH Граф зв’язків

UML_LOOK Використовується UML стиль діаграм

GENERATE_TREEVIEW Поява вікна з деревом всіх обьектов проекту

CALL_GRAPH Граф визову функцій

INCLUDE_GRAPH

INCLUDED_BY_GRAPH

Графи включення файлів

Спеціальні коментарі, розташовані в коді програми потрапляють в документацію. Коментарі бувають короткі або

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

елементом (файл, клас, змінна, функція і т.ін.) проекту. Додатковий символ слеш – /// створює короткий коментар.

Додатковий символ зірочка – / ** створює детальний коментар.

Набір спеціальних команд дозволяють тримати коментарі в додаткових файлах.

Нижче наведений приклад з використанням команд:

- використання списків (елемент списку позначається символом -);

- коментар файла (\file) усередині і зовні файлу;

- команда автор (\author);

- команда дата (\date);

- команда зауваження (\note);

- команда короткого коментаря (\brief);

- команда нового параграфа (\par);

–––File:./csharp/main.txt

/**

\file main.cs

\brief головний файл застосування

дуже докладний опис файлу main.cs

\author Іван Іванов

\date 2009

\note

це застосування було розроблено для показу

\par

Ціль проекту полягає в демонстрації можливостей Doxygen;

*/

–––End Of File:./csharp/main.txt

Завдання: 

1. Вивчити основні можливості засобу Doxygen та методику створення у програмах спеціальних блоків документування.

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

3. Вивчити та використати формули в LaTeX.

4. Створити документацію програм за допомогою Doxygen у форматах .html та .rtf.

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

Виконання:

  1.  Створення спеціальних блоків документування програм.
  2.  Програма № 1 . Демонструє роботу з однозв’язним лінійним списком.

Код програми написано на мові С++ має наступний вигляд:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

/* First node of the list is not used to store actual values*/

/* Last node has "next" pointer equal to zero */

typedef struct _node {

       int value;

       struct _node * next;

}Node,List;

/*Sets the end of list to it's start*/

void CreateList(List * list) {

       list->next=NULL;

};

void AddNode(List * list,int value) {

       Node * node;

       //if the end of list is found

       if(list->next==NULL) {

               //insert to the end

               list->next = (Node*) malloc(sizeof( List));

               list->next->value=value;

               list->next->next=NULL;

               return;         

       };//end of looking up

 

       //if the right place is found

       if(list->next->value >= value)  {

               //insert there

               node = (Node*)malloc(sizeof( List));

               node->value = value;

               node->next = list->next;

               list->next = node;      

       } else //keep searching - call the same for next node.

               AddNode(list->next,value);

};

int DelNode(List * list,int value) {

       Node * tmp;

       //if this is the end - quit.notging deleted.

       if(list->next==NULL) return 0;

       if(list->next->value==value) {

               //deleted something.return true.

               tmp = list->next->next;

               free(list->next);

               list->next = tmp;

               return 1;//else keep searching

       } else return DelNode(list->next,value);

};

void PrintList(List * list) { //thats just simple.

       Node * tmp;

       if(list->next == NULL)  {

               printf("List is empty");

               return;

       }

       tmp = list->next;

       while(tmp !=NULL) {

               printf("%d ",tmp->value);

               tmp=tmp->next;

       };

};

int CntList(List * list) { //even more simple

       int i = 0 ;

       Node * tmp = list;

       while(tmp->next != NULL) {

               i++;

               tmp=tmp->next;

       };

       return i;

};

int OccList(List * list,int value ) {

       if(list->next == NULL) return 0;

       if(list->next->value == value)

               return 1+OccList(list->next,value);

       if(list->next->value >value )

               return 0;

       return OccList(list->next,value);

};

int CdvList(List * list) {

       if(list->next == NULL)

               return 0;

       if(list->next->next ==NULL)

               return 1;

       if(list->next->value == list->next->next->value)

               return CdvList(list->next);

       else

               return 1+CdvList(list->next);

};

int RanList(List * list,int value1, int value2) {

       if(value1 >value2){

               printf("Invalid range\n");

                       return -1;

       }

       if(list->next==NULL)

               return 0;

       if(list->next->value > value2 )

               return 0;

       if(list->next->value < value1 )

               return RanList(list->next,value1,value2);

       return RanList(list->next,value1,value2)+1;

};

int main () {

       char command[4];

       int param1,param2,tmp;

       List list;

       CreateList(&list);

       while(1) {

               printf("Enter command : ");

               scanf("%s",command);

               if(!strcmp(command,"pri") ) {

                       PrintList(&list);

                       printf("\n");

               };

               if(!strcmp(command,"ins") ) {

                       scanf("%d",&param1);

                       AddNode(&list,param1);

               };

               if(!strcmp(command,"del") ) {

                       scanf("%d",&param1);

                       if(!DelNode(&list,param1))

                               printf("There is no given value in the list\n");

               };

               if(!strcmp(command,"cnt") ) {

                       printf("Number of nodes : %d\n",CntList(&list));

               };

               if(!strcmp(command,"cdv") ) {

                       printf("Number of unique nodes: %d\n",CdvList(&list));

               };

               if(!strcmp(command,"occ") ) {

                       scanf("%d",&param1);

                       printf("There are %d entries of %d in list\n",OccList(&list,param1),param1);

               };

               if(!strcmp(command,"ran") ) {

                       scanf("%d %d",&param1,&param2);

                       if( (tmp = RanList(&list,param1,param2))>=0)

                               printf("Number of nodes within selected range is %d\n",tmp);

               };

               if(!strcmp(command,"end") )  

                       break;

       };

       return 0;

};

Приклад документування програми:

  1.  Програма № 2 . Вивід повідомлення Hello World !!!

Код програми написано на мові С# має наступний вигляд:

public class ExampleClass

{

 public static void Main()

 {

   System.Console.WriteLine("Hello, world!");

 }

}

Приклад документування програми:

PAGE   \* MERGEFORMAT 1


 

А также другие работы, которые могут Вас заинтересовать

10166. Периодизация развития техники как философская проблема. Основные способы периодизации развития техники 50.5 KB
  Периодизация развития техники как философская проблема. Основные способы периодизации развития техники. Закономерности исторического развития техники. Проблема периодизации. Предметная сторона Т. Техника и наука. Т как деятельность. ФТ выделяе...
10167. Взаимоотношение науки и техники на различных этапах эволюции техники 50 KB
  Взаимоотношение науки и техники на различных этапах эволюции техники Они не всегда были взаимосвязаны Т долгое время развивалась независимо от всякой науки. Это не означает что в технике не применялись научные знания. Доинженерный период. Но наука не имела дисциплин
10168. Техногенная цивилизация, ее история и перспективы 108 KB
  Техногенная цивилизация ее история и перспективы. Информационное общество – это высшая стадия развития техногенной цивилизации. Для характеристики его места в истории вернемся к общим представлениям о развитии культуры. С т.з. современной социальной философии сущ
10169. Чернобыльская радиация в вопросах и ответах 735.41 KB
  Когда в СССР сообщили об аварии на Чернобыльской АЭС Первая информация об аварии прозвучала в программе Время вечером 27 апреля, первая публикация в печати состоялась 28 апреля...
10170. Информационное общество как тип социальной организации 58 KB
  Информационное общество как тип социальной организации. Оценка сущности последней стадии в социальной философии ХХ в. претерпела эволюцию. Первоначально она характеризовалась как постиндустриальное общество Д. Белл технотронное общество З. Бжезинский. В 80х г...
10171. Проблема личности в информационном обществе 150 KB
  Проблема личности в информационном обществе Таким образом можно составить обобщенный свод проблем личности в информационном обществе. 1. Проблемы общения. С одной стороны благодаря Интернету мир превратился в мировую деревню: термин ввел в 70е гг. Маклюэн: все д...
10172. Гуманитарная философия техники. Льюис Мэмфорд: миф машины 44.5 KB
  Гуманитарная философия техникиИнженерная философия техники анализ техники как бы изнутри и – в конечном счете – интерпретация технического способа бытия человека в мире как парадигматического главного для понимания других типов человеческого мышления и действия мог
10173. Ортега-и-Гассет Х. 31.5 KB
  Х. Ортегаи-Гассет. Испанский философ Хосе Ортегаи-Гассет 18831955 в связи с анализом техники указывал на двойственность человека – он отличен от природы и вместе с тем посредством техники он с ней сливается. По мысли Ортегии-Гассета современный мир сделали возможным тр...
10174. Смысл техники в философии Карла Маркса 41.5 KB
  Смысл техники в философии Карла Маркса О смысле техники и ее роли в человеческой истории философы много спорили. Широкое распространение получил марксистский подход который отождествлял технику с объективацией некоторых природных свойств в инструментальных целях тр