Главная страница

Практика тестирования. Отчет по учебной практике уп. 01. 01 Практика тестирования профессионального модуля пм. 01


Скачать 203 Kb.
НазваниеОтчет по учебной практике уп. 01. 01 Практика тестирования профессионального модуля пм. 01
АнкорПрактика тестирования
Дата16.06.2021
Размер203 Kb.
Формат файлаdoc
Имя файлаPrimer_otcheta.doc
ТипОтчет
#218101

БЮДЖЕТНОЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ОМСКОЙ ОБЛАСТИ
«ОМСКИЙ АВИАЦИОННЫЙ КОЛЛЕДЖ ИМЕНИ Н.Е. ЖУКОВСКОГО»



09.02.03 БП

ОТЧЕТ ПО УЧЕБНОЙ ПРАКТИКЕ

УП.01.01 Практика тестирования

профессионального модуля ПМ.01

Разработка программных модулей программного обеспечения

для компьютерных систем

Практикант




Иванов С.П.

Руководитель практики




Бабикова Т.М.











2017

Оглавление


2017 1

Введение 3

1. Описание стратегий тестирования 4

2.Проектирование тестов 8

3.Анализ полученных результатов 9

4.Отладка программных модулей 14

Заключение 14

В результате выполнения практики были изучены стратегии тестирования методом «белого» и «черного» ящика. В процессе практики выполнены и описаны все шаги проведенного тестирования для заданной задачи, в результате чего были освоены компетенции по тестированию и отладке программного продукта. 14

Используемые информационные источники 15

Приложения 16


Введение

Учебная практика УП 01.01 «Практика тестирования» является частью профессионального модуля ПМ01 «Разработка программных модулей» программы подготовки специалистов среднего звена по специальности 09.02.03 Программирование в компьютерных системах (базовая подготовка) в соответствии с ФГОС СПО.

Целью данной практики является применение полученных теоретических знаний модуля в реальной профессиональной деятельности.

Основными задачами практики «Практика тестирования» являются:

  • формирование психологической готовности к самостоятельной деятельности;

  • формирование основных умений проведения тестирования программного модуля по определенному сценарию;

  • формирование основных умений использования инструментальных средств на этапе отладки программного продукта.

Для формирования общих и профессиональных компетенций, а также приобретения необходимых умений и опыта практической работы по специальности, предусмотрены следующие виды работ, обязательные для выполнения:

  1. выбор стратегий тестирования;

  2. анализ управляющей и информационной структуры приложения, информационной области определения программной системы для реализации различных стратегий тестирования;

  3. разработка тестовых наборов и тестовых сценариев для отдельных компонент программного модуля и модуля в целом;

  4. проведение тестирования программного модуля по определенному сценарию с целью обнаружения ошибок;

  5. отладка программного модуля с использованием возможностей среды разработки с целью исправления ошибок;

  6. оформление отчета о практике.

1. Описание стратегий тестирования

При выполнении тестирования использовались следующие стратегии:

  1. Структурное тестирование кода по методу «белого ящика», включающее:

    • тестирование базового множества путей (маршрутов) в программе;

    • тестирование логических условий;

    • тестирование циклов программы;

    • тестирование потоков данных (DU-тестирование);

  2. Функциональное тестирование кода по методу «черного ящика»:

    • способ разбиения по классам эквивалентности и анализа граничных значений.



Тестирование базового пути

Основано на проверке тестовых вариантов для всего множества базовых путей (маршрутов) в программе. Оно гарантирует однократное выполнение каждого оператора программы при тестировании. Тестирование проводилось для процедуры Raschet().
Шаг 1. Построение потокого графа

  • На основе спецификации процедуры (Рис. 1 Блок-схема процедуры раздела Приложения) выделим и пронумеруем все операторы и условия в программе. Закрывающиеся скобки условных операторов и цикла тоже нумеруем.

  • Отображаем пронумерованные действия и условия алгоритма в узлы и вершины потокового графа (Рис. 2 Потоковый граф процедуры Raschet() раздела Приложения)


Шаг 2. Определение цикломатической сложности потокого графа

Существуют несколько альтернативных способов:

  • V(G)= 3 региона - по количеству регионов: замкнутых областей, образованных дугами и узлами потокового графа, окружающая грф среда тоже рассматривается как регион;

  • V(G)=9 дуг – 8 узлов + 2= 3;

  • V(G)=2 предикатных узла +1 = 3; (предикатные узлы – узлы, из которых выходят две дуги)

