diff --git a/lab2/img/programm2/block-schema.png b/lab2/img/programm2/block-schema.png new file mode 100644 index 0000000..c9a3364 Binary files /dev/null and b/lab2/img/programm2/block-schema.png differ diff --git a/lab2/img/programm2/bounds.png b/lab2/img/programm2/bounds.png new file mode 100644 index 0000000..caaf167 Binary files /dev/null and b/lab2/img/programm2/bounds.png differ diff --git a/lab2/img/programm2/classes-test-dop.png b/lab2/img/programm2/classes-test-dop.png new file mode 100644 index 0000000..3e88ed3 Binary files /dev/null and b/lab2/img/programm2/classes-test-dop.png differ diff --git a/lab2/img/programm2/classes-test-nedop.png b/lab2/img/programm2/classes-test-nedop.png new file mode 100644 index 0000000..a7cc558 Binary files /dev/null and b/lab2/img/programm2/classes-test-nedop.png differ diff --git a/lab2/img/programm2/classes.png b/lab2/img/programm2/classes.png new file mode 100644 index 0000000..a5c4f17 Binary files /dev/null and b/lab2/img/programm2/classes.png differ diff --git a/lab2/img/programm2/comb.png b/lab2/img/programm2/comb.png new file mode 100644 index 0000000..16ff17e Binary files /dev/null and b/lab2/img/programm2/comb.png differ diff --git a/lab2/img/programm2/condition-coverage.png b/lab2/img/programm2/condition-coverage.png new file mode 100644 index 0000000..a22b817 Binary files /dev/null and b/lab2/img/programm2/condition-coverage.png differ diff --git a/lab2/img/programm2/decision-coverage.png b/lab2/img/programm2/decision-coverage.png new file mode 100644 index 0000000..e7c529b Binary files /dev/null and b/lab2/img/programm2/decision-coverage.png differ diff --git a/lab2/img/programm2/diagram.png b/lab2/img/programm2/diagram.png new file mode 100644 index 0000000..140e141 Binary files /dev/null and b/lab2/img/programm2/diagram.png differ diff --git a/lab2/img/programm2/table-decisions.png b/lab2/img/programm2/table-decisions.png new file mode 100644 index 0000000..357aa53 Binary files /dev/null and b/lab2/img/programm2/table-decisions.png differ diff --git a/lab2/img/programm2/table-operators.png b/lab2/img/programm2/table-operators.png new file mode 100644 index 0000000..f44ea18 Binary files /dev/null and b/lab2/img/programm2/table-operators.png differ diff --git a/lab2/report.tex b/lab2/report.tex index 33f078d..8b63d9a 100644 --- a/lab2/report.tex +++ b/lab2/report.tex @@ -156,7 +156,8 @@ В данной работе будут рассмотрены оба метода. Также данные приёмы будут применены для тестирования двух программ: \begin{itemize} - \item + \item вычисление факториала числа; + \item возведение числа в степень. \end{itemize} Каждая из программ будет протестирована обоими методами с целью сравнения подходов. @@ -435,7 +436,7 @@ \begin{figure}[h!] \centering \includegraphics[width=1\linewidth]{img/programm1/table-operators.png} - \caption{Набор тестов для покрытия операторов второй программы.} + \caption{Набор тестов для покрытия операторов программы.} \label{fig:programm1/table-operators} \end{figure} @@ -451,7 +452,7 @@ \begin{figure}[h!] \centering \includegraphics[width=1\linewidth]{img/programm1/table-operators.png} - \caption{Набор тестов для покрытия решений второй программы.} + \caption{Набор тестов для покрытия решений программы.} \label{fig:programm1/table-operators-1} \end{figure} @@ -468,7 +469,7 @@ \begin{figure}[h!] \centering \includegraphics[width=1\linewidth]{img/programm1/table-operators.png} - \caption{Набор тестов для покрытия решений второй программы.} + \caption{Набор тестов для покрытия решений программы.} \label{fig:programm1/table-operators-2} \end{figure} @@ -486,7 +487,7 @@ \begin{figure}[h!] \centering \includegraphics[width=1\linewidth]{img/programm1/table-operators.png} - \caption{Набор тестов для покрытия решений второй программы.} + \caption{Набор тестов для покрытия решений программы.} \label{fig:programm1/table-operators-3} \end{figure} @@ -502,7 +503,7 @@ \begin{figure}[h!] \centering \includegraphics[width=1\linewidth]{img/programm1/table-operators.png} - \caption{Набор тестов для покрытия решений второй программы.} + \caption{Набор тестов для покрытия решений программы.} \label{fig:programm1/table-operators-4} \end{figure} @@ -619,12 +620,281 @@ \subsubsection{Результаты тестирования методом <<чёрного ящика>>} В результате тестирования методом чёрного ящика было составлено 11 тестов, из которых не пройдено 2. Ошибки, из-за которых тесты не были пройдены, связаны с некорректной проверкой входных значений и неверно составленной спецификацией: программа экстренно завершается при вводе вместо числа $N$ строки, а также входит в бесконечный цикл при $N = 0$, что не соответствует поведению, описанному в спецификакции. + + + \newpage + \section{Тестирование программы №2} + \subsection{Формальное описание программы} + \textbf{Название:} «Алгоритм быстрого возведения в степень». + + \textbf{Дано:} + \begin{itemize} + \item $n$ --- целое положительное число. + \item $k$ --- целое положительное число. + \end{itemize} + + + \textbf{Требуется:} Возвести число $n$ в степень $k$ и вывести результат на экран. + + \textbf{Ограничения:} + \begin{itemize} + \item $n$ --- целое. + \item $k$ --- целое. + \item $1 \leq n \leq 15$; + \item $1 \leq k \leq 15$; + \end{itemize} + + \textbf{Спецификация} + + \begin{table}[h!] + \centering + %\caption{Спецификация} + %\label{.} + \footnotesize + \begin{tabularx}{\textwidth}{|X|X|X|} + \hline + \textbf{Входные данные} & \textbf{Выходные данные} & \textbf{Реакция программы} \\ + \hline + $n = -5, k = 10$ & ''Ошибка! Введите числа от 1 до 15.'' & Вывод на экран сообщения: ''Ошибка! Введите числа от 1 до 15.''. Ожидание корректного ввода $n$ и $k$. \\ + \hline + $n = 5, k = -10$ & ''Ошибка! Введите числа от 1 до 15.'' & Вывод на экран сообщения: ''Ошибка! Введите числа от 1 до 15.''. Ожидание корректного ввода $n$ и $k$. \\ + \hline + $n = 25, k = 10$ & ''Ошибка! Введите числа от 1 до 15.'' & Вывод на экран сообщения: ''Ошибка! Введите числа от 1 до 15.''. Ожидание корректного ввода $n$ и $k$. \\ + \hline + $n = 5.7, k = 10$ & ''Ошибка! n должно быть целым числом.'' & Вывод на экран сообщения: ''Ошибка! k должно быть целым числом.''. Ожидание корректного ввода $n$ и $k$. \\ + \hline + $n =$ ''строка'' $, k = 10$ & ''Ошибка! n должно быть целым числом.'' & Вывод на экран сообщения: ''Ошибка! k должно быть целым числом.''. Ожидание корректного ввода $n$ и $k$. \\ + \hline + $n = 2, k = 10$ & 1024 & Вывод на экран значения $2^10$. Завершение программы. \\ + \hline + \end{tabularx} + \end{table} + + \newpage + \textbf{Блок-схема} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.75\linewidth]{img/programm2/block-schema.png} + \caption{Блок схема программы №2.} + \label{fig:programm2/block-schema} + \end{figure} + + \newpage + \subsection{Тестирование методом «белого ящика»} + Алгоритм составления тестов методом «белого» ящика предполагает обход всех + возможных путей в теле программы и проверку выполнения каждого оператора не + менее одного раза. Для этого на блок-схеме программы, которая изображена на Рис.~\ref{fig:programm2/block-schema}, все возможные пути обозначены символами латинского алфавита от~A~до~I. + + Условия в ветвлениях программы: + \begin{enumerate} + \item $n$ целое число? + \item $k$ целое число? + \item $n < 1$; + \item $n > 15$; + \item $k < 1$; + \item $k > 15$; + \item $k \mod 2 = 1$; + \item $k > 0$. + \end{enumerate} + + + \subsubsection{Покрытие операторов} + Критерием покрытия является выполнение каждого оператора программы хотя + бы один раз. Это необходимое, но не достаточное условие для приемлемого тестирования по принципу белого ящика. + + Для покрытия всех операторов был составлен набор тестов из 4 тестов (Рис.~\ref{fig:programm2/table-operators}). + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/programm2/table-operators.png} + \caption{Набор тестов для покрытия операторов программы.} + \label{fig:programm2/table-operators} + \end{figure} + + Для покрытия всех операторов программы достаточно было составить тесты для четырёх путей: A, BC, BDE, BDFHI. + + \newpage + \subsubsection{Покрытие решений} + В соответствии с этим критерием необходимо составить такой набор тестов, при котором каждое условие в программе примет как истинное, так и ложное значения. Таким образом, к тестам, составленным для метода покрытия операторов, необходимо добавить тесты, которые будут проверять все возможные переходы. + + Тесты, покрывающие все решения программы представлены на Рис.~\ref{fig:programm2/decision-coverage}. + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/programm2/decision-coverage.png} + \caption{Набор тестов для покрытия решений программы.} + \label{fig:programm2/decision-coverage} + \end{figure} + + \subsubsection{Покрытие условий} + В соответствии с этим критерием количество тестов должно быть таким, чтобы + все возможные результаты каждого условия в решении выполнялись по крайней мере + один раз. + + Тесты, покрывающие все условия программы представлены на Рис.~\ref{fig:programm2/condition-coverage}. + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/programm2/condition-coverage.png} + \caption{Набор тестов для покрытия условий программы.} + \label{fig:programm2/condition-coverage} + \end{figure} + + \newpage + \subsubsection{Покрытие решений и условий} + Согласно этому критерию набор тестов является достаточно полным, если удовлетворяются следующие требования: каждое условие в решении принимает каждое + возможное значение по крайней мере один раз, каждый возможный исход решения + проверяется по крайней мере один раз и каждой точке входа управление передается + по крайней мере один раз. + + Тесты, написанные ранее, обеспечивают покрытие решений и условий (Рис.~\ref{fig:programm2/condition-coverage-2}). + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/programm2/condition-coverage.png} + \caption{Набор тестов для покрытия решений и условий программы.} + \label{fig:programm2/condition-coverage-2} + \end{figure} + + + \newpage + \subsubsection{Комбинаторное покрытие условий} + Этот критерий требует создания такого набора тестов, при котором каждая возможная комбинация результатов вычисления условий в каждом решении и + каждая точка входа проверяются по крайней мере один раз. + + Тесты, обеспечивающие комбинаторное покрытие условий, представлены на Рис.~\ref{fig:programm2/comb}. + + \begin{figure}[h!] + \centering + \includegraphics[width=1\linewidth]{img/programm2/comb.png} + \caption{Набор тестов для комбинаторного покрытия условий программы.} + \label{fig:programm2/comb} + \end{figure} + + Покрыть истинную ветку условия 3 (путь B->D->E) невозможно из-за экстренного завершения программы при вводе строкового значения N. + + \subsubsection{Результаты тестирования методом <<белого ящика>>} + В результате тестирования методом «белого ящика» было составлено 11 тестов. Программа прошла все 11 тестов. Это может говорить как о корректности программы, так и о том, что данный метод просто не подходит для тестирования данной программы, так как не рассматривает какую-либо ситуацию, в которой бы возникла ошибка. + + + \newpage + \subsection{Тестирование методом <<чёрного ящика>>} + \subsubsection{Разбиение на классы эквивалентности} + Составлено разбиение на классы эквивалентности исходя из ограничений для + программы, представленное на Рис.~\ref{fig:programm2/classes}. Тесты для допустимых классов эквивалентности представлены на Рис.~\ref{fig:programm2/classes-test-dop} и тесты для недопустимых классов эквивалентности + — на Рис.~\ref{fig:programm2/classes-test-nedop}. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.6\linewidth]{img/programm2/classes.png} + \caption{Разбиение на классы эквивалентности.} + \label{fig:programm2/classes} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.75\linewidth]{img/programm2/classes-test-dop.png} + \caption{Тесты для допустимых классов эквивалентности.} + \label{fig:programm2/classes-test-dop} + \end{figure} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.75\linewidth]{img/programm2/classes-test-nedop.png} + \caption{Тесты для недопустимых классов эквивалентности.} + \label{fig:programm2/classes-test-nedop} + \end{figure} + + Программа прошла все 9 тестов, составленных при рассмотрении классов эквивалентности входных данных. + + + \newpage + \subsubsection{Анализ граничных условий} + В программе можно выделить следующие граничные условия: + \begin{itemize} + \item $n \geq 1$; + \item $k \leq 15$; + \item $n \geq 1$; + \item $k \leq 15$. + \end{itemize} + + Для каждой из границ определим тесты, соответствующие: + \begin{itemize} + \item граничному целому числу (верхнему/нижнему); + \item целому числу, выходящему за границу (верхнюю/нижнюю) на единицу; + % \item дробному числу, на 0.001 выходящему за границу (верхнюю/нижнюю). + \end{itemize} + + Составленные тесты представлены на Рис.~\ref{fig:programm2/bounds}. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.8\linewidth]{img/programm2/bounds.png} + \caption{Тесты граничных условий.} + \label{fig:programm2/bounds} + \end{figure} + + При анализе граничных условий был составлен набор из 8 тестов. Программа прошла все 8 тестов. + + \newpage + \subsubsection{Причинно-следственная диаграмма} + + \begin{figure}[h!] + \centering + \includegraphics[width=0.6\linewidth]{img/programm2/diagram.png} + \caption{Причинно следственная диаграмма.} + \label{fig:programm2/diagram} + \end{figure} + + \textbf{Причины:} + \begin{enumerate} + \item $n$ -- целое число; + % \item $n \geq 1$; + \item $1 \leq n \leq 15$; + % \item $k \geq 1$; + \item $1 \leq k \leq 15$. + \item $k$ -- целое число; + \end{enumerate} + + \textbf{Промежуточные причины:} + \begin{enumerate} + \item[1.1] $n$ -- целое и $1 \leq n \leq 15$. + \item[1.2] $k$ -- целое и $1 \leq k \leq 15$. + \end{enumerate} + + \textbf{Следствия:} + \begin{enumerate} + \item[2.1] Программа выводит сообщение об ошибке ''Ошибка! n должно быть целым числом'' и заново запрашивает числа $n$ и $k$; + \item[2.2] Программа выводит значение $n^k$ и завершает работу; + \item[2.3] Программа выводит сообщение об ошибке ''Ошибка! Введите числа от 1 до 15'' и заново запрашивает числа $n$ и $k$; + \item[2.4] Программа выводит сообщение об ошибке ''Ошибка! k должно быть целым числом'' и заново запрашивает числа $n$ и $k$; + \end{enumerate} + + На Рис.~\ref{fig:programm2/diagram} представлена причинно-следственная диаграмма. + + Таблица решений для диаграммы представлена на Рис.~\ref{fig:programm2/table-decisions}. + + \begin{figure}[h!] + \centering + \includegraphics[width=0.5\linewidth]{img/programm2/table-decisions.png} + \caption{Таблица решений.} + \label{fig:programm2/table-decisions} + \end{figure} + + Все тесты для таблицы решений уже были покрыты ранее при рассмотрении + классов эквивалентности и граничных условий. + + \subsubsection{Результаты тестирования методом <<чёрного ящика>>} + В результате тестирования методом чёрного ящика было составлено 17 тестов. Программа прошла все тесты. Это может свидетельствовать как о корректности программы, так и о том, что данный метод просто не подходит для данной программы, так как не рассматривает какую-либо ситуацию, в которой бы возникла ошибка. + + \newpage \section*{Заключение} \addcontentsline{toc}{section}{Заключение} - В ходе выполнения данной лабораторной работы были изучены методологии модульного тестирования: метод <<белого>> ящика и метод <<чёрного>> ящика. + В ходе выполнения данной лабораторной работы были изучены методологии модульного тестирования: метод <<белого ящика>> и метод <<чёрного ящика>>. - При помощи изученных методологий были спроектированы тесты для программы возведения матрицы в степень и программы вычисления факториала числа. При составлении тестов использовались методы: + При помощи изученных методологий были спроектированы тесты для программы вычисления факториала числа и возведения числа в степень. При составлении тестов использовались методы:3 \begin{itemize} \item Разбиения на классы эквивалентности; \item Анализа граничных значений; @@ -641,8 +911,10 @@ % Тестирование первой программы показало, что 11 тестов из 21, составленных методом чёрного ящика не были пройдены программой, и все 5 тестов, составленных методом белого ящика, были пройдены. Таким образом, сочетанием методов <<чёрного>> и <<белого>> ящиков удалось выявить ошибки в спецификации первой программы. При тестировании первой программы методом чёрного ящика не было пройдено 2 теста, методом белого ящика --- 1 тест. Ошибки, из-за которых тесты не были пройдены, связаны с некорректной проверкой входных значений и неверно составленной спецификацией. + + При тестировании второй программы методом чёрного ящика было составлено 17 тестов, методом белого ящика --- 11 тестов. В результате тестирования не удалось составить тест, который программа бы не прошла. Это может свидетельствовать как о корректности программы, так и о том, что данные методы просто не подходят для тестирования данной программы, так как не рассматривают какую-либо ситуацию, в которой бы возникла ошибка. - Более эффективным методом для проверки программ оказался метод <<чёрного>> ящика. + Более эффективным методом для проверки программ оказался метод <<чёрного ящика>>. С его помощью удалось составить два теста, которые программа не смогла пройти. С помощью метода <<белого ящика>> удалось составить только один такой тест. \newpage \section*{Список литературы}