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


 

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

82416. Философия жизни 46.62 KB
  Сознание дух только средства и орудия на службе у жизни. Метафизика это проектированиетотальности жизни на бытие. Все метафизические истолкования и интерпретации мира покоятся напереживании жизни.
82417. Психоанализ З. Фрейда. Фрейдизм, неофрейдизм 28.64 KB
  Классическая психология до Фрейда изучала явления сознания как они проявлялись у здорового человека. Фрейд как психопатолог исследуя характер и причины неврозов натолкнулся на ту область человеческой психики которая раньше никак не изучалась но которая имела большое значение для жизнедеятельности человека бессознательное. Особое значение Фрейд придает психосексуальному развитию человека влиянию его инстинктивной сексуальнобиологической энергии либидо на жизнь его чувств и поведение. В дальнейшем поведение ребенка а затем юноши и...
82418. Феноменология Э. Гуссерля: идейно-теоретические истоки, основные идеи, понятия, этапы развития 38.34 KB
  Феноменология Гуссерля широкое в потенции бесконечное поле методологических а также гносеологических онтологических этических эстетических социальнофилософских исследований любой темы философии через возврат к феноменам сознания и их анализу. Результатом исполнения феноменологической редукции является перемещение на исследовательскую почву чистого сознания; 4 чистое сознание есть смоделированное феноменологией сложное единство структурных элементов и сущностных взаимосвязей сознания. Оригинальность и теоретическая значимость...
82419. Особенности восприятия феноменологии Э. Гуссерля в современной зарубежной философии 34.99 KB
  Гуссерля в современной зарубежной философии Возникновение феноменологии как философского течения связано с творчеством Эдмунда Гуссерля 1859 1938. Однако постепенно происходит изменение его научных интересов в пользуфилософии. Гуссерль изложил в следующих работах: Логические исследования 1901 Философия как строгая наука 1911 Идеи чистой феноменологии и феноменологической философии 1913 Трансцендентальная логика и формальная логика 1921 Картезианские размышления 1931. Особенность философии Э.
82420. Немецкая философия экзистенциализма 29.08 KB
  Основная работа Бытие и время 1927 подчинена трем задачам: 1 выявить фундаментальную структуру здесьбытия как бытиявмире; 2 показать что бытиевмире является временным и историчным; 3 на основе временности здесьбытия осознать необходимую принадлежность времени к смыслу бытия. здесьбытие выступает основой его экзистенциальной онтологии. ставит вопрос о том что есть бытие само по себе и решает его через рассмотрение человеческого бытия поскольку только оно наделено возможностью понимания бытия. Человеческое бытие...
82421. Французская экзистенциальная философия 37.43 KB
  Экзистенциализм — возможно, наиболее популярное (наряду с психоанализом) философское течение нашего времени. Его название происходит от немецкого «existieren» и французского «exister» — существовать, и обращено не к выяснению сущности человека, а к его повседневному бытию
82422. Персонализм 35 KB
  Французский персонализм одно из ведущих философских течений современности; вместе с феноменологией экзистенциализмом и неотомизмом он составил целую эпоху в интеллектуальной жизни Франции первой половины XX в. Датой рождения французского персонализма считается октябрь 1932 г. Основоположник и главный теоретик французского персонализма Эммануэль Мунье 19051950 профессиональный философ католик по вероисповеданию; ему удалось сплотить вокруг Esprit творческую молодежь философов социологов публицистов литераторов литературных и...
82423. Философская герменевтика. Трудности перехода от понимания как способа познания к пониманию как способу существования 30.84 KB
  Хотя история герменевтики может быть прослежена через Средневековье до античности понятие герменевтики в его современном значении восходит к Новому времени. Революционный шаг в становлении герменевтики как самостоятельной дисциплины сделан Шлейермахером принципиально расширившим сферу подлежащих истолкованию текстов: для Шлейермахера это учение об искусстве понимания письменных документов вообще. Задачу герменевтики составляет прояснение условий делающих возможным уразумение смысла того или иного текста. Важным этапом становления...
82424. Аналитическая философия XX века: основные направления и проблемы 28.31 KB
  Одна из отличительных черт интеллектуальной культуры XX столетия развитие и нарастающее влияние аналитической философии. Главные цели философии анализа выявление структуры мысли прояснение всего смутного невнятного достижение прозрачного соотнесения языка и реальности четкое разграничение значимых и пустых выражений осмысленных и бессмысленных фраз. Внутри аналитической философии выделяют два направления: философию логического анализа и философию лингвистического анализа или лингвистическую философию. Исходные проблемы и понятия...