Таким образом, цикломатическая сложность потокого графа процедуры Raschet() равна 3.
Шаг 3. Определение базового множества независимых линейных путей.

  • Путь 1: 1-2-3-7; // период расчета меньше 6 месяцев

  • Путь 2: 1-2-3-4-5-6-5-7; //режим нормальной обработки

  • Путь 3: 1-2-3-4-5-7; // попытка обработки количества месяцев, больше заданного периода


Шаг 4. Разработка тестовых вариантов, инициирующих выполнение каждого пути.

Каждый тестовый вариант формируется в виде:

Исходные данные (ИД):

Ожидаемые результаты (ОЖ.РЕЗ.):

Определим тестовые варианты, удовлетворяющие выявленному множеству независимых путей.

  • Тестовый вариант для пути 1 ТВ1:

ИД: value (сумма) = допустимое значение, rate (процентная ставка) = допустимое значение, Period (срок вклада) = 5 месяцам

ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода меньше 6 месяцев" и выход из процедуры

  • Тестовый вариант для пути 2 ТВ2:

ИД: value (сумма) = допустимое значение, rate (процентная ставка) = допустимое значение, Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: корректное вычисление помесячных платежей и остатка долга для заданного периода.

  • Тестовый вариант для пути 3 ТВ3:

ИД: попытка обработки количества месяцев, больше заданного периода (i > period),

ОЖ.РЕЗ.: корректное вычисление помесячных платежей и остатка долга для заданного периода.

Путь 3 не может тестироваться самостоятельно, а только как часть пути 2.

Тестирование логических условий

Основано на разработке тестовых вариантов для проверки логических условий программы. Цель тестирования – обнаружение ошибок в условиях и в программе. Тестирование проводилось для процедуры Raschet().
Шаг 1. Тестирование ветвей и операций отношения.

  • На основе кода процедуры выделим простые и составные условия.

В нашей процедуре это простое условие period >= 6. Оно является выражением отношения.

  • Определяем тестовые варианты:

  • ТВ3. Период равен 6: ИД: period = 6 ОЖ.РЕЗ.: корректно производится расчет

  • ТВ4. Период больше 6: ИД: period = 10 ОЖ.РЕЗ.: корректно производится расчет

  • ТВ5. Период меньше 6: ИД: period = 5 ОЖ.РЕЗ.: вывод сообщения об ошибке и выход из процедуры

  • Анализ проведенного тестирования кода по трем тестовым вариантам. Отладка и выявление ошибок. Изменение кода.

ТВ5 это уже выполненный нами тест ТВ1, ошибка в первом пути уже выявлена и исправлена раннее. ТВ4 это тоже выполненный нами тест ТВ2, ошибок не выявлено. ТВ3 – новый тест, ошибок не выявлено.

Тестирование циклов

Основано на разработке тестовых вариантов для проверки циклов программы. Цель тестирования – обнаружение ошибок в конструкциях цикла программы. Тестирование проводилось для процедуры Raschet().
Шаг 1. Тестирование циклов.

  • На основе кода процедуры выделим простые, вложенные и объединенные циклы. В нашей процедуре это простой цикл for (int i = 0; i < period; i++) {…..}

  • Определяем тестовые варианты:

  • ТВ4 (только один проход цикла): ИД: period = 1 ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  • ТВ5 (два прохода цикла): ИД: period = 2 ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  • ТВ6 (отсутствие итераций цикла): ИД: period = 0 ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  • ТВ7 (прогон всего цикла): ИД: period = 10 (больше либо равен 6) ОЖ.РЕЗ.: корректно производится расчет. Этот тест уже пройден – это ТВ2.

Тестирование потоков данных (DU-тестирование)

Основано на разработке тестовых вариантов для проверки всех информационных связей в программе. Используем способ DU-тестирования. Разработка тестов здесь проводится на основе анализа жизни всех данных программы. Тестирование проводилось для процедуры Raschet().

Шаг 1. Построение управляющего графа.

  • Потоковый граф построен при выполнении тестирования базового пути

Дополним его изменениями. (Рис. 3 Измененный потоковый граф раздела Приложения )

Шаг 2. Построение информационного графа.

  • На диаграмме потокового графа добавим пунктирными стрелками информационные связи. Стрелка выходит из вершины, где переменная определяется и входит в вершину, где она используется. ( Рис. 4 Диграмма информационного графа раздела Приложения)


