\documentclass[12pt, a4paper] {ncc}
\usepackage[utf8] {inputenc}
\usepackage[T2A]{fontenc}
\usepackage[english, russian] {babel}
\usepackage[usenames,dvipsnames]{xcolor}
\usepackage{listings,a4wide,longtable,amsmath,amsfonts,graphicx,tikz}
\usepackage{indentfirst}
\usepackage{verbatim}

\begin{document}
\frenchspacing
\pagestyle{empty}
% ============================ ТИТУЛЬНЫЙ ЛИСТ ================================
\begin{center}
     Национальный исследовательский университет информационных технологий,
                              механики и оптики\\
                 Кафедра Информатики и Прикладной Математики\\
                     Тестирование Программного Обеспечения
\end{center}
\vspace{\stretch{2}}
\begin{center}
                         {\bf Лабораторная работа №2}\\
                   Документирование результатов тестирования.
\end{center}
\vspace{\stretch{3}}
\begin{flushright}
					  Работу выполнил студент группы P3315\\
							 {\it Халанский Дмитрий}
\end{flushright}
\vspace{\stretch{4}}
\begin{center}
                                      2016
\end{center}
\newpage
% ======================== КОНЕЦ ТИТУЛЬНОГО ЛИСТА ============================

% ================================ ОТЧЁТ =====================================

\section{Цели работы}

\begin{itemize}
        \item Составление тестовых сценариев на основе спецификации программы;
        \item Осуществление поиска ошибок в уже существующем программном
                обеспечении;
        \item Описание обнаруженных ошибок по заданному формату.
\end{itemize}

\section{Ход работы}

\subsection{Нахождение корней многочлена}

\subsubsection{Тестовые сценарии}

\begin{enumerate}
        \item Бессмысленный ввод.
                Ожидаемый результат: отказ программы принимать бессмысленные
                данные.
        \item Отмена ввода.
                Ожидаемый результат: выход из программы.
        \item Решение многочлена с двумя целочисленными корнями:
                $$(x - 1) \cdot (x - 2) = x^2 - 3 x + 2$$
                Ожидаемый результат: $1$, $2$.
        \item Решение многочлена второй степени с одним целочисленным корнем:
                $$(x - 1)^2 = x^2 - 2 x + 1$$
                Ожидаемый результат: $-1$, $-1$.
        \item Решение многочлена первой степени с одним целочисленным корнем:
                $$0x^2 + x + 1$$
                Ожидаемый результат: $-1$, $-1$ или сообщение об ошибке,
                сообщающее, что коэффициент старшего члена не может быть
                нулём.
        \item Решение многочлена с целыми коэффициентами, но дробными корнями:
                $$6 \cdot (x - \frac{2}{3}) \cdot (x - \frac{3}{2}) = 
                6 x^2 - 13 + 6$$
                Ожидаемый результат: $\frac{2}{3}$, $\frac{3}{2}$
        \item Решение многочлена с дробным коэффициентом:
                $$(x - 1.5) \cdot (x - 2.5) = x^2 - 4x + 3.75$$
                Ожидаемый результат: $1.5$, $2.5$.
        \item Решение многочлена с комплексными корнями:
                $$x^2 + 0x + 1$$
                Ожидаемый результат: $- i$, $i$ или
                сообщение о том, что комплексные корни не поддерживаются
                программой.
        \item Решение многочлена без решений:
                $$0x^2 + 0x + 1$$
                Ожидаемый результат: сообщение об ошибке.
        \item Решение многочлена с большими коэффициентами:
                $$(x - 100)(x - 1) = x^2 - 101 + 100$$
                Ожидаемый результат: $20$, $100$.
\end{enumerate}

\subsubsection{Результаты прохождения}
\begin{enumerate}
        \item Тест пройден.
        \item Тест не пройден: вместо выхода программа возвращает окно с
                результатами {\tt 0}, {\tt 0}.
        \item Тест пройден.
        \item Тест пройден.
        \item Программа выдала результат: {\tt -=<.?}, {\tt 0.0}.
                Тест не пройден.
        \item Тест пройден.
        \item Программа на стадии валидации ввода отбросила запятую. Тест
                отменён.
        \item Появилась ошибка времени выполнения: {\tt Invalid parameter in
                mathematical operation}. Тест не пройден.
        \item Программа вернула ответ: {\tt 0.0}, {\tt 0.0}. Тест не пройден.
        \item Программа вернула ответ: {\tt 0.0}, {\tt 1.0}. Тест не пройден.
\end{enumerate}

\subsubsection{Отчёт о тестировании}

