tss lab-01

This commit is contained in:
Ivan I. Ovchinnikov 2023-02-14 10:08:47 +03:00
parent a9dde5dcb8
commit de835acd08
10 changed files with 182 additions and 10 deletions

View File

@ -14,9 +14,31 @@
\tableofcontents \tableofcontents
\newpage \newpage
\section{Введение} \section{Введение}
DevOps -- стратегия разработки ПО, призванная устранить разрыв между разработчиками, и другими командами. DevOps -- стратегия разработки ПО, призванная устранить разрыв между разработчиками, и другими командами. Методология автомтизации технологических процессов сборки, настройки и развёртывания программного обеспечения. Методология предполагает активное взаимодействие специалистов по разработке со специалистами по информационно-технологическому обсулуживанию и взаимную интеграцию их технологических процессов друг в друга, для обеспечения высокого качества программного продукта.
Методологии разработки - waterfall (последовательный переход от одного этапа к другому), agile (scrum, lean) -- гибкая методология, система идей. Ключевой принцип - разработка через короткие итерации.
Водопадная модель разработки (Waterfall-разработка):
Системные и программные требования: закрепляются в PRD (product requirements documents, документ требований к продукту).
Анализ: воплощается в моделях, схемах и бизнес-правилах.
Дизайн: разрабатывается внутренняя архитектура ПО, способы реализации требований; си внешний вид ПО, ной
его внутренняя структурная логи
. Кодинг: непосредственно пишется код программы, идёт интеграция ПО.
'Нетолько интерф
- Тестирование: баг-тестеры (т
продукт, занося в трекеры сведения о дефектах кода програм
функционала. В случае ошибок и наличия времени финансов происходит
исправление багов.
Операции: продукт эдаптируется под разные операционные системы,
регулярно обновляется для исправления обнаруженных пользователями
бэгов и добавления функционала. В рамках стадии также осуществляется
техническая поддержка клиентов:
Методологии разработки - waterfall, agile (scrum, lean)
Обычно ИТ-команда это разработчики(Dev), тестировщики(QA), группа эксплуатации(Ops). Толчком к появлению девопс стало появление микросервисов. Обычно ИТ-команда это разработчики(Dev), тестировщики(QA), группа эксплуатации(Ops). Толчком к появлению девопс стало появление микросервисов.

View File

@ -11,7 +11,7 @@
\makeBMSTUHeader \makeBMSTUHeader
% ... работе, номер, тема, предмет, ?а, кто % ... работе, номер, тема, предмет, ?а, кто
\makeReportTitle{лабораторной}{1}{Введение}{Программное обеспечение телекоммуникационных систем}{}{И.М.Сидякин} \makeReportTitle{лабораторной}{1}{Введение}{Программное обеспечение телекоммуникационных систем}{}{И.М.Сидякин}
\newpage \newpage
\sloppy \sloppy
\thispagestyle{empty} \thispagestyle{empty}
@ -38,10 +38,10 @@ Debian 11:
- ErlangPlugin 0.11.1162. - ErlangPlugin 0.11.1162.
- Erlang/OTP 23 [erts-11.1.8] [64-bit] - Erlang/OTP 23 [erts-11.1.8] [64-bit]
Mac OS X (уточнить): Ubuntu 22.04:
- IDEA 2022.3.1 CE - IDEA 2022.3.2 CE
- ErlangPlugin 0.11.1162. - ErlangPlugin 0.11.1162.
- Erlang/OTP 23 [erts-11.1.8] [64-bit] - Erlang/OTP 25 [erts-13.0.4] [64-bit]
\end{verbatim} \end{verbatim}
Основные синтаксические конструкции, использованные при написании функций взяты из материалов к лабораторной работе, со слайда 1-27 презентации. Код написанного модуля, вычисляющего число Фибоначчи приведён в листинге \hrf{lst:fib-p}, код юнит-теста написанного модуля в листинге \hrf{lst:fib-p-test}, а снимок экрана, демонстрирующий успешность пройденных тестов на рисунке \hrf{pic:fib-p-pow}. Основные синтаксические конструкции, использованные при написании функций взяты из материалов к лабораторной работе, со слайда 1-27 презентации. Код написанного модуля, вычисляющего число Фибоначчи приведён в листинге \hrf{lst:fib-p}, код юнит-теста написанного модуля в листинге \hrf{lst:fib-p-test}, а снимок экрана, демонстрирующий успешность пройденных тестов на рисунке \hrf{pic:fib-p-pow}.
@ -263,9 +263,158 @@ start_time_chack() ->
\item Если функция находит \code{Count} чисел подряд, делящихся на квадрат простого числа в диапазоне \code{[2, MaxN]}, она должна вернуть первое число из этой последовательности. \item Если функция находит \code{Count} чисел подряд, делящихся на квадрат простого числа в диапазоне \code{[2, MaxN]}, она должна вернуть первое число из этой последовательности.
\item Если функция не находит серию из \code{Count} чисел делящихся на квадрат простого числа в этом диапазоне, она должна вернуть атом fail. \item Если функция не находит серию из \code{Count} чисел делящихся на квадрат простого числа в этом диапазоне, она должна вернуть атом fail.
\end{itemize} \end{itemize}
\item Найдите первый ряд из чисел делящихся на квадрат простого числа длиной 4, длиной 5, и длиной 6. Нужно выбрать значение \code{MaxN} равное 30000. Программа должна завершить вычисления в пределах одной минуты. \item \label{item:task-work} Найдите первый ряд из чисел делящихся на квадрат простого числа длиной 4, длиной 5, и длиной 6. Нужно выбрать значение \code{MaxN} равное 30000. Программа должна завершить вычисления в пределах одной минуты.
\end{enumerate} \end{enumerate}
\section{Выполнение}
\subsection{Функция вычисления простого числа}
Функция последовательно перебирает все числа от «корня из искомого + 1» до 2, возвращая ложь при $N < 2$. Если найдено число, остаток от деления на которое искомого даёт 0 -- искомое не считается простым. В работе используется встроенная в язык функция \code{trunc()}, отсекающая дробную часть передаваемого в аргументе числа.
Код функции приведён в листинге \hrf{lst:is-prime}, сниок экрана, демонстрирующий корректность выполнения функции (с использованием тестов) на рисунке \hrf{pic:is-prime}. Во время работы также была написана функция для проведения ручного тестирования, представленная на рисунке \hrf{pic:say-prime}, демонстрирующем, что число 1111 не является простым..
\begin{figure}[H]
\centering
\includegraphics[width=10cm]{04-tss-01-lab-say-prime.png}
\caption{Ручная проверка работы фукнции}
\label{pic:say-prime}
\end{figure}
\begin{lstlisting}[language=Erlang, style=CCodeStyle, caption={Код функции}, label={lst:is-prime}]
%% region is_prime
is_prime(N) when N < 2 ->
false;
is_prime(N) ->
is_prime(N, 2, trunc(math:sqrt(N)) + 1).
is_prime(_, Max, Max) ->
true;
is_prime(N, I, Max) ->
if
N rem I =:= 0 ->
false;
true ->
is_prime(N, I + 1, Max)
end.
%% endregion
\end{lstlisting}
\begin{figure}[H]
\centering
\includegraphics[width=10cm]{04-tss-01-lab-is-prime.png}
\caption{Запуск и успешное выполнение тестов}
\label{pic:is-prime}
\end{figure}
\subsection{Вычисление сомножителей}
Функция имеет ограничение и выполняется только для тех чисел, на которые делится без остатка исходное (\code{when X rem N == 0}) с 2 до искомого, складывая в список все значения, меньшие, чем «корень из искомого + 1». Код функции приведён в листинге \hrf{lst:prime-factors}, сниок экрана, демонстрирующий корректность выполнения функции на рисунке \hrf{pic:prime-factors}.
\begin{lstlisting}[language=Erlang, style=CCodeStyle, caption={Код функции}, label={lst:prime-factors}]
%region factor
prime_factors(N) ->
prime_factors(N, 2, []).
prime_factors(X, N, Primes) when X rem N == 0 ->
prime_factors(trunc(X / N), 2, [N | Primes]);
prime_factors(X, N, Primes) ->
case N < math:sqrt(X) + 1 of
true ->
prime_factors(X, N + 1, Primes);
false ->
[X | Primes]
end.
%endregion
\end{lstlisting}
\begin{figure}[H]
\centering
\includegraphics[width=15cm]{04-tss-01-lab-prime-factors.png}
\caption{Демонстрация работы функции}
\label{pic:prime-factors}
\end{figure}
\subsection{Функция вычисления делимости на квадрат простого числа}
Функция перебирает список полученных функцией \code{prime_factors} множителей на наличие повторений, последовательно выделяя головной элемент списка и вызывая функцию \code{lists:member}\footnote{\href{https://www.tutorialspoint.com/erlang/erlang_member.htm}{примеры использования функции}}. Для пустого списка функция возвращает ложь. Например, для числа 111 (\hrf{is-sq-mul1}) функция возвращает ложь, а для 10000 (\hrf{is-sq-mul2}) истину. Код функции представлен в листинге \hrf{lst:is-sq-mul}, а результаты проверки представлены на рисунке \hrf{pic:is-sq-mul}
\begin{lstlisting}[language=Erlang, style=CCodeStyle, caption={Код функции}, label={lst:is-sq-mul}]
%% region is_square_multiple
is_square_multiple(N)->
is_square_multiple_fun(prime_factors(N)).
is_square_multiple_fun([H | T]) ->
case lists:member(H, T) of
true -> true;
false -> is_square_multiple_fun(T)
end;
is_square_multiple_fun([]) ->
false.
%% endregion is_square_multiple
\end{lstlisting}
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.47\textwidth}
\centering
\includegraphics[width=\textwidth]{04-tss-01-lab-mul1.png}
\caption{}
\label{pic:is-sq-mul1}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.47\textwidth}
\centering
\includegraphics[width=\textwidth]{04-tss-01-lab-mul2.png}
\caption{}
\label{pic:is-sq-mul2}
\end{subfigure}
\caption{}
\label{pic:is-sq-mul}
\end{figure}
\subsection[Функция-обёртка \code{find\_square\_multiples}]{Функция-обёртка \code{find_square_multiples}}
Функция работает с ограничением по длине найденных значений в списке (\code{when length(FoundSquareMultipleNumber) == Count}) и последовательно уменьшает максимальное число до которого нужно выполнять поиск (ищет не с начала, а с конца). Для максимального значения 2 -- нужно прекратить поиск, в этом случае функция выводит атом \code{fail}. Если проверка \code{is_square_multiple(TestNumber)} возвращает истину, число прибавляется (конкатенируется) к списку уже найденных. Код функции представлен в листинге \hrf{lst:find-sq-mul}. Для проверки работы был написан тест с предложенными в методическом пособии значениями (листинг \hrf{lst:sq-mul-test}). Тест пройден успешно (рисунок \hrf{pic:sq-mul-test}).
\begin{lstlisting}[language=Erlang, style=CCodeStyle, caption={Код тестов}, label={lst:sq-mul-test}]
test_find_square_multiples() ->
?assertEqual(fail, mobius:find_square_multiples(3, 20)),
?assertEqual(48, mobius:find_square_multiples(3, 50)).
\end{lstlisting}
\begin{figure}[H]
\centering
\includegraphics[width=12cm]{04-tss-01-lab-sq-mul-test.png}
\caption{Результат прохождения теста}
\label{pic:sq-mul-test}
\end{figure}
\begin{lstlisting}[language=Erlang, style=CCodeStyle, caption={Код функции}, label={lst:find-sq-mul}]
%% region find_square_multiples
find_square_multiples(Count, MaxN) ->
find_square_multiples_fun(Count, MaxN, []).
find_square_multiples_fun(Count, CurrentNumber, FoundSquareMultipleNumber)
when length(FoundSquareMultipleNumber) == Count ->
CurrentNumber + 1;
find_square_multiples_fun(_, 2, _) ->
fail;
find_square_multiples_fun(Count, TestNumber, FoundSquareMultipleNumber) ->
case is_square_multiple(TestNumber) of
true -> FoundsNumber = FoundSquareMultipleNumber ++ [TestNumber];
false -> FoundsNumber = []
end,
find_square_multiples_fun(Count, TestNumber - 1, FoundsNumber).
%% endregion find_square_multiples
\end{lstlisting}
Для выполнения п. \hrf{item:task-work} был описан цикл, последовательно увеличивающий число находимых множителей. Результат работы цикла с замерами времени приведён на рис. \hrf{pic:final}
\begin{figure}[H]
\centering
\includegraphics[width=17cm]{04-tss-01-lab-final.png}
\caption{Результат выполнения задания}
\label{pic:final}
\end{figure}
\end{document} \end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
pics/04-tss-01-lab-mul1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
pics/04-tss-01-lab-mul2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -154,10 +154,11 @@ sorting=ntvy,
\end{center} \end{center}
\vspace*{4em} \vspace*{4em}
\begin{flushright} \begin{flushright}
Выполнили\\ Выполнил\\
%удент группы ИУ3-11М \\ %удент группы ИУ3-11М \\
%удент группы ИУ3-21М \\ %удент группы ИУ3-21М \\
удент группы ИУ3-31М \\ %удент группы ИУ3-31М \\
удент группы ИУ3-41М \\
Овчинников И.И. \\ Овчинников И.И. \\
\vspace*{0.5em} \vspace*{0.5em}
Проверил#5\\ Проверил#5\\