Шаг 3. Формирование набора DU-цепочек.

  • [Month,2,6]

[Debt,2,6]

[Suminterest,2,6]

[Period,1,3], [Period,1,6]

[value,1,2], [value,1,6]

[rate,1,6]

[I,4,5] [I,6,5]
Шаг 4. Формирование набора отрезков путей на управляющем графе.

  • 2-3-4-5-6

1-2-3

1-2-3-4-5-6

1-2

1-2-3-4-5-6

4-5

6-5
Шаг 5. Построение маршрутов на управляющем графе.

  • Для нашей процедуры все отрезки путей можно покрыть с помощью одного маршрута: 1-2-3-4-5-6-5


Шаг 6. Разработка тестового варианта, соответствующего маршруту.

Каждый тестовый вариант формируется в виде:

Исходные данные (ИД):

Ожидаемые результаты (ОЖ.РЕЗ.):


  • Тестовый вариант ТВ7:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = допустимое значение (больше или равное 6 месяцам)

ОЖ.РЕЗ.: корректно производится расчет.

Это уже пройденный тест ТВ2.
Функциональное тестирование кода по методу «черного ящика»

Тестирование «черного ящика» (функциональное тестирование) позволяет получить комбинации входных данных, обеспечивающих полную проверку всех функциональных требований к программе. Тестирование «черного ящика» обеспечивает поиск следующих категорий ошибок:

  1. некорректные или отсутствующие функции;

  2. ошибки интерфейса;

  3. ошибки во внешних структурах данных или в доступе к внешней базе данных;

  4. ошибки характеристик (необходимая емкость памяти и т. д.);

  5. ошибки инициализации и завершения.

Подобные категории ошибок способами «белого ящика» не выявляются.

Способ разбиения по классам эквивалентности и анализа граничных значений

Способ разбиения по эквивалентности основан на разделении входной области данных на классы эквивалентности (наборы данных с общими свойствами) и разработке для каждого класса одного тестового варианта.

Анализ граничных значений заключается в получении тестовых вариантов, которые анализируют граничные значения. Данный способ тестирования дополняет способ разбиения по эквивалентности. Тестовые варианты создаются для проверки только ребер классов эквивалентности.

Тестирование проводилось на основе всей программы (процедура button1_Click()) (листинг 3).
Шаг 1. Выделение предусловий, постусловий, специальных требований.

  • Анализ проводится на основе требований пользователя, предъявляемых к функциям приложения и спецификации программы. (листинг 1 и листинг 2)

Предусловия:

  • Сумма – вещественное число, с двумя знаками после запятой, большее или равное нулю

  • Срок – целое число, большее или равное нулю

  • Процентная ставка – вещественное число, с двумя знаками после запятой, большее или равное нулю

Постусловия:

  • Расчет проведен

  • Если есть проблемы, то они устраняются (вывод сообщения о невозможности расчета)

Специальные требования:

  • Источник проблем -сумма

  • Источник проблем –срок

  • Источник проблем – процентная ставка

Уровень граничных ребер выделяет шесть вариантов:

  • Нет денег

  • Не определен срок

  • Не задана процентная ставка

  • Сумма введена не корректно

  • Срок введен не корректно

  • Процентная ставка введена не корректно


Шаг 3. Построение дерева разбиений.

  • Структура дерева разбиений указана на рис. 5 раздела Приложения. Дерево имеет 7 листьев, каждый из которых соответствует отдельному тестовому варианту.


Шаг 4. Разработка тестовых вариантов.

Каждый тестовый вариант формируется в виде:

Исходные данные (ИД):

Ожидаемые результаты (ОЖ.РЕЗ.):
Определим тестовые варианты, основанные на проведенных разбиениях.

  • Тестовый вариант 1 (нет проблем, проведение расчета) ТВ1:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: корректное проведение расчета, выдача результатов

Это уже пройденный тест ТВ2.


  • Тестовый вариант 2 (проблема - сумма, не корректно введена) ТВ2:

ИД: value (сумма) = - 34.456, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена сумма».


  • Тестовый вариант 3 (проблема - срок, не корректно введен) ТВ3:

ИД: value (сумма), rate (процентная ставка) = допустимые значения,

Period (срок вклада) = 45.6

ОЖ.РЕЗ.: Вывод сообщения «не корректно введен срок».


  • Тестовый вариант 4 (проблема – процентная ставка, не корректно введена) ТВ4:

ИД: value (сумма), Period (срок вклада) = 10 месяцам,

rate (процентная ставка) = -12.876п

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена процентная ставка».


  • Тестовый вариант 5 (нарушены предусловия, нет денег) ТВ5:

ИД: value (сумма) не задана, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не задана сумма»


  • Тестовый вариант 6 (нарушены предусловия, не задан срок) ТВ6:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) не задан

ОЖ.РЕЗ.: Вывод сообщения «не задан срок».


  • Тестовый вариант 7 (нарушены предусловия, не задана процентная ставка) ТВ7:

ИД: value (сумма), Period (срок вклада) = допустимое значение, rate (процентная ставка) не задана

ОЖ.РЕЗ.: Вывод сообщения «не задана процентная ставка».


  1. Проектирование тестов

Тестовый план, описывающий все тестовые наборы данных по всем стратегиям тестирования следующий:

  1. Тестовый вариант ТВ1 (недопустимый период вклада):

ИД:value (сумма) = допустимое значение, rate (процентная ставка) = допустимое значение, Period (срок вклада) = 5 месяцам

ОЖ.РЕЗ.:вывод сообщения "расчет ведется для периода меньше 6 месяцев" и выход из процедуры

  1. Тестовый вариант ТВ2 (нормальный вариант работы):

ИД: value (сумма) = допустимое значение, rate (процентная ставка) = допустимое значение, Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: корректное вычисление помесячных платежей и остатка долга для заданного периода.

  1. Тестовый вариант ТВ3 (период равен минимальному значению).

ИД: period = 6 (Период равен 6 месяцам)

ОЖ.РЕЗ.: корректно производится расчет

  1. Тестовый вариант ТВ4 (период равен 1 месяцу):

ИД: period = 1

ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  1. Тестовый вариант ТВ5 (период равен 2 месяцам):

ИД: period = 2

ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  1. Тестовый вариант ТВ6 (период равен 0 месяцев):

ИД: period = 0

ОЖ.РЕЗ.: вывод сообщения "расчет ведется для периода больше 6 месяцев" и выход из процедуры.

  1. Тестовый вариант ТВ7 (проблема - сумма, не корректно введена) :

ИД: value (сумма) = - 34.456, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена сумма».

  1. Тестовый вариант ТВ8 (проблема - срок, не корректно введен) :

ИД: value (сумма), rate (процентная ставка) = допустимые значения,

Period (срок вклада) = 45.6

ОЖ.РЕЗ.: Вывод сообщения «не корректно введен срок».

  1. Тестовый вариант ТВ9 (проблема – процентная ставка, не корректно введена) :

ИД: value (сумма), Period (срок вклада) = 10 месяцам,

rate (процентная ставка) = -12.876п

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена процентная ставка».

  1. Тестовый вариант ТВ10 ( нет денег):

ИД: value (сумма) не задана, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не задана сумма»

  1. Тестовый вариант ТВ11 (не задан срок):

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) не задан

ОЖ.РЕЗ.: Вывод сообщения «не задан срок».

  1. Тестовый вариант ТВ12 (не задана процентная ставка) :

ИД: value (сумма), Period (срок вклада) = допустимое значение, rate (процентная ставка) не задана

ОЖ.РЕЗ.: Вывод сообщения «не задана процентная ставка».


  1. Анализ полученных результатов

Анализ проведенного структурного тестирования базового пути кода для процедуры Raschet() по двум тестовым вариантам показал наличие ошибок. В таблице 1 приведен код, устраняющий найденные проблемы.
Таблица 1 Анализ тестирования базового пути по всем найденным путям

Номер тестового варианта

Исходные данные теста

Ожидаемые результаты

Полученные результаты

Устранение ошибок

Тестовый вариант для пути 1 ТВ1:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 5 месяцам

ОЖ.РЕЗ.: вывод сообщения, предупреждающего об ошибке и выход из процедуры


выход из процедуры без каких-либо сообщений


Изменение кода: добавление ветви else в условный оператор:

if (period >= 6)

{…….}

else

{ MessageBox.Show("расчет ведется для периода больше 6 месяцев"); }


Тестовый вариант для пути 2 ТВ2:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам


ОЖ.РЕЗ.: корректное вычисление помесячных платежей и остатка долга для заданного периода.


корректное вычисление помесячных платежей и остатка долга для заданного периода.


отсутствие ошибок