\begin{itemize}
\item
\begin{description}
        \item[ID]         roots.1
        \item[Название]   Не работает кнопка <<Отмена>>
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если нажать кнопку <<Отмена>>, то, без обнаруженной
                зависимости от введённых чисел, программа, вместо того, чтобы
                выйти, возвращает результат {\tt 0.0}, {\tt 0.0}.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Нажать <<Отмена>>.
                \end{enumerate}
        \item[Критерий]   Программа должна завершить работу, не выводя окно
                результатов вычислений.
\end{description}
\item
\begin{description}
        \item[ID]         roots.2
        \item[Название]   Нулевой старший коэффициент
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Программа принимает на вход коэффициент при $x^2$,
                равный $0$, однако некорректно находит корень результирующего
                линейного уравнения вида $ax + b = 0$: отображаются значения
                {\tt -=<.?}, {\tt 0.0}. Были проверены пары $a$, $b$: $(1, 1)$,
                $(1, -1)$, $(3, 3)$, $(100, 0)$.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(0, 1, 1)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна сообщить, что значение $0$ не
                является корректным для первого поля, или вернуть ответ
                $-\frac{b}{a}$, $-\frac{b}{a}$.
\end{description}
\item
\begin{description}
        \item[ID]         roots.3
        \item[Название]   Ошибка времени исполнения при отрицательном
                детерминанте
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если корни многочлена комплексные, программа
                завершает своё выполнение с ошибкой {\tt Invalid parameter in
                mathematical operation}.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(1, 0, 1)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна вернуть значения в комплексных
                числах или сообщить, что многочлен не имеет вещественных
                корней
\end{description}
\item
\begin{description}
        \item[ID]         roots.4
        \item[Название]   Некорректная обработка сценария несуществующих
                решений
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Для многочленов $0x^2 + 0x + c, c \ne 0$ решений не
                существует, однако программа возвращает результат {\tt 0},
                {\tt 0}.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(0, 0, 1)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна сообщить, что решений у $0 \ne 0$
                не имеется
        \item[Примечания] Проблема родственна с {\tt roots.2}: запрет на
                нулевой коэффициент при старшем члене приведёт к исправлению
                обеих ошибок
\end{description}
\item
\begin{description}
        \item[ID]         roots.5
        \item[Название]   Не вычисляются корни, по модулю превышающие 100
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если результатом вычислений становится корень,
                больший по модулю, чем 100, вместо него программа возвращает
                0. Проверено на тройках $(1, 99, -100)$, $(1, -101, 100)$,
                $(1, 98, -99)$, $(1, -100, 99)$, $(1, -102, 200)$.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(1, -102, 200)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна вернуть корректный результат. В
                случае приведённого примера это числа $(2, 100)$
\end{description}
\item
\begin{description}
        \item[ID]         roots.6
        \item[Название]   Неудобный интерфейс
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если ввод отвергается, программа не сообщает об
                этом, а меняет содержимое поля, как только фокус перемещается
                на другое, на $0$. Это неудобно, поскольку для того, чтобы
                проверить, было ли отвергнуто последнее введённое число, нужно
                перевести фокус на кнопку, но не нажимать её, или на другое
                поле, после чего заполнить его заново: при переводе фокуса на
                поле его значение обнуляется. Если действовать интуитивно~---
                после ввода последнего числа нажать <<Ок>>~--- факт
                отвергнутого ввода будет пользователю неизвестен.
        \item[Среда]      Wine 1.9.2
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(1, -120, 2000)$;
                        \item Нажать <<Ок>>;
                        \item Программа вернёт результат для многочлена
                                $(1, -120, 0)$, поскольку коэффициенты от
                                $1000$ не принимаются валидатором.
                \end{enumerate}
        \item[Критерий]   Программа должна оповещать о том, что ввод был
                некорректным, а не тихо обнулять значения или, в случае с
                числами с плавающей точкой, тихо убирать запятую
\end{description}
\end{itemize}

\subsection{Нахождение площади треугольника}

\subsubsection{Тестовые сценарии}

