
- •1 Розробка плану проекту
- •1.1 Аналіз та постановка задачі
- •1.2 Обґрунтування вибору моделі життєвого циклу для реалізації проекту
- •1.2.1 Каскадна модель.
- •1.2.2 Ітераційна модель.
- •1.2.3 Спіральна модель.
- •1.3 Обґрунтування вибору мови програмування та case-засобів
- •1.4 Розробка графіка виконання робіт по проекту у контексті обраної моделі життєвого циклу
- •1.5 Аналіз ризиків проекту та управління ними
- •1.6 Системна специфікація вимог до розроблюваного проекту
- •1.6.1 Розробка користувальницьких (функційних) вимог
- •1.6.2 Нефункційні вимоги до програмного забезпечення
- •2 Вибір та аналіз існуючих алгоритмів побудови шляху на карті
- •2.1 Точні алгоритми
- •2.1.1 Пошук в ширину на незваженому графі.
- •2.1.2 Алгоритм Флойда-Уоршелла
- •2.1.3 Алгоритм Дейкстри
- •2.2 Евристичні алгоритми
- •2.2.1 Алгоритм a*
- •2.2.2 Алгоритм d* Lite
- •3 Розробка архітектури програмного забезпечення
- •3.1.1 Діаграма варіантів використання
- •3.1.2 Діаграма класів
- •3.1.3 Діаграма станів
- •3.1.4 Діаграма діяльності
- •3.2 Блок-схеми алгоритмічної частини програмного забезпечення
- •4 Кодування і тестування пз
- •4.1 Особливості реалізації програмного забезпечення
- •4.2 Допоміжні засоби для реалізації програмного забезпечення
- •4.3 Тестування пз
- •4.4 Представлення результатів тестування пз (у хронологічному порядку, які помилки були виявлені і виправлені)
- •4.5 Представлення результатів, що демонструють функціональність розробленого пз
- •4.6 Основні функції розробленого програмного забезпечення
- •5 Надійність програмного забезпечення
- •5.1 Поняття надійності програмного забезпечення
- •5.2 Класифікація моделей надійності програмного забезпечення
- •5.3 Розрахункова частина
- •6 Економічний розділ
- •6.1 Обґрунтування доцільності створення локальної мережі
- •6.2 Кошторис на розробку програмного продукту
- •6.2.1 Основна заробітна плата розробників (дослідників):
- •6.2.2 Амортизація обладнання, комп'ютерів та приміщень, які використовувались для розробки нового технічного рішення.
- •6.2.3 Оренда обладнання, устаткування, приміщень, які були використані в ході здійснення розробки нового технічного рішення.
- •6.2.4 Витрати на комплектуючі к, що були використані на розробку нового технічного рішення, розраховуються за формулою:
- •7.2 Забезпечення електробезпеки при експлуатації комп’ютерної техніки
- •7.3 Розрахунок загального штучного рівномірного освітлення приміщення люмінесцентними лампами методом коефіцієнта використання світлового потоку
- •Висновки
- •Перелік посилань
4.2 Допоміжні засоби для реалізації програмного забезпечення
Вся алгоритмічна частина програмного забезпечення реалізована за допомогою стандратних засобів, що надає мова програмування C++. Зокрема, для реалізації черги з пріоритетами була використана структура даних unordered_map [14] - хеш-таблиця із стандартної бібліотеки шаблонів, яка дозволяє вибирати елементи по ключу за константий час, а також структура multimap [15] (також з STL), яка дозволяє зберігати елементи з однаковими ключами та отримувати доступ за логарифмічний час.
Проте, для реалізації симулятора для візуального тестування необхідно було використати бібліотеку для роботи з формами. Для цього найкраще підійшов іструмент під назвою FLTK (fast light toolkit) [16].
FLTK являє собою кросплатформений C++ GUI інструментарій для всіх сучасних операційних систем. Дана бібліотека надає сучасну GUI функціональність без наворотів і підтримує 3D-графіку за допомогою OpenGL і вбудованої в GLUT емуляції.
За допомогою даного інструментарію було створене звичайне вікно з двома формами для завантаження карти (загальної карти, та частини карти, яку обробляє робот) та кнопкою, яка запускає симулятор.
Рисунок 4.1 - Інтерфейсне вікно візуального симулятора
4.3 Тестування пз
Для тестування програмного забеспечення на надійність необхідно було обрати аналізатор коду, який зміг би вказати на помилки, неточності та невідповідності до стилю кодування.
Є велика кількість різноманітних аналізаторів коду, але зупинимось на декількох та оберемо один із них для нашого проекту. Серед розглянутих утіліт для аналізу коду найбільш якісними є Klocwork, Valgrind та Cppcheck. Зупинимося на останній, оскільки вона є вільною (на відміну від Klocwork) та кросплатформеною (на відміну від Valgrind, який працює лише у unix-системах).
Рисунок 4.2 - Інтерфейсне вікно утіліти Cppcheck
4.4 Представлення результатів тестування пз (у хронологічному порядку, які помилки були виявлені і виправлені)
Результати стаичного аналізу кода представлені в таблиці 4.1
Таблиця 4.1. - Помилки, виявлені аналізатором кода Cppcheck
№ |
Файл |
Тип помилки |
Опис |
Код |
1 |
Simulator.cpp |
Стиль коду |
Кастування для void-вказівника у С-стилі |
Simulator* simulator = (Simulator*)(p); |
2 |
Simulator.cpp |
Стиль коду |
Невикористовувана зміна |
int k2 = (i * img_width * img_depth) + (j * img_depth); |
3 |
Planner.cpp |
Стиль коду |
Нераціональне оголошення змінної |
double tmp_g |
4 |
Planner.cpp |
Стиль коду |
Нераціональне оголошення змінної |
double tmp_rhs |
5 |
Planner.cpp |
Швидкодія |
Використання постфіксного інкременту для складного об'єкта |
pos2++; |
6 |
Widget_real.cpp |
Швидкодія |
Використання постфіксного інкременту для складного об'єкта |
i++ |
7 |
Widget_robot.cpp |
Швидкодія |
Використання постфіксного інкременту для складного об'єкта |
i++ |