- •1. Общие методические указания
- •1.1. Цель и тематика курсовой работы
- •1.2. Системный анализ
- •1.3. Проектирование
- •1.3.1. Порядок применения объектно-ориентированного подхода
- •1.3.2. Система графических обозначений
- •1.4. Программирование
- •1.5. Тестирование
- •2. Пример разработки программной системы
- •2.1. Формулировка задачи
- •2.2. Системный анализ
- •2.3. Проектирование
- •2.3.1. Идентификация классов и объектов
- •2.3.2. Идентификация содержания классов
- •2.3.3. Идентификация связей между классами и объектами
- •2.3.4. Реализация классов и объектов
- •2.4. Программирование
- •2.5. Тестирование
- •3. Порядок выполнения работы
- •Приложение 1. Тексты программы учебного примера “Бильярд”
- •Приложение 2. Текст программы-драйвера
- •Приложение 3. Листинг тестирования
- •Список рекомендуемой литературы
Приложение 2. Текст программы-драйвера
// Проект "Бильярд". Драйвер для тестирование подпрограммы
// void TBall::HitOnBall(TBall* aBall)
#include<iostream.h>
#include<graphics.h>
#include"billiard.h"
// Подпрограмма сравнения результатов
// с ожидаемыми значениями
void OutputResults
(TBall *ActiveBall, TBall *PassiveBall,
/*активный и пассивный шары*/
float ExDirection1, float ExEnergy1,
/*Ожидаемые направление и энергия активного шара*/
float ExDirection2, float ExEnergy2)
/*Ожидаемые направление и энергия пассивного шара*/
{
cout << "Результаты теста:" << endl;
cout << " Активный шар" << endl;
cout << " атрибут theDirection: ";
if(ActiveBall->GetDirection() != ExDirection1)
cout << "ОШИБКА !";
cout << " факт " << ActiveBall->GetDirection()
<< "; ожидается " << ExDirection1 << endl;
cout << " атрибут theEnergy: ";
if(ActiveBall->GetEnergy() != ExEnergy1)
cout << "ОШИБКА !";
cout << " факт " << ActiveBall->GetEnergy()
<< "; ожидается " << ExEnergy1 << endl;
cout << " Пассивный шар" << endl;
cout << " атрибут theDirection: ";
if(PassiveBall->GetDirection() != ExDirection2)
cout << "ОШИБКА !";
cout << " факт " << PassiveBall->GetDirection()
<< "; ожидается " << ExDirection2 << endl;
cout << " атрибут theEnergy: ";
if(PassiveBall->GetEnergy() != ExEnergy2)
cout << "ОШИБКА !";
cout << " факт " << PassiveBall->GetEnergy()
<< "; ожидается " << ExEnergy2 << endl;
};
// Подпрограмма исполнения отдельного теста
void Testing
(int NTest,/*номер теста*/ float aRadius,
/*радиус шаров*/ TPoint aCenter1, float aDirection1,
float anEnergy1, /*Заданные центр, направление и энергия активного шара*/
TPoint aCenter2, float aDirection2, float anEnergy2,
/*Заданные направление и энергия пассивного шара*/
float ExDirection1, float ExEnergy1,
/*Ожидаемые направление и энергия активного шара*/
float ExDirection2, float ExEnergy2
/*Ожидаемые направление и энергия пассивного шара*/
)
{
TBall *theBall1, *theBall2;
// указатели на активный и пассивный шары
// Инициализация входных данных (объектов)
theBall1 = new TBlackBall(aCenter1, aRadius);
theBall2 = new TBlackBall(aCenter2, aRadius);
theBall1->SetDirection(aDirection1);
theBall1->SetEnergy(anEnergy1);
theBall2->SetDirection(aDirection2);
theBall2->SetEnergy(anEnergy2);
// Вывод входных данных в листинг
cout << endl << "---------Тест N " << NTest << endl;
cout << "Входные данные:" << endl;
cout << " Активный шар" << endl;
cout << " theCenter "
<< theBall1->GetCenter().X << ","
<< theBall1->GetCenter().X
<< "; theRadius " << aRadius << endl;
cout << " theDirection " << theBall1->GetDirection()
<< "; theEnergy " << theBall1->GetEnergy() << endl;
cout << " Пассивный шар" << endl;
cout << " theCenter "
<< theBall2->GetCenter().X << ","
<< theBall2->GetCenter().X
<< "; theRadius " << aRadius << endl;
cout << " theDirection " << theBall2->GetDirection()
<< "; theEnergy " << theBall2->GetEnergy() << endl;
// Выполнение тестируемой подпрограммы
theBall1->HitOnBall(theBall2);
// Анализ результатов теста
OutputResults( theBall1, theBall2, ExDirection1, ExEnergy1,
ExDirection2, ExEnergy2);
delete theBall1;
delete theBall2;
};
// Головная программа драйвера
int main()
{
// Заголовок
cout << "Тестирование подпрограммы" << endl;
cout << "void TBall::HitOnBall(TBall* aBall)"
<< endl << endl;
// Подготовка входных данных
const int cBallRadius = 5;
const float cMaxEnergy = 200;
TPoint thePoint1 = {5,10};
TPoint thePoint2 = {10,10};
TPoint thePoint3 = {100,20};
// установить графический режим для дисплея
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode,"\\bc\\bin");
// Реализация тестов
Testing(5, cBallRadius, thePoint1, Pi/4+Pi/2, 0.1*cMaxEnergy,
thePoint2, Pi/4, 0.3*cMaxEnergy,
Pi/4, 0.2*cMaxEnergy, Pi/4+Pi/2, 0.2*cMaxEnergy);
Testing(6, cBallRadius, thePoint1, Pi/4, 0.7*cMaxEnergy,
thePoint2, Pi/4+Pi/2, 0.3*cMaxEnergy,
Pi/4, 0.5*cMaxEnergy, Pi/4+Pi/2, 0.5*cMaxEnergy);
Testing(7, cBallRadius, thePoint1, Pi/4+Pi/2, cMaxEnergy/2,
thePoint3, Pi/4, cMaxEnergy/3,
Pi/4+Pi/2, cMaxEnergy/2, Pi/4, cMaxEnergy/3);
closegraph(); // отменить графический режим для дисплея
// Сравнение полученных данных с ожидаемым результатом
return 0;
}