\begin{enumerate}
        \item Бессмысленный ввод.

                Ожидаемый результат: отказ программы принимать бессмысленные
                данные.
        \item Отмена ввода.

                Ожидаемый результат: выход из программы.
        \item Нахождение площадей равносторонних треугольников.
                $$p = \dfrac{a + b + c}{2} = \dfrac{3a}{2}$$
                $$\begin{aligned}
                        S &= \sqrt{p \cdot (p - a) \cdot (p - b) \cdot
                        (p - c)} = \sqrt{p \cdot (p - a)^3} \\
                        &= \sqrt{\dfrac{3a}{2} \cdot
                        \left(\dfrac{a}{2}\right)^3} = \sqrt{3}
                        \left(\dfrac{a}{2}\right)^2
                \end{aligned}$$
                Рассматриваются равносторонние треугольники со сторонами $1$,
                $2$, $10$, $15$, $17$, $20$.

                Ожидаемый результат:
                \begin{description}
                        \item[1] $0.433$
                        \item[2] $1.723$
                        \item[10] $43.301$
                        \item[15] $97.428$
                        \item[17] $125.141$
                        \item[20] $173.205$
                \end{description}
        \item Некорректный ввод: одна из сторон больше или равна сумме других.

                Ожидаемый результат: сообщение об ошибке.
        \item Некорректный ввод: отрицательные длины сторон.

                Ожидаемый результат: сообщение об ошибке.
        \item Нахождение площадей треугольников со сторонами различной длины.

                Ожидаемый результат:
                \begin{description}
                        \item[(5, 6, 7)] $14.697$
                        \item[(3, 4, 5)] $6$
                        \item[(10, 12, 14)] $58.787$
                \end{description}
\end{enumerate}

\subsubsection{Результаты прохождения}

\begin{enumerate}
        \item Тест пройден
        \item Программа выдала экран с результатом $0.0$
        \item \begin{description}
                        \item[1] $0$ вместо $0.433$
                        \item[2] Корректно $1.723$
                        \item[10] Корректно $43.301$
                        \item[15] $86.5$ вместо $97.428$
                        \item[17] $13.1$ вместо $125.141$
                        \item[20] $73.2$ вместо $173.205$
        \end{description}
\item Программа возвращает результат $0$ вместо ошибки.
\item Программа вощвращает площадь треугольника с абсолютным значением сторон.
\item Тест пройден на всех входных данных.
\end{enumerate}

\subsubsection{Отчёт о тестировании}

\begin{itemize}
        \item
\begin{description}
        \item[ID]         roots.1
        \item[Название]   Не работает кнопка <<Отмена>>
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если нажать кнопку <<Отмена>>, то, без обнаруженной
                зависимости от введённых чисел, программа, вместо того, чтобы
                выйти, возвращает результат {\tt 0.0}.
        \item[Среда]      Wine 1.9.7
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Нажать <<Отмена>>.
                \end{enumerate}
        \item[Критерий]   Программа должна завершить работу, не выводя окно
                результатов вычислений.
\end{description}
        \item
\begin{description}
        \item[ID]         heron.2
        \item[Название]   Доступны только последние два разряда числа
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если площадь треугольника больше $100$, программа
                возвращает результат по модулю $100$. К примеру, если площадь
                равна $130$, программа возвращает $30$.
        \item[Среда]      Wine 1.9.7
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(20, 20, 20)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна возвращать полный результат.
\end{description}
\item
\begin{description}
        \item[ID]         heron.3
        \item[Название]   Некорректная площадь треугольника с нечётным
                значением периметра
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Программа возвращает результат с полусуммой,
                вычисляемой по формуле
                $$p = \left\lfloor \dfrac{a + b + c}{2} \right\rfloor$$
                Таким образом, если $a + b + c \not\equiv 0 \mod 2$, то
                результирующая площадь меньше фактической.
        \item[Среда]      Wine 1.9.7
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(5, 5, 5)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа должна возвращать корректный результат.
\end{description}
\item
\begin{description}
        \item[ID]         heron.4
        \item[Название]   Программа принимает некорректные значения сторон
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Три отрезка не образуют треугольник, если какая-то
                из сторон длиннее суммы двух других. Программа не должна
                принимать такие значения; вместо этого она возвращает
                результат $0$.
        \item[Среда]      Wine 1.9.7
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(1, 1, 5)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа не должна принимать некорректные
                треугольники.
\end{description}
\item
\begin{description}
        \item[ID]         heron.5
        \item[Название]   Отрицательные длины сторон берутся по модулю
        \item[Автор]      Дмитрий Халанский
        \item[Описание]   Если задать отрицательную длину стороны треугольника,
                программа выполнится, как если бы длина была положительной.
        \item[Среда]      Wine 1.9.7
        \item[Инструкции]
                \begin{enumerate}
                        \item Запустить программу;
                        \item Заполнить поля значениями $(-3, 4, -5)$;
                        \item Нажать <<Ок>>.
                \end{enumerate}
        \item[Критерий]   Программа не должна принимать отрицательные длины
                сторон на вход.
\end{description}
\end{itemize}

\section{Вывод}

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

% ============================ КОНЕЦ ОТЧЁТА ==================================

\end{document}
