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


 

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

831. Проектирование водопровода и канализации жилого здания 195 KB
  Проектирование системы холодного водоснабжения. Гидравлический расчёт системы холодного водоснабжения. Определение требуемого напора на вводе, подбор насоса. Гидравлический расчёт внутриквартальной хозяйственно-бытовой канализации. Конструирование внутридомовой канализационной сети. Гидравлический расчёт внутриквартальной ливневой канализации.
832. Особенности понятия материя 219.5 KB
  Бытие, как предельно общая абстракция. Формы движения материи. Их качественная специфика и взаимосвязь. Реляционная и субстанциальная концепции пространства и времени. • Качественное многообразие форм пространства-времени в неживой природе. Реляционная и субстанцианальная концепции пространства и времени.
833. Централизованное специализированное предприятие для текущего ремонта автомобилей 363 KB
  План организации рельефа, подсчёт красных и чёрных точек. Объемно-планировочное решение здания. Отделка фасада. Внутренняя отделка помещений. Санитарно-техническое и инженерное оборудование. Колонны каркаса и фахверка.
834. Визначення основних параметрів та режимів роботи валкової жатки 3.57 MB
  Характеристика умов роботи валкової жатки. Існуючі технології схеми валкових жаток. Висота встановлення осі мотовила над різальним апаратом. Винос мотовила відносно різального апарата.
835. Стандартизация свойств. Физические, механические, физико-химические свойства 81.93 KB
  Стандартизация свойств. Марки материалов. Физическое состояние строительных материалов. Свойства материалов по отношению к различным физическим воздействиям. Способность материала поглощать водяные пары из воздуха. Коэффициент линейного температурного расширения (КЛТР).
836. Корреляционная зависимость между реальной заработной платой и безработицей в России с июля 2008-2009 годов 250.5 KB
  Социально-экономическое явление, предполагающее отсутствие работы у людей, составляющих экономически активное население. Влияние реальной заработной платы получаемой россиянами на безработицу в России за промежуток времени равный одному году с июля 2008 года по июнь 2009 года.
837. Использование компьютерной графики в профессиональной деятельности 161.5 KB
  Раскрыть назначение, состав и возможности программ подготовки графических документов на ПЭВМ. Получить представление о принципах графического моделирования для решения идентификационных задач. Назначение, функции, состав и возможности программ подготовки графических документов на ПЭВМ. Графическое моделирование для решения практических задач.
839. Теория культурологии 183 KB
  Основные культурологические теории прошлого и современности. Концепции происхождения и сущности культуры европейских просветителей. Теория культурно-исторических типов Н.Я. Данилевского. Теория культурно-исторических типов и локальных цивилизаций П.А. Сорокина.