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


 

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

82507. Характеристика судебной системы США 26.5 KB
  Кроме того в систему федеральных судов входят так называемые специализированные суды имеющие отдельную компетенцию с правом вынесения приговоров и решений налоговый суд суд по делам военнослужащих суд по таможенным и патентным делам претензионный суд. Районные суды рассматривают уголовные и гражданские дела в качестве суда первой инстанции. Апелляционные окружные суды осуществляют проверку решений районных судов а также рассматривают жалобы на решения ряда административных квазисудебных органов например Национального управления...
82508. Общая характеристика мусульманской правовой семьи 28.91 KB
  История развития мусульманской правовой системы неразрывно связана с формированием мусульманской религиозной культуры. Но в Коране было упомянуто о том что мнение единое во всей мусульманской общине не может быть неверным. Иджма мнение по правовым вопросам авторитетных ученыхтеологов которое представлено как мнение всей мусульманской общины.
82509. Общая характеристика правовых систем стран Дальнего Восток 26.29 KB
  К отличительным критериям на основе которых можно определить к какой правовой семье следует отнести ту или иную правовую систему принадлежит также восприятие права как исключительно важного социального инструмента регулирования общественных отношений. Поэтому описание китайского и японского права позволит выявить некоторые важные и характерные элементы общей дальневосточной концепции права. Все западные правовые системы независимо от того относятся ли они к семье романогерманского или общего права едины в том что важнейшие вопросы...
82510. Общая характеристика российской правовой системы 27.03 KB
  То что правоприменители и граждане столь часто подчиняются правовым обыкновениям даже в ущерб соблюдению норм права связано с историческими особенностями с противодействием монгольскому владычеству и с традиционной либеральностью центральной власти по отношению к местной. Система права стала более упорядоченной. Правда остаются весьма болезненными проблемы соответствия законодательства субъектов федеральному законодательству и отсутствия нормативных актов в ряде важнейших отраслей права экологическом незавершенность налоговой кодификации...
82511. Значение сравнительного правоведения как науки и учебной дисциплины 26.7 KB
  Сравнительноправовые исследования в сочетании с традиционными историческим нормативным и социологическим видением права позволяют: вопервых изучить явления правовой действительности которые ранее не охватывались проблематикой правоведения и выйти за национальные рамки своей правовой системы; вовторых взглянуть под особым углом зрения на ряд традиционных проблем юридической науки с учетом тенденций развития права в современном мире. Для юридической науки обращенной прежде всего к национальному праву использование сравнительного...
82512. История сравнительного правоведения 27.8 KB
  Сторонники первого похода рассматривающие его лишь как один из научных методов юриспруденции настаивают на древнем происхождении сравнительного правоведения При этом они указывают что еще античные а позже и средневековые философы и законодатели использовали сравнение как метод исследования в целях решения конкретных проблем. При этом иногда указываются такие конкретные даты как 1869 год год основания французского Общества сравнительного законодательства и реже 1900 год. когда был проведен I Международный конгрес сравнительного права.
82513. Научная, образовательная, практическая функции сравнительного правоведения 24.14 KB
  Сравнительное правоведение как и любая другая наука воздействует на общество. Научная функция Сравнительное правоведение является одним из важнейших поставщиков информации об иностранных правовых системах для всей юридической науки. Кроме этого сравнительное правоведение обладает и самостоятельной научной ценностью особенно в части разработки теории правовой системы. Сравнительное правоведение один из немногих курсов позволяющих более или менее подробно ознакомиться иными правовыми системами что существенно расширяет профессиональный...
82514. Правовая семья (правовая система) – основное понятие сравнительного правоведения 27.46 KB
  Правовая система как совокупность социальных институтов их функциональных связей и качественных характеристик посредством которых осуществляется правовое регулирование общественных отношений. Наиболее распространен в современной компаративистике термин правовая семья Категория правовая семья служит для обозначения группы правовых систем имеющих сходные юридические признаки позволяющие говорить об относительном единстве этих систем. Понятие правовая семья отражает те особенности некоторых правовых систем которые являются результатом...
82515. Критерии классификации правовых систем (семей) 25.42 KB
  Например в раннегосударственную эпоху критерий был более чем простым правовые системы делились на свои правильные и чужие неправильные. Так по этому критерию можно разграничить христианские мусульманские и языческие правовые системы. компаративистский Компаративистский подход основан на том что правовые системы отдельных государств можно объединить в правовые семьи на основе сходства по следующим критериям: 1. Сходство структуры системы права и системы законодательства системы применения права.