Технологии программирования. Учебное пособие
.pdf// arrange
const double expected = 3.1; const double delta = 0.07; //act
double actual = ClassAss.MyClass.GetSgrt(10); //assert
//проверка значений на равенство с учетом погрешности
Assert.AreEqual(expected, actual, delta, "fail mtssege!");
}
}
}
Класс «TestContext» используется для хранения информации, передаваемой для модульных тестов. Рассмотрим работу данного класса на примере.
namespace ContexUnitTest
{
[TestClass]
public classUnitTest1
{
public TestContextTestContext { get; set; } // свойство
[TestMethod]
public void TestMethod1()
{
TestContext.WriteLine("TestContext.TestRunDirectory{0}",TestContext.TestRunDir ectory);
TestContext.WriteLine("TestName{0}", TestContext.TestName); TestContext.WriteLine("CurrentTestOutcomey{0}", TestContext.CurrentTestOutcome);// результатработытеста
}
[TestCleanup] public void TestCleanup()
{
TestContext.WriteLine("TestName (Cleanup) {0}", TestContext.TestName);
51
TestContext.WriteLine("CurrentTestOutcomey (Cleanup) {0}", TestContext.CurrentTestOutcome);
}
}
}
Результат работы теста можно увидеть на рисунке 4.9.
Рисунок 4.9. Результат использования класса «TestContext»
Дополнительные атрибуты теста:
[ClassInitialize()] используется для выполнения кода до выполнения первого теста в классе.
[ClassCleanUp()] используется для выполнения кода после завершения выполнения всех тестов в классе.
[TestInitialize()] используется для выполнения кода до выполнения каждого теста.
[TestCleanUp()] используется для выполнения кода после завершения выполнения каждого теста.
52
Вопросы к главе:
1.Что такое тестирование ПО?
2.Что происходит на этапе исполнения тестирования?
3.Что происходит на этапе планирования тестирования?
4.Что происходит на этапе изучения и анализа предмета тестирования?
5.Какие существуют типы тестов по покрытию?
6.Какие существуют тестовые активности?
7.Какие этапы составляют процесс тестирования?
8.Что вы понимаете под разработкой через тестирование?
9.Можно ли использовать модульное тестирование для проведения тестов на производительность? Почему?
10.Какие компоненты должен содержать тестирующий метод?
11.Для чего нужен класс «TestContext»? Как его использовать при тестировании?
12.Для чего нужен класс «Assert»? Как его использовать при тестировании?
53
ЛАБОРАТОРНАЯ РАБОТА № 1. РАСЧЕТ МЕТРИК ОБЪЕКТНО-ОРИЕНТИРОВАННЫХ ПРОГРАММНЫХ СИСТЕМ
Цель работы: Оценка объектно-ориентированных программных систем путем расчета проектных метрик, ориентированных на классы.
Порядок выполнения работы:
1.Создать с помощью Visual Studio консольный проект C# (согласно своему варианту), используя объектноориентированный подход в программировании.
2.Рассчитать метрики кода средствами Visual Studio.
3.Рассчитать метрики Чидамбера и Кемерера, результаты представить в виде таблицы (форма таблицы должна соответсвовать таблице 1.2).
4.Провести анализ результатов исследуемой программы.
Варианты заданий:
Вариант 1. Разработать приложение «Личные дела студентов». Приложение предназначено для хранения личных карточек студентов (которые содержат: пол, дату рождения, место рождения, место проживания и т. п.) в деканате и отделе кадров. Сведения должны храниться в течение всего срока обучения студентов и использоваться при составлении справок и отчетов.
Вариант 2. Разработать приложение «Учет успеваемости студентов». Приложение предназначено учета успеваемости студентов в сессию деканатом. Сведения об успеваемости студентов должны храниться в течение всего срока их обучения и использоваться при составлении справок о прослушанных курсах и приложений к диплому.
Вариант 3. Разработать приложение «Решение комбинаторнооптимизационных задач». Приложение должно содержать
54
алгоритмы поиска цикла минимальной длины (задача коммивояжера), поиска кратчайшего пути и поиска минимального основного дерева.
Вариант 4. Разработать приложение «Органайзер». Приложение предназначено для записи, хранения и поиска адресов и телефонов физических лиц и организаций, а также расписания, встреч и др. Приложение предназначено для любых пользователей компьютера.
Вариант 5. Разработать приложение «Калькулятор», которое предназначено для любых пользователей и должно содержать все арифметические операции (с соблюдением приоритетов) и несколько математических функций.
Вариант 6. Разработать приложение «Кафедра», которое содержит сведения о сотрудниках кафедры: фамилия, имя, отчество, должность, ученая степень, нагрузка, общественная работа, совместительство и др.). Приложение предназначено для использования сотрудниками отдела кадров и учебного отдела.
Вариант 7. Разработать приложение «Лаборатория», содержащие сведения о сотрудниках лаборатории: фамилия, имя, отчество, пол, возраст, семейное положение, наличие детей, должность, ученая степень и т. п. Приложение предназначено для использования сотрудниками профкома и отдела кадров.
Вариант 8. Разработать приложение «Автосервис». При записи на обслуживание заполняется заявка, в которой указываются: фамилия, имя, отчество владельца, марка автомобиля, вид работы, дата приема заказа и стоимость ремонта. После выполнения работ распечатывается квитанция.
Вариант 9. Разработать приложение «Учет нарушений правил дорожного движения». Для каждой автомашины (и ее владельца) в базе хранится список нарушений. Для каждого нарушения
55
фиксируется дата, время, вид нарушения и размер штрафа. При оплате всех штрафов машина удаляется из базы.
Вариант 10. Разработать приложение «Агентство недвижимости», предназначенное для использования работниками агентства. В базе содержатся сведения о квартирах (количество комнат, этаж, метраж и др.). При поступлении заявки на обмен (куплю, продажу) производится поиск подходящего варианта. Если такого нет, клиент заносится в клиентскую базу и оповещается, когда вариант появляется.
Вариант 11. Разработать приложение «Абоненты компании сотовой связи». Картотека содержит сведения о телефонах и их владельцах. Фиксирует задолженности по оплате (абонентской и повременной). Считается, что повременная оплата местных телефонных разговоров уже введена.
Вариант 12. Разработать приложение «Книжный магазин», содержащее сведения о книгах (автор, название, издательство, год издания, цена). Покупатель оформляет заявку на нужные ему книги, если таковых нет, он заносится в базу и оповещается, когда нужные книги поступают в магазин.
Вариант 13. Разработать приложение «Авиакасса», содержащий сведения о наличии авиабилетов. В базе должны содержаться сведения о номере рейса, экипаже, типе самолета, дате и времени вылета, а также стоимости авиабилетов (разного класса). При поступлении заявки на билеты программа производит поиск подходящего рейса.
Вариант 14. Разработать приложение «Автостоянка», в котором содержится информация о марке автомобиля, его владельце, дате и времени въезда, стоимости стоянки, скидках, задолженности по оплате и др.
56
Вариант 15. Разработать приложение «Кадровое агентство», содержащие сведения о вакансиях и резюме. Приложение предназначено как для поиска сотрудников, отвечающих требованиям руководителей организаций, так и для поиска подходящей работы.
57
ЛАБОРАТОРНАЯ РАБОТА № 2. РЕФАКТОРИНГ Цель работы: Выполнить рефакторинг программного кода.
Порядок выполнения работы:
1.Реализовать диаграмму классов UML, приложения реализованного в лабораторной работе № 1.
2.Выполнить рефакторинг этого приложения, используя инструменты Visual Studio.
3.Рассчитать метрики кода средствами Visual Studio.
4.Реализовать диаграмму классов UML приложения после выполнения рефакторинга.
5.Провести анализ результатов (расчета метрик и диаграмм классов), полученных до и после выполнения рефакторинга.
58
ЛАБОРАТОРНАЯ РАБОТА № 3. ПАТТЕРНЫ ПРОЕКТИРОВАНИЯ
Цель работы: Цель работы: приобрести практический навык внедрения шаблонов объектно-ориентированного проектирования в код программных систем.
Порядок выполнения работы:
1.Реализовать диаграмму классов UML (согласно своему варианту).
2.Создать с помощью Visual Studio консольный проект C# или С++ (Console Application), на основе диаграммы классов UML.
Варианты заданий:
Вариант 1. Используя паттерн «Заместитель» (Proxy), реализовать проект, позволяющий получать информацию о размере изображения в BMP-файле со следующим предположением: Если имя файла заканчивается на _WWWxHHH, где WWW (ширина изображения) и HHH (высота изображения) – десятичные числа (необязательно состоящие из трех цифр). В этом случае для получения размера необязательно открывать файл.
vasya_124×768.bmp – размер 124×768. kate_200×30 – размер 200×30. petya_430xmax.bmp – неверный формат.
В последнем случае, поскольку формат неверный, модуль должен все же открыть BMP-файл и считать размер явным образом. Работу с самим BMP-файлом вынести в отдельный класс.
Вариант 2. Используя паттерн «Фабричный метод» (Factory Method), реализовать проект хранения информации о системе обучения. Информация храниться в следующих классах: «Student», «Teacher», «Course».
Имя класса |
Атрибуты классов |
Student |
id - уникальный численный идентификатор; |
59
|
name - имя; |
|
courses - курсы, которые посещает студент. |
Teacher |
id - уникальный численный идентификатор; |
|
experience - стаж в годах; |
|
name - имя; |
|
courses - курсы, которые ведет преподаватель. |
Course |
id - уникальный численный идентификатор; |
|
name - название курса; |
|
teacher - id учителя, который ведет курс; |
|
students - id студентов, посещающих курс. |
Обеспечить |
загрузку и сохранение этой базы данных в |
текстовый файл. Каждая строка в этом файле должна начинаться со слов student, teacher, course. Далее будут идти необходимые атрибуты.
Для сохранения и восстановления связей между различными объектами использовать поля id. Например, в строке с записью о курсе можно сохранить teacher_id и students_id, а после загрузки
всего файла создать связь с реальным объектом. |
|
||
Вариант 3. Используя |
паттерн |
«Команда» |
(Command), |
реализовать векторный графический редактор, работающий в пакетном режиме.
На вход редактору поступают два файла. Один файл содержит в себе 2D-сцену в приблизительно следующем формате:
rect[1] 10 10 20 20 rect[2] 50 50 70 70 line[1] 1 1 90 7 ellipse[1] 5 5 90 10
Первый элемент каждой строки содержит тип объекта (прямоугольник, линия, эллипс) и его идентификатор в квадратных скобках. Далее идут координаты x1, y1, x2, y2 для прямоугольника и
60
