diff --git a/04-telematics.tex b/04-telematics.tex index 2d64b33..6a2c06c 100644 --- a/04-telematics.tex +++ b/04-telematics.tex @@ -14,9 +14,31 @@ \tableofcontents \newpage \section{Введение} -DevOps -- стратегия разработки ПО, призванная устранить разрыв между разработчиками, и другими командами. +DevOps -- стратегия разработки ПО, призванная устранить разрыв между разработчиками, и другими командами. Методология автомтизации технологических процессов сборки, настройки и развёртывания программного обеспечения. Методология предполагает активное взаимодействие специалистов по разработке со специалистами по информационно-технологическому обсулуживанию и взаимную интеграцию их технологических процессов друг в друга, для обеспечения высокого качества программного продукта. + +Методологии разработки - waterfall (последовательный переход от одного этапа к другому), agile (scrum, lean) -- гибкая методология, система идей. Ключевой принцип - разработка через короткие итерации. + +Водопадная модель разработки (Waterfall-разработка): +Системные и программные требования: закрепляются в PRD (product requirements documents, документ требований к продукту). +Анализ: воплощается в моделях, схемах и бизнес-правилах. +Дизайн: разрабатывается внутренняя архитектура ПО, способы реализации требований; си внешний вид ПО, ной +его внутренняя структурная логи + +. Кодинг: непосредственно пишется код программы, идёт интеграция ПО. + +'Нетолько интерф + +- Тестирование: баг-тестеры (т +продукт, занося в трекеры сведения о дефектах кода програм +функционала. В случае ошибок и наличия времени финансов происходит +исправление багов. + +Операции: продукт эдаптируется под разные операционные системы, +регулярно обновляется для исправления обнаруженных пользователями +бэгов и добавления функционала. В рамках стадии также осуществляется + +техническая поддержка клиентов: -Методологии разработки - waterfall, agile (scrum, lean) Обычно ИТ-команда это разработчики(Dev), тестировщики(QA), группа эксплуатации(Ops). Толчком к появлению девопс стало появление микросервисов. diff --git a/04-tss-01-lab-report.tex b/04-tss-01-lab-report.tex index 478ce2a..3a1d0aa 100644 --- a/04-tss-01-lab-report.tex +++ b/04-tss-01-lab-report.tex @@ -11,7 +11,7 @@ \makeBMSTUHeader % ... работе, номер, тема, предмет, ?а, кто -\makeReportTitle{лабораторной}{1}{Введение}{Программное обеспечение телекоммуникационных систем}{}{И.М.Сидякин} +\makeReportTitle{лабораторной}{№ 1}{Введение}{Программное обеспечение телекоммуникационных систем}{}{И.М.Сидякин} \newpage \sloppy \thispagestyle{empty} @@ -38,10 +38,10 @@ Debian 11: - ErlangPlugin 0.11.1162. - Erlang/OTP 23 [erts-11.1.8] [64-bit] -Mac OS X (уточнить): -- IDEA 2022.3.1 CE +Ubuntu 22.04: +- IDEA 2022.3.2 CE - ErlangPlugin 0.11.1162. -- Erlang/OTP 23 [erts-11.1.8] [64-bit] +- Erlang/OTP 25 [erts-13.0.4] [64-bit] \end{verbatim} Основные синтаксические конструкции, использованные при написании функций взяты из материалов к лабораторной работе, со слайда 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} чисел делящихся на квадрат простого числа в этом диапазоне, она должна вернуть атом fail. \end{itemize} -\item Найдите первый ряд из чисел делящихся на квадрат простого числа длиной 4, длиной 5, и длиной 6. Нужно выбрать значение \code{MaxN} равное 30000. Программа должна завершить вычисления в пределах одной минуты. +\item \label{item:task-work} Найдите первый ряд из чисел делящихся на квадрат простого числа длиной 4, длиной 5, и длиной 6. Нужно выбрать значение \code{MaxN} равное 30000. Программа должна завершить вычисления в пределах одной минуты. \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} - diff --git a/pics/04-tss-01-lab-final.png b/pics/04-tss-01-lab-final.png new file mode 100644 index 0000000..44d793b Binary files /dev/null and b/pics/04-tss-01-lab-final.png differ diff --git a/pics/04-tss-01-lab-is-prime.png b/pics/04-tss-01-lab-is-prime.png new file mode 100644 index 0000000..51f4f3c Binary files /dev/null and b/pics/04-tss-01-lab-is-prime.png differ diff --git a/pics/04-tss-01-lab-mul1.png b/pics/04-tss-01-lab-mul1.png new file mode 100644 index 0000000..65e9e72 Binary files /dev/null and b/pics/04-tss-01-lab-mul1.png differ diff --git a/pics/04-tss-01-lab-mul2.png b/pics/04-tss-01-lab-mul2.png new file mode 100644 index 0000000..f3d2d4d Binary files /dev/null and b/pics/04-tss-01-lab-mul2.png differ diff --git a/pics/04-tss-01-lab-prime-factors.png b/pics/04-tss-01-lab-prime-factors.png new file mode 100644 index 0000000..e28aad8 Binary files /dev/null and b/pics/04-tss-01-lab-prime-factors.png differ diff --git a/pics/04-tss-01-lab-say-prime.png b/pics/04-tss-01-lab-say-prime.png new file mode 100644 index 0000000..cb4d0f6 Binary files /dev/null and b/pics/04-tss-01-lab-say-prime.png differ diff --git a/pics/04-tss-01-lab-sq-mul-test.png b/pics/04-tss-01-lab-sq-mul-test.png new file mode 100644 index 0000000..732330b Binary files /dev/null and b/pics/04-tss-01-lab-sq-mul-test.png differ diff --git a/settings/bmstu-preamble.tex b/settings/bmstu-preamble.tex index 7e6a9a0..3d6d7e0 100644 --- a/settings/bmstu-preamble.tex +++ b/settings/bmstu-preamble.tex @@ -154,10 +154,11 @@ sorting=ntvy, \end{center} \vspace*{4em} \begin{flushright} - Выполнили\\ + Выполнил\\ % cтудент группы ИУ3-11М \\ % cтудент группы ИУ3-21М \\ - cтудент группы ИУ3-31М \\ +% cтудент группы ИУ3-31М \\ + cтудент группы ИУ3-41М \\ Овчинников И.И. \\ \vspace*{0.5em} Проверил#5\\