Міністерство освіти і науки України
Національний університет “Львівська політехніка”
Інститут післядипломної освіти (ІПДО)
(Друга вища)
ЗВІТ
про виконання лабораторної роботи № 1
з дисципліни “Основи програмної інженерії” на тему
“Основні фази життєвого циклу програмного забезпечення (частина 1)”
Тема: “Основні фази життєвого циклу програмного забезпечення”
Мета. Засвоїти на практиці основні фази ЖЦ програмного забезпечення на прикладі опису створення власної програми.
ТЕОРЕТИЧНІ ВІДОМОСТІ
Які процеси ЖЦ ПЗ є функціональними?
Функціональні процеси ПЗ це такі процеси , які безпосередньо пов’язані зі створенням програмних продуктів : проектування, аналіз, реалізація, тестування, супровід.
Які правила до найменування змінних?
Включайте тип в назви змінних (Угорський запис):
Додавайте при потребі кваліфікатори (Avg, Sum, Min, Max, Index) вкінець назви.
Використовуйте пари змінних, що відповідають min/max, begin/end, and open/close.
Як індекс в циклах можна використовувати змінну “i”.
Але не варто використовувати в умовах циклу константи for(i = 1 ; i < 7 ; i++).Краще так for(i = 1; i < NUM_DAYS_IN_WEEK; i++).
Атрибути класу (змінні-члени) повинні завжди починатися з 'm_'.
Вказівники починаються з 'p' у більшості випадків.
Розміщуйте знак * ближче до назви змінної ніж до типу
Посилання завжди починаються з 'r'.
Глобальні змінні завжди починаються з 'g_'.
Статичні змінні можуть починатися з 's'.
Назви мають бути великими літерами і розділятися '_'.
Що таке шаблон у Visio?
Якщо ви хочете створити діаграму, почніть із шаблона потрібного типу діаграми (або найближчого типу, якщо відсутній точний збіг). Шаблони Visio допомагають розпочати роботу із правильними налаштуваннями.
У трафаретах міститься велика кількість фігур, необхідних для створення певного документа
Наприклад, у шаблоні План будинку відкриваються трафарети, що містять такі фігури, як стіни, меблі, побутова техніка, шафи тощо.
ФОРМУЛЮВАННЯ ЗАВДАННЯ
Сформувати пакет документів до розробленої раніше власної програми з курсу “Основи програмування” (варіант 1):
Технічне завдання.
Схематичне зображення структур даних,
Блок-схема алгоритму,
Текст програми з коментарями, оформлений згідно рекомендацій.
РЕЗУЛЬТАТИ ВИКОНАННЯ ЗАВДАННЯ
1. Технічне завдання
Назва: Програма для роботи з файлом даних про студентів.
Умовне позначення: StudentData
Замовник: Левус Є.В.
Розробник: Скакальська Л.В. слухач групи ПЗС № 11 Національного університету “Львівська політехніка”.
Початок розробки: 12.11.2013.
Завершення розробки: 20.11.2013.
1.1. Призначення та цілі створення ПЗ
StudentData може використовуватися у начальних закладах як засіб для полегшення роботи з базою даних про студентів. Запустивши StudentData та вказавши шлях до бази даних, програма автоматично завантажить вміст бази. Після цього можливо виконати деякі операції з базою даних. Наприклад:
Вивід списку студентів на екран.
Додавання нового студента у список.
Сортування студентів за прізвищем.
Сортування студентів за середніми балами.
Також StudentData можливо вдосконалити, або використати, як основу нового проекту.
1.2. Характеристика об’єктів, які мають опрацьовуватися з допомогою StudentData
База даних оформляється у будь-якому зручному, для користувача текстовому редакторі. Програма працює з наступними елементами бази даних:
Ім’я студента, прізвище, рік народження(дата,місяць та рік, записані через крапку) та бали за екзаменаційний контроль, які потрібно оформляти за допомогою пробілів.
1.3. Приклад оформлення БД:
Mazurova Tatyana 12.4.1965 5 4 3 1
Zus Roman 12.8.1963 2 1 6 0
Halch Dmytro 1.10.1967 5 3 5 3
1.4. Вимоги до ПЗ
StudentData повинна складатися з таких частин:
заголовки файлів;
опис структури CStudentInfo;
прототипи функцій;
функція main();
описи функцій.
1.5. Перелік функцій StudentData:
зчитування інформації про студентів з текстового файлу (DataRead).
додавання нового запису (InsertStudent).
сортування утвореного списку за прізвищем студента (SurnameSort),
Інструкція до програми StudentData (Додаток 1)
1.6. Мінімальне необхідне апаратне забезпечення для роботи StudentData:
Celeron-466 PPGA, 64 мб. RAM, 32 мб.відеопам’яті, клавіатура, монітор.
1.7. Програмне забезпечення, необхідне для роботи StudentDataBase: ОС сімейства Windows(2000, XP, Vista, 7, 8).
1.8. Перелік етапів створення ПЗ
Специфікація вимог
Аналіз
Проектування
Реалізація
Тестування та верифікація
Супровід
1.9. Перелік документів, які підлягають розробці
Технічне завдання;
Блок-схема;
Програмний код main.cpp;
students.txt;
1.10. Перелік літератури та посилань
Ричард Вайнер Льюис Пинсон. С++ изнутри. Учебник: пер. с англ. / К.В. Сулема. – Киев: “НПИФ “ДиаСофт”, 1993. – 303 с.
2. Блок-схема функції main
3. Блок-схеми функцій
3.1. Блок-схема функції SwapStud(CStudentInfo *pA,CStudentInfo *pB)
3.2. Блок-схема функції SurnameSort(CStudentInfo *pSt,int nSize)
3.3. Блок-схема функції InsertStudent(CStudentInfo *pLanka)
4. Текст програми з коментарями, оформлений згідно рекомендацій
#include <iostream>
#include <conio.h>
#include <fstream>
#include <stdlib.h>
using namespace std;
const int NUM_OF_MARKS=4;//Кількість оцінок
int g_nNumOfStudents=0;//Кількість студентів
struct CStudentData
{
char m_cSurname[200];
char m_cName[200];
char m_cYear[200];
int m_nMarks[NUM_OF_MARKS];
double m_dAverage;
CStudentData *pNext;
};
void InsertStudent(CStudentData*);//Вставка нового студента
void SortSurname(CStudentData*,int);//Сортування за прізвищем
void SwapStud(CStudentData*,CStudentData*);//Поміняти місцями двох студентів
void ShowData(CStudentData*);//Виведення на екран
//---------------------------------------------------------------------------
void main()
{
setlocale(LC_ALL,"Ukrainian");
CStudentData *pStart=new CStudentData;
CStudentData *pp=new CStudentData;
CStudentData *p=new CStudentData;
p=pStart;
char cFile[200];
cin>>cFile;
ifstream file1(cFile);//Відкриття файлу
char *pw;
int i;
for (i=0;!file1.eof();i++)
{
double dSum=0;
char cStr[200];
file1.getline(cStr, sizeof(cStr)); //Зчитування першого рядка
cout<<cStr<<endl;
pw = strtok (cStr, " ");
strcpy(p->m_cSurname,pw);
pw = strtok (NULL, " ");
strcpy(p->m_cName,pw);
pw = strtok (NULL, " ");
strcpy(p->m_cYear,pw);
pw = strtok(NULL," ");
for(int j=0;j<NUM_OF_MARKS;j++)
{
p->m_nMarks[j]=atoi(pw);
dSum+=p->m_nMarks[j];
pw=strtok(NULL," ");
}
CStudentData *pp=new CStudentData;
p->m_dAverage=dSum/NUM_OF_MARKS;//Знаходження середнього балу
p->pNext=pp;
p=p->pNext;
g_nNumOfStudents++;//Збільшення кількості студентів
}
p=NULL;
p=pStart;
InsertStudent(pStart);
SortSurname(p,g_nNumOfStudents);
ShowData(pStart);
_getch();
}
//---------------------------------------------------------------------------
void InsertStudent(CStudentData* pStart)
{
CStudentData *pTemp=new CStudentData;
cin>>pTemp->m_cSurname;
cin>>pTemp->m_cName;
cin>>pTemp->m_cYear;
for (int i=0;i<NUM_OF_MARKS;i++)
{
cin>>pTemp->m_nMarks[i];
}
pTemp->pNext=pStart->pNext;
pStart->pNext=pTemp;
}
//---------------------------------------------------------------------------
void SwapStud(CStudentData *pA,CStudentData *pB)
{
CStudentData *pTmp1= new CStudentData;
CStudentData *pTmp2= new CStudentData;
strcpy(pTmp1->m_cSurname,pA->m_cSurname);
strcpy(pTmp1->m_cName,pA->m_cName);
strcpy(pTmp1->m_cYear,pA->m_cYear);
for(int j=0;j<NUM_OF_MARKS;j++)
pTmp1->m_nMarks[j]=pA->m_nMarks[j];
strcpy(pTmp2->m_cSurname,pB->m_cSurname);
strcpy(pTmp2->m_cName,pB->m_cName);
strcpy(pTmp2->m_cYear,pB->m_cYear);
for(int j=0;j<NUM_OF_MARKS;j++)
pTmp2->m_nMarks[j]=pB->m_nMarks[j];
strcpy(pA->m_cSurname,pTmp2->m_cSurname);
strcpy(pA->m_cName,pTmp2->m_cName);
strcpy(pA->m_cYear,pTmp2->m_cYear);
for(int j=0;j<NUM_OF_MARKS;j++)
pA->m_nMarks[j]=pTmp2->m_nMarks[j];
strcpy(pB->m_cSurname,pTmp1->m_cSurname);
strcpy(pB->m_cName,pTmp1->m_cName);
strcpy(pB->m_cYear,pTmp1->m_cYear);
for(int j=0;j<NUM_OF_MARKS;j++)
pB->m_nMarks[j]=pTmp1->m_nMarks[j];
}
//---------------------------------------------------------------------------
void SortSurname(CStudentData *pSt,int nSize)
{
CStudentData *pTemp;
int i=0;
for(int j=0;j<nSize;j++)
{
pTemp=pSt;
for(int i=0;i<nSize-1;i++)
{
if(tolower(pTemp->m_cSurname[0])>tolower(pTemp->pNext->m_cSurname[0]))
{
SwapStud(pTemp,pTemp->pNext);
}
pTemp=pTemp->pNext;
}
}
}
//---------------------------------------------------------------------------
void DeleteStudent(CStudentData *pLanka)
{
CStudentData *pTemp=new CStudentData;
pTemp=pLanka->pNext;
*pLanka=*pTemp;
delete pTemp;
g_nNumOfStudents;
}
//---------------------------------------------------------------------------
void ShowData(CStudentData *p)
{
for (int j=0;j<g_nNumOfStudents;j++)
{
cout<<p->m_cSurname<<endl;
cout<<p->m_cName<<endl;
cout<<p->m_cYear<<endl;
for (int j=0;j<NUM_OF_MARKS;j++)
cout<<p->m_nMarks[j]<<" ";
cout<<endl;
cout<<endl;
p=p->pNext;
}
}
//---------------------------------------------------------------------------
5. Проведення тестування створеної програми, з використанням тестів:
димовий тест,
тест нормальних умов,
тест екстремальних умов,
тест виняткових умов,
тест логічної схеми програми,
Таблиця 1
Результати тестування завдання
Назва тесту
Мета тесту
Набір вхідних даних
Отримані результати
Спосіб перевірки правильності отриманих результатів
Висновок про отриманий результат
Димовий тест
Превірити коректність запуску програми
Програма та текстовий документ
Правильність роботи
Запустив програму на іншому ПК
Програма пройшла димовий тест
Тест нормальних умов
Перевірити програму на коректність
Програма та текстовий документ, у якому знаходяться дані про студентів (прізвище, ім’я, день, місяць, рік народження, та п’ять екзаменаційних балів)
Програма не коректно сортує студентів за прізвищем
Ввести у текстовий файл студентів, у яких прізвище починається на однакову букву.
При сортуванні програма порівнює тільки перші букви прізвищ.
Програма не коректно розпізнає символи введені українською мовою
Під час додаваня нового студента у список, ввести ім’я та прізвище українською мовою.
Розробник не записав властивості консолі які відповідають за розпізнавання мови (SetConsoleCP(1251); SetConsole OutputCP(1251);)
Тест екстремальних умов
Перевірити програму на правильність виконання, під час граничних умов
Програма та текстовий документ, у якому знаходяться дані про п’ятьох студентів (прізвище, ім’я, рік народження, та п’ять екзаменаційних балів)
Правильність роботи
Під час задання інформації щодо студента, вказати максимальну кількість елементів для відповідних стрічкових типів.
Програма коректно реагує на задання максимальної границі стрічки типу char(127)
Правильність роботи
Під час задання інформації щодо студента, вказати максимальне число відповідних числових типів.
Програма коректно реагує на задання максимальної границі числа типу int(2,147,483,647).
Програма та текстовий документ, у якому знаходяться дані про 90 студентів (прізвище, ім’я, рік народження, та п’ять екзаменаційних балів)
Правильність роботи
Ввести у текстовий файл 90 студентів
Програма може працювати з достатньо великою кількість студентів
Тест виняткових умов
Перевірити програму на ввід інших типів даних
Програма та текстовий
документ
Зациклення програми
На запит ввести рік народження, або оцінку за екзаменаційний контроль, ввести символ(и)
При вводі замість року літер програма працює справно,але при вводі буквенних символів на місце оцінок виводить число
-842150451
Програма та текстовий документ
Програма опрацьовує послідовність будь-яких символів, як прізвище(або ім’я).
На запит імені або прізвища ввести пробіли, нулі, цифри та інші не стандартні символи
Програма сприймає як ім’я або прізвище будь-які символи( в тому числі цифри, та нестандартні сиволи)
Перевірити на здатність роботи програми, з неправильно заповненим текстовим файлом
Програма та текстовий документ
Програма видає помилку:
"Expression nptr!=NULL
У текстовому файлі додати пустий рядок або стерти пробіли між ім’ям та прізвищем
Текстовий файл обов’язково повинен бути правильно заповнений. Невірно заповнений файл призводить до помилки виконання програми
Перевірити здатність розпізнавати подвійні імена (прізвища)
Програма та текстовий документ
Програма видає помилку: "Необработанное исключение в "0x76f315de" в "Lab13.exe": 0xC0000005: Нарушение прав доступа при чтении "0x00000000"."
У текстовому файлі ввести подвійне ім’я ( або прізвище)
При введені подвійного імені через пробіл стається помилка
Перевірити роботу програми з неповноцінним текстовим файлом
Програма та неповноцінний текстовий документ
Програма видає помилку:
“Debug Assertion Failed! Expression nptr!=NULL”
У тестовому файлі ввести не всі дані (наприклад не ввести оцінок)
Розробник не врахував можливості введення неповноцінних даних
6. Логічна схема програми
Висновки. Я засвоїла на практиці основні фази ЖЦ програмного забезпечення на прикладі опису створення власної програми.
Додаток 1
Інструкція до програми StudentData
Зміст
1.Вступ
2.Системні вимоги
3.Робота з програмою
Типи даних, що вводяться
Відкриття файлу
Додавання нового студента
Сортування списку
Збереження списку
Закриття програми
4.Помилки
1. Вступ
Програма StudentData написана мовою С++ в середовищі розробки RAD Studio і призначена для роботи з базою даних студентів. Для роботи програми необхідний файл StudentData.exe, а також база даних(текстовий файл).
Рис.1 Вікно програми
2. Системні вимоги:
Для коректної роботи програми необхідний процесор з частотою <200МГц, та оперативною пам’яттю, <64Мб. Клавіатура, мишка. Програма працює на операційних системах сімейства Windows.
3. Робота з програмою:
Типи даних, що вводяться
Текстовий файл має містити прізвище, ім’я, по батькові, а також 4 бали за екзамени.
Дані повинні розділятися пробілами або знаками табуляції.
Рис. 2 Приклад бази даних
Відкриття файлу
Для того, щоб відкрити файл, потрібно натиснути File->Open і вибрати файл на комп’ютері.
Рис. 3 Меню “Файл” з кнопками відкриття та збереження списку і
кнопкою закриття програми.
Додавання нового студента
Для того, щоб додати нового студента, необхідно ввести всі дані у поля і натиснути кнопку «Додати студента».
Сортування списку
Щоб відсортувати список, достатньо натиснути кнопку «Сортувати за прізвищем».
Рис.4 Відсортований список
Збереження списку
Для того, щоб зберегти список студентів, потрібно натиснути File->Save і вибрати папку, куди зберегти файл.
Закриття програми
Щоб закрити програму потрібно натиснути File->Close.
4. Помилки
При тестуванні всі явні помилки були виправлені, але якщо Ви помітили помилку, зверніться до автора з детальним описом помилки.