Тестирование по способу ветвей и операций отношения для процедуры Raschet() показало отсутствие ошибок.
Таблица 2 Анализ тестирования ветвей и операций отношения

Номер тестового варианта

Исходные данные теста

Ожидаемые результаты

Полученные результаты

Устранение ошибок

Тестовый вариант ТВ3:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 6 месяцам

ОЖ.РЕЗ.: корректное вычисление помесячных платежей и остатка долга для заданного периода.


корректное вычисление помесячных платежей и остатка долга для заданного периода.


отсутствие ошибок


Анализ проведенного тестирования циклов кода по четырем тестовым вариантам для процедуры Raschet() показал отсутствие ошибок.
Таблица 3 Анализ тестирования циклов

Номер тестового варианта

Исходные данные теста

Ожидаемые результаты

Полученные результаты

Устранение ошибок

Тестовый вариант ТВ4:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 1 месяц

ОЖ.РЕЗ.: вывод сообщения, предупреждающего об ошибке и выход из процедуры


выход из процедуры с сообщением "расчет ведется для периода больше 6 месяцев"


отсутствие ошибок


Тестовый вариант ТВ5:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 2 месяца

ОЖ.РЕЗ.: вывод сообщения, предупреждающего об ошибке и выход из процедуры


выход из процедуры с сообщением "расчет ведется для периода больше 6 месяцев"


отсутствие ошибок


Тестовый вариант ТВ6:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 0 месяцев

ОЖ.РЕЗ.: вывод сообщения, предупреждающего об ошибке и выход из процедуры


выход из процедуры с сообщением "расчет ведется для периода больше 6 месяцев"


отсутствие ошибок


Тестирование потоков данных для процедуры Raschet() не выявило новых тестов.

Анализ проведенного функционального тестирования интерфейса приложения показало наличие ошибок. В таблице 4 приведен код, устраняющий найденные проблемы.
Таблица 4. Анализ тестовых вариантов функционального тестирования по способу разбиения по классам эквивалентности и анализа граничных значений

Номер тестового варианта

Исходные данные теста

Ожидаемые результаты

Полученные результаты

Устранение ошибок

Тесто

вый вариант ТВ7:


ИД: value (сумма) = -34,456

rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена сумма»


Проводится расчет для отрицательной суммы с округлением до двух знаков после запятой


Изменение кода: добавление проверки суммы на неотрицательность:

if ((value>=0) && (period>=0) && (rate>=0))

