Вторая прога

This commit is contained in:
2025-04-10 11:51:11 +03:00
parent 99caecf319
commit a7a3c197a1
12 changed files with 281 additions and 9 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

BIN
lab2/img/programm2/comb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

View File

@@ -156,7 +156,8 @@
В данной работе будут рассмотрены оба метода. Также данные приёмы будут применены для тестирования двух программ: В данной работе будут рассмотрены оба метода. Также данные приёмы будут применены для тестирования двух программ:
\begin{itemize} \begin{itemize}
\item \item вычисление факториала числа;
\item возведение числа в степень.
\end{itemize} \end{itemize}
Каждая из программ будет протестирована обоими методами с целью сравнения подходов. Каждая из программ будет протестирована обоими методами с целью сравнения подходов.
@@ -435,7 +436,7 @@
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\linewidth]{img/programm1/table-operators.png} \includegraphics[width=1\linewidth]{img/programm1/table-operators.png}
\caption{Набор тестов для покрытия операторов второй программы.} \caption{Набор тестов для покрытия операторов программы.}
\label{fig:programm1/table-operators} \label{fig:programm1/table-operators}
\end{figure} \end{figure}
@@ -451,7 +452,7 @@
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\linewidth]{img/programm1/table-operators.png} \includegraphics[width=1\linewidth]{img/programm1/table-operators.png}
\caption{Набор тестов для покрытия решений второй программы.} \caption{Набор тестов для покрытия решений программы.}
\label{fig:programm1/table-operators-1} \label{fig:programm1/table-operators-1}
\end{figure} \end{figure}
@@ -468,7 +469,7 @@
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\linewidth]{img/programm1/table-operators.png} \includegraphics[width=1\linewidth]{img/programm1/table-operators.png}
\caption{Набор тестов для покрытия решений второй программы.} \caption{Набор тестов для покрытия решений программы.}
\label{fig:programm1/table-operators-2} \label{fig:programm1/table-operators-2}
\end{figure} \end{figure}
@@ -486,7 +487,7 @@
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\linewidth]{img/programm1/table-operators.png} \includegraphics[width=1\linewidth]{img/programm1/table-operators.png}
\caption{Набор тестов для покрытия решений второй программы.} \caption{Набор тестов для покрытия решений программы.}
\label{fig:programm1/table-operators-3} \label{fig:programm1/table-operators-3}
\end{figure} \end{figure}
@@ -502,7 +503,7 @@
\begin{figure}[h!] \begin{figure}[h!]
\centering \centering
\includegraphics[width=1\linewidth]{img/programm1/table-operators.png} \includegraphics[width=1\linewidth]{img/programm1/table-operators.png}
\caption{Набор тестов для покрытия решений второй программы.} \caption{Набор тестов для покрытия решений программы.}
\label{fig:programm1/table-operators-4} \label{fig:programm1/table-operators-4}
\end{figure} \end{figure}
@@ -619,12 +620,281 @@
\subsubsection{Результаты тестирования методом <<чёрного ящика>>} \subsubsection{Результаты тестирования методом <<чёрного ящика>>}
В результате тестирования методом чёрного ящика было составлено 11 тестов, из которых не пройдено 2. Ошибки, из-за которых тесты не были пройдены, связаны с некорректной проверкой входных значений и неверно составленной спецификацией: программа экстренно завершается при вводе вместо числа $N$ строки, а также входит в бесконечный цикл при $N = 0$, что не соответствует поведению, описанному в спецификакции. В результате тестирования методом чёрного ящика было составлено 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 \newpage
\section*{Заключение} \section*{Заключение}
\addcontentsline{toc}{section}{Заключение} \addcontentsline{toc}{section}{Заключение}
В ходе выполнения данной лабораторной работы были изучены методологии модульного тестирования: метод <<белого>> ящика и метод <<чёрного>> ящика. В ходе выполнения данной лабораторной работы были изучены методологии модульного тестирования: метод <<белого ящика>> и метод <<чёрного ящика>>.
При помощи изученных методологий были спроектированы тесты для программы возведения матрицы в степень и программы вычисления факториала числа. При составлении тестов использовались методы: При помощи изученных методологий были спроектированы тесты для программы вычисления факториала числа и возведения числа в степень. При составлении тестов использовались методы:3
\begin{itemize} \begin{itemize}
\item Разбиения на классы эквивалентности; \item Разбиения на классы эквивалентности;
\item Анализа граничных значений; \item Анализа граничных значений;
@@ -641,8 +911,10 @@
% Тестирование первой программы показало, что 11 тестов из 21, составленных методом чёрного ящика не были пройдены программой, и все 5 тестов, составленных методом белого ящика, были пройдены. Таким образом, сочетанием методов <<чёрного>> и <<белого>> ящиков удалось выявить ошибки в спецификации первой программы. % Тестирование первой программы показало, что 11 тестов из 21, составленных методом чёрного ящика не были пройдены программой, и все 5 тестов, составленных методом белого ящика, были пройдены. Таким образом, сочетанием методов <<чёрного>> и <<белого>> ящиков удалось выявить ошибки в спецификации первой программы.
При тестировании первой программы методом чёрного ящика не было пройдено 2 теста, методом белого ящика --- 1 тест. Ошибки, из-за которых тесты не были пройдены, связаны с некорректной проверкой входных значений и неверно составленной спецификацией. При тестировании первой программы методом чёрного ящика не было пройдено 2 теста, методом белого ящика --- 1 тест. Ошибки, из-за которых тесты не были пройдены, связаны с некорректной проверкой входных значений и неверно составленной спецификацией.
При тестировании второй программы методом чёрного ящика было составлено 17 тестов, методом белого ящика --- 11 тестов. В результате тестирования не удалось составить тест, который программа бы не прошла. Это может свидетельствовать как о корректности программы, так и о том, что данные методы просто не подходят для тестирования данной программы, так как не рассматривают какую-либо ситуацию, в которой бы возникла ошибка.
Более эффективным методом для проверки программ оказался метод <<чёрного>> ящика. Более эффективным методом для проверки программ оказался метод <<чёрного ящика>>. С его помощью удалось составить два теста, которые программа не смогла пройти. С помощью метода <<белого ящика>> удалось составить только один такой тест.
\newpage \newpage
\section*{Список литературы} \section*{Список литературы}