\documentclass[a4paper,12pt,reqno]{article}

\usepackage{styledoc19}


\begin{document} % конец преамбулы, начало документа
	
	
	\year{2021}
    \docNumber{RU.17701729.09.09-62 51 01-1}
	\docFormat{Программа и методика испытаний}
	\student{БПИ 174}{Д. Ю. Редникина}
	
	\project{CRM-СИСТЕМА ДЛЯ БЛАГОТВОРИТЕЛЬНОГО ФОНДА <<AIAIN>>. WEB-ПРИЛОЖЕНИЕ ДЛЯ СОТРУДНИКОВ ФОНДА}
	

	\supervisor{Доцент департамента \vfill образовательной программы  \vfill <<Программная инженерия>>}
	{Х. М. Салех}
	
	\firstPage
						\newpage
	\secondPage
						\newpage
	\thirdPage
						\newpage
						
						
	\section{Объекты испытаний}
	\subsection{Наименование программы}
	\input{tex/rusTitle} (\input{tex/engTitle})
	\subsection{Область применения программы}
	\subsubsection{Функциональное назначение}
	\input{tex/functionalPurpose}
	\subsubsection{Эксплуатационное назначение}
	\input{tex/operationalPurpose}
	\subsubsection{Область применения}
	\input{tex/projectScope}
					\newpage
					
	\section{Цель испытаний}
	Проверка на соответствие требованиям, указанным в документе <<\input{tex/rusTitle}. Техническое задание>>.
	
	\section{Требования к программе}
	\subsection{Требования к функциональным характеристикам}
	Программа выполняется в рамках темы выпускной курсовой работы в соответствии с учебным планом подготовки бакалавров по направлению 09.03.04 «Программная инженерия» Национального исследовательского университета «Высшая школа экономики», факультет компьютерных наук.
	
	Программа должна удовлетворять следующим требованиям:
	
	\input{tex/req}
	
	\subsection{Требования к интерфейсу}
	Цветовая гамма интерфейса должена быть выполнена в голубых тонах. Разработанный интерфейс должен соответствовать макетам (см. Приложение \ref{figma}).
	
	\subsection{Требования к надежности}
	
	\newlist{nfr}{enumerate}{10}
 
    \setlist[nfr, 1]{label=\textbf{NFR-\arabic*.}}
    \setlist[nfr, 2]{label*=\textbf{\arabic*.}}
    \setlist[nfr, 3]{label=\arabic*.}
	
	\begin{nfr}
	    \item Система должна сохранять работоспособность и обеспечивать восстановление своих функций при возникновении следующих внештатных ситуаций:
	    \begin{nfr}
	    \item При ошибках работы сервера, к которому по API отправляет запросы Web-приложение, программа должна отображать сообщения в формате уведомлений в UI и продолжать корректную работу;
        \item При ошибках в сбоях аппаратных средств (кроме носителей данных) восстановление работоспособности возлагается на ОС;
        \item При ошибках, связанных с веб-браузером, восстановление работоспособности возлагается на ОС;
	\end{nfr}
	\item Компоненты защиты программы от несанкционированного доступа к данным и функционалу должны обеспечивать:
	\begin{nfr}
	\item Идентификацию пользователя;
	\item Проверку полномочий пользователя при работе с системой;
	\item Разграничение прав доступа пользователей на уровне задач и доступа к данным;
    \end{nfr}
	\end{nfr}
    
    \section{Требования к программной документации}
	\subsection{Состав программной документации}
	\input{tex/documents}
	
	\newpage
	\section{Средства и порядок испытаний}
	\subsection{Технические средства, используемые во время испытаний}
	\input{tex/tech}
	\subsection{Программные средства, используемые во время испытаний}
	\input{tex/prog}
	Тестирование производилось с развернутым Web-приложением и API~\cite{api} на стенде, по адресу \url{https://charity.infostrategic.com/}.
	
	
	\subsection{Порядок проведения испытаний}
	В процессе разработки программы были написаны unit-тесты, а также автотесты, тестирующие интеграционное взаимодействие Web-клиента и сервера~\cite{api}.
	
	Unit-тесты были написаны с помощью фреймворка Jest~\cite{jest}. При разработке приложения был использован сервис Gitlab, а также встроенный в Gitlab механизм CI/CD~\cite{cicd}. Разработка была построена следующим образом: на каждом коммите в пулл реквесте запускался пайплайн, который состоял из следующих этапов: Eslint, Prettier, Test. Первые два шага - линтеры, которые осуществляли проверку файлов проекта на код-стайл. На последнем этапе пайплана запускались unit-тесты проекта.
	
	Для автоматизации тестирования UI использовался фреймворк Silenium IDE~\cite{silenium}. С помощью этого фреймворка были написаны интеграционные авто-тесты, покрывающие основные бизнес-требования, отраженные на диаграмме прецедентов в Приложении. \ref{keyUsecase}.
	
	\newpage
	\section{Методы испытаний}
	
	Этап Test пайаплайна CI/CD автоматически запускает тесты проекта с помощью команды: \texttt{yarn test}. На изображении \ref{pic: test} можно увидеть успешный результат прохождения тестов в проекте.
	
	\begin{figure}[H]
		\centering
		\includegraphics[width = \linewidth]{img/test.png}
		\caption{Тестирование. CI job.}
		\label{pic: test}
	\end{figure}
	
	
	\subsection{Проверка требований к функциональным характеристикам}
	
	При тестировании Веб-приложения был использован фреймворк Silenium IDE~\cite{silenium}. С помощью плагина, установленного в браузер Google Chrome~\cite{chrome}, были записаны тесты, проверяющие удовлетворение проекта составленным требованиям.
	
	Для тестирования ключевых бизнес-процессов, выделенных на диаграмме прецедентов цветом (см. Приложение \ref{keyUsecase}), были составлены следующие тест-кейсы. По данным тест-кейсам были созданы тесты Silenium:
	
	\input{tex/testcase}
	
	Результаты UI тестов Silenium можно увидеть на рисунке \ref{pic: silenium}
	
	\begin{figure}[H]
		\centering
		\includegraphics[width = \linewidth]{img/silenium.png}
		\caption{Silenium IDE. Проект с тестами}
		\label{pic: silenium}
	\end{figure}
	
	Также было проведено регрессионное ручное тестирование сложных и многоэтапных бизнес-процессов, включающих активацию заявки и голосование по заявке. Данные сценарии невозможно автоматизировать с помощью Silenium IDE, так как их невозможно завершить (проверить полностью) без использования Android-клиента (или совершения запросов через консоль-клиент). 
	
	Для проверки требований и бизнес-сценариев были написаны следующие тест-кейсы:
	
	\input{tex/regressiontest}
	
	Для подтверждения успеха проведенного тестирования в Приложении \ref{test_1} и \ref{test_2} представить фотографии экрана Web-приложения по тест кейсу TC-9 и TC-10.
	
	\subsection{Проверка требований к программной документации}
	Вся документация, представленная в требованиях, готова.
	
	\newpage
	%\section{Источники, использованные при разработке}
	%\renewcommand{\refname}{Список источников}
	% \addcontentsline{toc}{subsection}{\refname}
	\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
	\anonsection{Список источников}
	\begin{thebibliography}{3}
	    \bibitem{md} Markdown Guide URL: \url{https://www.markdownguide.org} (Дата обращения: 16.04.2021).
	    \bibitem{gost}Единая система программной документации – М.: ИПК, Издательство стандартов, 2000, 125 стр.
		\bibitem{chrome} 
		LMS [Электронный ресурс] URL: 
		\url{https://www.google.com/chrome} (Дата обращения: 31.05.2021, режим доступа: свободный)
		\bibitem{api} Swagger Charity API, v0.2 [Электронный ресурс]  URL:\url{https://app.swaggerhub.com/apis/charity-crm/Charity/0.2} (Дата обращения: 31.05.2021, режим доступа: свободный)
		\bibitem{jest} Jest - testing URL:\url{https://jestjs.io} (Дата обращения: 31.05.2021, режим доступа: свободный)
		
		\bibitem{cicd} Gitlab - CI/CD URL:\url{https://docs.gitlab.com/ee/ci/} (Дата обращения: 31.05.2021, режим доступа: свободный)
		
		\bibitem{silenium} Silenium IDE URL:\url{https://www.selenium.dev/selenium-ide/}(Дата обращения: 31.05.2021, режим доступа: свободный)
	\end{thebibliography}
	
	\newpage
	\addition{Макеты интерфейса}{figma} 
	
	\input{tex/figma}
	
	\newpage
	\addition{Ключевые прецеденты}{keyUsecase} 
	\begin{figure}[H]
		\centering
		\includegraphics[width = 0.9\linewidth]{img/key-usecase.pdf}
		\caption{Диаграмма прецедентов}
    \end{figure}
    
    \newpage
	\addition{Тест кейс активации заявки}{test_1}
	
	\begin{figure}[H]
		\centering
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/1.png}
		\end{subfigure}
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/2.png}
		\end{subfigure}
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/3.png}
		\end{subfigure}
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/4.png}
		\end{subfigure}
		\caption{Скриншоты проведенного тестирорования TC-9}
	\end{figure}
	
		\newpage
	\addition{Тест кейс голосования по заявке}{test_2}
	
	\begin{figure}[H]
		\centering
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/5.png}
		\end{subfigure}
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/6.png}
		\end{subfigure}
		\begin{subfigure}[b]{0.475\linewidth}
			\includegraphics[width=\linewidth]{img/test/7.png}
		\end{subfigure}
		\caption{Скриншоты проведенного тестирорования TC-10}
	\end{figure}
	
	\newpage
	\addition{Роли сотрудников фонда}{stuff}
	\input{tex/stuff}
	
	\newpage
	\addition{Диаграмма жизненного цикла заявки}{status} 
	
	\begin{figure}[H]
		\centering
		\includegraphics[width = 0.9\linewidth]{img/statusflow.pdf}
		\caption{Диаграмма статусов}
		\label{pic: status}
	\end{figure}
	
	
	
	\newpage
	\listRegistration
	
\end{document}