Raschet(value, period, rate); else MessageBox.Show("все три поля не должны быть отрицательными!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

ИД: value (сумма) = -34.456, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена сумма»


Ошибка и аварийное завершение программы


Изменение кода: добавление проверки на корректность ввода суммы с помощью оператора обработки исключений (см. ТВ10)



Тестовый вариант ТВ8:


ИД: value (сумма), rate (процентная ставка) = допустимые значения,

Period (срок вклада) =

-45


ОЖ.РЕЗ.: Вывод сообщения «не корректно введен срок»


Не корректное вычисление помесячных платежей и остатка долга для заданного периода


Изменение кода: добавление проверки срока на неотрицательность:

if ((value>=0) && (period>=0) && (rate>=0))

Raschet(value, period, rate); else MessageBox.Show("все три поля не должны быть отрицательными!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);


ИД: value (сумма), rate (процентная ставка) = допустимые значения,

Period (срок вклада) =

45.6

ОЖ.РЕЗ.: Вывод сообщения «не корректно введен срок»


Ошибка и аварийное завершение программы


Изменение кода: добавление проверки на корректность ввода ставки с помощью оператора обработки исключений (см. ТВ10)



Тестовый вариант ТВ9:


ИД: value (сумма), Period (срок вклада) = 10 месяцам,

rate (процентная ставка) = -12,876


ОЖ.РЕЗ.: Вывод сообщения «не корректно введена процентная ставка»


Не корректное вычисление помесячных платежей и остатка долга для заданного периода


Изменение кода: добавление проверки ставки на неотрицательность:

if ((value>=0) && (period>=0) && (rate>=0))

Raschet(value, period, rate); else MessageBox.Show("все три поля не должны быть отрицательными!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

ИД: value (сумма), Period (срок вклада) = 10 месяцам,

rate (процентная ставка) = -12.876п

ОЖ.РЕЗ.: Вывод сообщения «не корректно введена процентная ставка»


аварийное завершение программы с ошибкой

Изменение кода: добавление проверки на корректность ввода ставки с помощью оператора обработки исключений (см. ТВ10)


Тестовый вариант ТВ10:

ИД: value (сумма) не задана, rate (процентная ставка) = допустимое значение,

Period (срок вклада) = 10 месяцам


ОЖ.РЕЗ.: Вывод сообщения «не задана сумма»



аварийное завершение программы с ошибкой

.


Изменение кода: добавление оператора обработки исключений:

Try {…}

catch (FormatException ex) {

if ((textBox1.Text.Length == 0) || (textBox2.Text.Length == 0) || (textBox3.Text.Length == 0))

MessageBox.Show("все три поля должны быть заполнены!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

else MessageBox.Show("Некорректный ввод данных" + "\n в поле Сумма надо ввести целое или дробное число," + "в качестве разделителя используйте запятую." + "\n В поле срок введите целое число." + " \n В поле Ставка введите целое или дробное число", "Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);}

Тестовый вариант ТВ11:

ИД: value (сумма), rate (процентная ставка) = допустимое значение,

Period (срок вклада) не задан


ОЖ.РЕЗ.: Вывод сообщения «не задан срок»


аварийное завершение программы с ошибкой


Изменение кода: добавление оператора обработки исключений:

Try {…}

catch (FormatException ex) {

if ((textBox1.Text.Length == 0) || (textBox2.Text.Length == 0) || (textBox3.Text.Length == 0))

MessageBox.Show("все три поля должны быть заполнены!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

else MessageBox.Show("Некорректный ввод данных" + "\n в поле Сумма надо ввести целое или дробное число," + "в качестве разделителя используйте запятую." + "\n В поле срок введите целое число." + " \n В поле Ставка введите целое или дробное число", "Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);}

Тестовый вариант ТВ12:

ИД: value (сумма), Period (срок вклада) = допустимое значение, rate (процентная ставка) не задана


ОЖ.РЕЗ.: Вывод сообщения «не задана процентная ставка»


аварийное завершение программы с ошибкой


Изменение кода: добавление оператора обработки исключений:

Try {…}

catch (FormatException ex) {

if ((textBox1.Text.Length == 0) || (textBox2.Text.Length == 0) || (textBox3.Text.Length == 0))

MessageBox.Show("все три поля должны быть заполнены!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

else MessageBox.Show("Некорректный ввод данных" + "\n в поле Сумма надо ввести целое или дробное число," + "в качестве разделителя используйте запятую." + "\n В поле срок введите целое число." + " \n В поле Ставка введите целое или дробное число", "Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);}




  1. Отладка программных модулей

Отладка программных модулей и изменение кода было связано с написанием дополнительных проверок корретности ввода данных и обработки исключительных ситуаций, связанных с некорретным вводом данных или их отсутствием.

Приведенные изменения кода отражены в листингах 1-3 Приложения.
Заключение

В результате выполнения практики были изучены стратегии тестирования методом «белого» и «черного» ящика. В процессе практики выполнены и описаны все шаги проведенного тестирования для заданной задачи, в результате чего были освоены компетенции по тестированию и отладке программного продукта.

Используемые информационные источники

  1. Стандарт ISO 9001

  2. Стандарт ISO/IEC 12207

  3. Калбертсон Роберт и др. Быстрое тестирование: Пер. с англ. – М.: “Вильямс”, 2002. – 384 с.

  4. Канер Сэм и др. Тестирование программного обеспечения. Фундаментальные концепции менеджмента бизнес-приложений: Пер. с англ. – К.: “ДиаСофт”, 2001. – 544 с.

  5. Котляров В.П., Коликова Т.В., Некрасов Н.А., Епифанов Н.А. Технологии программирования. Основы современного тестирования программного обеспечения, разработанного на C#: Учеб.пособие – СПб.: Издательство СПбГПУ, 2004. – 168 c.

  6. Тампре Л. Введение в тестирование программного обеспечения: Пер. с англ. – М.: “Вильямс”, 2003. – 368 с.

Интернет-источники

  1. Премудрости программирования (С++). Теория тестирования программного обеспечения URL: http://alexproger.narod.ru/Interv/test1.html

  2. Сайт ПроТестинг URL: http://www.protesting.ru/testing/

  3. Тестирование ПО. Полезная информация для тестировщиков Тестирование ПО URL: http://www. testingworld.ru;

Приложения


Рис. 1 Блок-схема процедуры Raschet()


Рис. 2 Потоковый граф процедуры Raschet()



Рис. 3 Потоковый граф процедуры Raschet()


Рис. 4 Диграмма информационного графа процедуры Raschet()


Рис. 5 Дерево разбиений области исходных данных

Листинг 1. Код приложения

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;
namespace fincalc

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

// настройка listView1 - увеличить ширину компонента

// на ширину вертикальной полосы прокрутки

int w = 0;

for (int i=0; i < listView1.Columns.Count; i++)

w += listView1.Columns[i].Width;

if (listView1.BorderStyle == BorderStyle.Fixed3D)

w +=4;

listView1.Width = w + 17;
listView1.FullRowSelect = true;

}

void Raschet(float value, int period, float rate)

{ int month; // месяц платежа

float debt; // долг, на начало текущего месяца

float interest; // плата за кредит (проценты на долг)

float paying; // сумма платежа

float suminterest; // общая плата за кредит

month = 1;

debt = value; // долг на начало первого месяца

suminterest = 0;

if (period >= 6)

// расчет для каждого месяца

{ for (int i = 0; i < period; i++)

{ interest = debt * (rate / 12 / 100);

suminterest += interest;

paying = value / period + interest;
// добавить в listView1 элемент -

// строку (данные в первый столбец)

listView1.Items.Add(month.ToString());
// добавить в добавленную строку подэлементы -

// данные во второй, третий и четвертый столбцы

listView1.Items[i].SubItems.Add(debt.ToString("c"));

listView1.Items[i].SubItems.Add(interest.ToString("c"));

listView1.Items[i].SubItems.Add(paying.ToString("c"));
month++;

debt = debt - value / period;

}

}

}

private void button1_Click(object sender, EventArgs e)

{

float value; // сумма кредита

int period; // срок

float rate; // процентная ставка

listView1.Items.Clear();

// сумма

value = System.Convert.ToSingle(textBox1.Text);

// срок

period = System.Convert.ToInt32(textBox2.Text);

// процентная ставка

rate = System.Convert.ToSingle(textBox3.Text);

Raschet(value, period, rate);

}

}

}

Листинг 2. Измененный код процедуры Raschet()

void Raschet(float value, int period, float rate)

{

int month; // месяц платежа

float debt; // долг, на начало текущего месяца

float interest; // плата за кредит (проценты на долг)

float paying; // сумма платежа

float suminterest; // общая плата за кредит

month = 1;

debt = value; // долг на начало первого месяца

suminterest = 0;

if (period >= 6)

// расчет для каждого месяца

{

for (int i = 0; i < period; i++)

{

interest = debt * (rate / 12 / 100);

suminterest += interest;

paying = value / period + interest;
// добавить в listView1 элемент -

// строку (данные в первый столбец)

listView1.Items.Add(month.ToString());
// добавить в добавленную строку подэлементы -

// данные во второй, третий и четвертый столбцы

listView1.Items[i].SubItems.Add(debt.ToString("c"));

listView1.Items[i].SubItems.Add(interest.ToString("c"));

listView1.Items[i].SubItems.Add(paying.ToString("c"));
month++;

debt = debt - value / period;

}

}

else { MessageBox.Show("расчет ведется для периода больше 6 месяцев"); }

}
Листинг 3. Измененный код процедуры button1_Click()

private void button1_Click(object sender, EventArgs e)

{

float value; // сумма кредита

int period; // срок

float rate; // процентная ставка

try

{

listView1.Items.Clear();
// сумма

value = System.Convert.ToSingle(textBox1.Text);

// срок

period = System.Convert.ToInt32(textBox2.Text);

// процентная ставка

rate = System.Convert.ToSingle(textBox3.Text);

if ((value>=0) && (period>=0) && (rate>=0))

Raschet(value, period, rate);

else MessageBox.Show("все три поля не должны быть отрицательными!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

catch (FormatException ex)

{

if ((textBox1.Text.Length == 0) || (textBox2.Text.Length == 0) || (textBox3.Text.Length == 0))

MessageBox.Show("все три поля должны быть заполнены!",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

else MessageBox.Show("Некорректный ввод данных" +

"\n в поле Сумма надо ввести целое или дробное число," +

"в качестве разделителя используйте запятую." +

"\n В поле срок введите целое число." +

" \n В поле Ставка введите целое или дробное число",

"Финансовый калькулятор", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

}





написать администратору сайта