|
@@ -0,0 +1,181 @@
|
|
|
+Разработка тестовых сценариев программного средства, заполнение шаблона тестирования
|
|
|
+
|
|
|
+ Цель: научиться разрабатывать тестовые сценарии программного средства, заполнять шаблоны тестирования.
|
|
|
+ Задание:
|
|
|
+ Используйте прилагаемый шаблон тестирования, чтобы интерпретировать результаты работы по практической работе №2. Убедитесь, что вы заполнили все соответствующие части шаблона тестирования для каждого теста. Ваша документация должна явно показывать, какую часть приложения, вы тестируете.
|
|
|
+ Допустимо, если ваши тесты показывают проблемы. Вам не нужно, исправить любые проблемы, которые находятся с помощью тестов.
|
|
|
+ Создайте и заполните несколько шаблонов тестирования, которые проверяют любые из форм в вашем проекте.
|
|
|
+ Загрузите свои шаблоны тестирования на свой локальный репозиторий.
|
|
|
+ Код тестируемой программы:
|
|
|
+using System;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.ComponentModel;
|
|
|
+using System.Data;
|
|
|
+using System.Drawing;
|
|
|
+using System.Linq;
|
|
|
+using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
+using System.Windows.Forms;
|
|
|
+
|
|
|
+namespace WindowsFormsAppUP02._02Alekseev4
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// Класс,в котором с помощью кнопки происходит вычисление результата. Также, меняется цвет формы и подставляются значения TextBox.
|
|
|
+ /// </summary>
|
|
|
+ public partial class FormMain : Form
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// Инициализация компонентов формы
|
|
|
+ /// </summary>
|
|
|
+ public FormMain()
|
|
|
+ {
|
|
|
+ InitializeComponent();
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Метод кнопки, в котором происходит вычисление ответа в цикле с постусловием
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ private void btnResultValueClick(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ double X0 = Convert.ToDouble(tbValueX0.Text);
|
|
|
+ double Xk = Convert.ToDouble(tbValueXk.Text);
|
|
|
+ double Dx = Convert.ToDouble(tbValueDx.Text);
|
|
|
+ double a = Convert.ToDouble(tbValueA.Text);
|
|
|
+ double b = Convert.ToDouble(tbValueB.Text);
|
|
|
+ double c = Convert.ToDouble(tbValueC.Text);
|
|
|
+ tbResultValue.Text= "Работу выполнил Алексеев Е.Г." + Environment.NewLine;
|
|
|
+ double X = X0;
|
|
|
+ while (X <= (Xk + Dx / 2))
|
|
|
+ {
|
|
|
+ double y = ((10e-2 * b * c) / X) + Math.Cos(Math.Sqrt(Math.Pow(a,3) * X));
|
|
|
+ tbResultValue.Text += "x = " + Convert.ToString(X) + " ; y = " + Convert.ToString(y) + Environment.NewLine;
|
|
|
+ X = X + Dx;
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// Метод загрузки формы, в котором меняется цвет формы, подставляются значения в TextBox
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="sender"></param>
|
|
|
+ /// <param name="e"></param>
|
|
|
+ private void FormMainLoad(object sender, EventArgs e)
|
|
|
+ {
|
|
|
+ BackColor = Color.AntiqueWhite;
|
|
|
+ tbValueX0.Text = "-1,5";
|
|
|
+ tbValueXk.Text = "3,5";
|
|
|
+ tbValueDx.Text = "0,5";
|
|
|
+ tbValueA.Text = "-1,25";
|
|
|
+ tbValueB.Text = "-1,5";
|
|
|
+ tbValueC.Text = "0,75";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+ Код модульного теста:
|
|
|
+using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
|
+using System;
|
|
|
+using WindowsFormsAppUP02._02Alekseev2;
|
|
|
+
|
|
|
+namespace UnitTestProjectUP02._02Alekseev9
|
|
|
+{
|
|
|
+ /// <summary>
|
|
|
+ /// Тест-класс, в котором тестируется программа из Практической работы №2
|
|
|
+ /// </summary>
|
|
|
+ [TestClass]
|
|
|
+ public class UnitTestUP02_02_9
|
|
|
+ {
|
|
|
+ /// <summary>
|
|
|
+ /// Метод, содержащий модульный unit-тест
|
|
|
+ /// </summary>
|
|
|
+ [TestMethod]
|
|
|
+
|
|
|
+ ///Метод, в котором описана логика теста
|
|
|
+ public void TestMethodX14_26_Y_Minus1_22_Z_0_035_t_0_564449Returned()
|
|
|
+ {
|
|
|
+ double X = 14.26;
|
|
|
+ double Y = -1.22;
|
|
|
+ double Z = 0.035;
|
|
|
+ double expected = 0.564449;
|
|
|
+
|
|
|
+ FormMain g = new FormMain();
|
|
|
+ double actual = g.btnResultValueClickTest(X, Y, Z);
|
|
|
+ Assert.AreEqual(expected, actual);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+ Таблица 1 - "Результаты тестирования".
|
|
|
+Наименование
|
|
|
+Описание
|
|
|
+Наименование проекта
|
|
|
+WindowsFormsAppUP02.02Alekseev2
|
|
|
+Номер версии
|
|
|
+1.0
|
|
|
+Имя тестера
|
|
|
+Егор
|
|
|
+Даты тестирования
|
|
|
+11.06.2024
|
|
|
+Test Case #
|
|
|
+TC_ WindowsFormsAppUP02.02Alekseev2
|
|
|
+Приоритет тестирования
|
|
|
+Высокий
|
|
|
+Название тестирования
|
|
|
+Проверка правильности расчета ответа примера
|
|
|
+Резюме испытания
|
|
|
+Программа должна рассчитать ответ по введенным значениям переменных
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Продолжение таблицы 1.
|
|
|
+Шаги тестирования
|
|
|
+ Запустить программу;
|
|
|
+ Ввести значения для переменных;
|
|
|
+ Программа выведет ответ;
|
|
|
+Данные тестирования
|
|
|
+Будут использованы переменные: X, Y, Z. Для переменной X - 14.26, для переменной Y - -1.22, для переменной Z - 0.035.
|
|
|
+Ожидаемый результат
|
|
|
+После расчета программа поместит ответ в переменную t. В переменную t должно записаться число 0.564449.
|
|
|
+Фактический результат
|
|
|
+Система работает стабильно. После проведения теста можно провести еще один и убедиться в правильности работы программы
|
|
|
+Предпосылки
|
|
|
+Проверить, правильные ли значения введены в модуле теста в ожидаемом результате и в переменных.
|
|
|
+Постусловия
|
|
|
+Система должна функционировать нормально. Можно провести тест еще раз
|
|
|
+Статус
|
|
|
+Pass
|
|
|
+
|
|
|
+ Контрольные вопросы.
|
|
|
+ 1 Программа, которая проверяет работу небольшой части кода, т.е. отдельного модуля.
|
|
|
+ 2 Статическое тестирование, динамическое тестирование, ручное тестирование, автоматическое тестирование, тестирование белого ящика, тестирование черного ящика, тестирование серого ящика, интеграционное тестирование, системное тестирование, unit тестирование, альфа - тестирование.
|
|
|
+ 3 Разработка через тестирование (англ. test-driven development, TDD) -- техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки:
|
|
|
+ Сначала пишется тест, покрывающий желаемое изменение.
|
|
|
+ Затем пишется код, который позволит пройти тест.
|
|
|
+ Под конец проводится рефакторинг нового кода к соответствующим стандартам.
|
|
|
+ 4 Валидация -- проверка требований пользователей продукта, а верификация -- проверка технических характеристик.
|
|
|
+ 5 Процесс создания теста:
|
|
|
+ Первым делом нужно написать программу, для которой будет создан тест.
|
|
|
+ Далее с помощью добавления нового проекта нужно добавить сам Unit-тест.
|
|
|
+ В unit тесте прописать значения для переменных и ожидаемый результат.
|
|
|
+ Запустить тест.
|
|
|
+ 6 Unit тесты имеют много плюсов, поэтому стоит их писать для своей программы, ведь unit тесты это:
|
|
|
+ Инструмент борьбы с регрессией в коде.
|
|
|
+ Инвестиция в качественную архитектуру.
|
|
|
+ 7 1. Наименование. Название юнит-теста должно четко описывать его назначение. Мы должны понимать, что делает метод по его названию, не заглядывая в сам код. Это упрощает документирование и читабельность. Также, когда тесты падают, мы можем определить, какие сценарии выполняются некорректно.
|
|
|
+ 2 AAA паттерн.
|
|
|
+ Код юнит-теста должен быть легко читаемым и понятным. Для этого, при разработке, мы используем паттерн AAA. Паттерн AAA очень важный и распространенный паттерн среди юнит-тестов. Он обеспечивает четкое разделение между настройкой тестовых объектов, действиями и результатами. Он разделяет методы юнит-тестов на три части. Arrange, Act и Assert.
|
|
|
+ 3 Старайтесь не применять сложную логику.
|
|
|
+ Избегайте логических условий, таких как if, for, while, switch. Не следует создавать какие-либо данные в пределах метода тестирования. Ориентируйтесь только на результат.
|
|
|
+ 4 Тестируйте только один компонент.
|
|
|
+ В одном юнит-тесте должен проверяться только один модуль. Это может быть, возвращаемое значение, изменение состояния системы или обращение к стороннему объекту. К примеру, если ваш юнит-тест содержит проверки более одного объекта, это может означать, что он тестирует сразу несколько вещей.
|
|
|
+ 5 Unit-тесты должны быть быстрыми.
|
|
|
+ Очень важно, чтобы модульные тесты были быстрыми. Это ускоряет процесс разработки и дает возможность их часто запускать. Быстрое тестирование позволяет обнаруживать и исправлять ошибки на более ранних этапах.
|
|
|
+ 8 ClassInitialize и TestInitialize.
|
|
|
+ 9 TestContext используется для хранения информации о текущем юнит тесте. При тестировании веб сервисов хранит URL. При тестировании ASP.NET приложений - предоставляет доступ к ASP странице. При использовании Data Driven тесто предоставляет доступ к источнику данных.
|
|
|
+ 10 Для сравнения ожидаемого результата с полученным используется метод AreEqual класса Assert.
|
|
|
+ 11 DeploymentItem используется для определения директорий или файлов, которые нужно скопировать в директорию.
|
|
|
+ 12 Generic Test используется для приложений, которые могут запускаться из командной строки, которые возвращают значение, определяющее выполнилось приложение или нет.
|
|
|
+ 13 Data Driven Test - тест, который позволяет использовать для запуска данные. Тест запускается по одному разу на каждую запись из источника данных.
|