From a2932e2bde1ccbc4b02f6c8a18784028a32fb49c Mon Sep 17 00:00:00 2001 From: Jueun Park <s5616012@mailbox.tu-dresden.de> Date: Sun, 17 Oct 2021 10:37:53 +0900 Subject: [PATCH] Update --- bibliography.bib | 38 ++++++++++ images/ast.pdf | Bin 24413 -> 0 bytes images/astimage.png | Bin 0 -> 80385 bytes lst.tex | 156 ++++++++++++++++++++++++++++++++++++++ sections/background.tex | 2 +- sections/benefits.tex | 17 ++++- sections/conclusion.tex | 10 ++- sections/feasibility.tex | 2 +- sections/introduction.tex | 2 +- sections/openapi.tex | 2 +- sections/rag.tex | 4 +- sections/ragoGram.tex | 25 +++++- sections/ragoProcess.tex | 2 - sections/ragoTest.tex | 5 +- sections/relatedwork.tex | 3 +- sections/restapi.tex | 59 +++++++++----- sections/stm1.tex | 18 +++-- sections/stm2.tex | 12 ++- sections/summary.tex | 46 +++++++++++ sections/testing.tex | 4 +- thesis.tex | 3 +- 21 files changed, 355 insertions(+), 55 deletions(-) delete mode 100644 images/ast.pdf create mode 100644 images/astimage.png create mode 100644 sections/summary.tex diff --git a/bibliography.bib b/bibliography.bib index f7dd294..4a6abf8 100644 --- a/bibliography.bib +++ b/bibliography.bib @@ -115,3 +115,41 @@ isbn = {978-81-203-5068-7} year={2018} } +@article{mey2020reusing, + title={Reusing Static Analysis across Different Domain-Specific Languages using Reference Attribute Grammars}, + author={Mey, Johannes and K{\"u}hn, Thomas and Sch{\"o}ne, Ren{\'e} and Assmann, Uwe}, + journal={arXiv preprint arXiv:2002.06187}, + year={2020} +} + +@inproceedings{ekman2007jastadd, + title={The jastadd extensible java compiler}, + author={Ekman, Torbj{\"o}rn and Hedin, G{\"o}rel}, + booktitle={Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems, languages and applications}, + pages={1--18}, + year={2007} +} + +@inproceedings{fors2020principles, + title={Principles and patterns of JastAdd-style reference attribute grammars}, + author={Fors, Niklas and S{\"o}derberg, Emma and Hedin, G{\"o}rel}, + booktitle={Proceedings of the 13th ACM SIGPLAN International Conference on Software Language Engineering}, + pages={86--100}, + year={2020} +} + +@inproceedings{mey2018continuous, + title={Continuous model validation using reference attribute grammars}, + author={Mey, Johannes and Sch{\"o}ne, Ren{\'e} and Hedin, G{\"o}rel and S{\"o}derberg, Emma and K{\"u}hn, Thomas and Fors, Niklas and {\"O}qvist, Jesper and A{\ss}mann, Uwe}, + booktitle={Proceedings of the 11th ACM SIGPLAN International Conference on Software Language Engineering}, + pages={70--82}, + year={2018} +} + +@inproceedings{schone2020connecting, + title={Connecting conceptual models using relational reference attribute grammars}, + author={Sch{\"o}ne, Ren{\'e} and Mey, Johannes and Ebert, Sebastian and A{\ss}mann, Uwe}, + booktitle={Proceedings of the 23rd ACM/IEEE International Conference on Model Driven Engineering Languages and Systems: Companion Proceedings}, + pages={1--11}, + year={2020} +} diff --git a/images/ast.pdf b/images/ast.pdf deleted file mode 100644 index 8e3efd11ebde0d48cc86bc446ee4255ab908f2b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24413 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 Tz_o#qk%fsFm#V6(zZ(|-lkvh~ diff --git a/images/astimage.png b/images/astimage.png new file mode 100644 index 0000000000000000000000000000000000000000..bd5548ed3024a3995d34a8962ff686f8060efa13 GIT binary patch literal 80385 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ΰQ$2%IgL1_dtUi-{ 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 FCIG%akXQf! literal 0 HcmV?d00001 diff --git a/lst.tex b/lst.tex index 58a67e4..c2baae6 100644 --- a/lst.tex +++ b/lst.tex @@ -1,6 +1,15 @@ \usepackage{listings} \usepackage{inconsolata} + +\usepackage{bera}% optional: just to have a nice mono-spaced font +\usepackage{listings} + +\colorlet{punct}{red!60!black} +\definecolor{background}{HTML}{EEEEEE} +\definecolor{delim}{RGB}{20,105,176} +\colorlet{numb}{magenta!60!black} + \lstdefinestyle{common-style}{ basicstyle=\small\ttfamily, % the size of the fonts that are used for the code showspaces=false, % show spaces adding particular underscores @@ -13,6 +22,87 @@ breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace keywordstyle={\color{blue}\textbf}, % keywords are blue commentstyle={\color{gray}}, % comments + backgroundcolor=\color{background}, + literate={\$}{{{\$}}}1, + basewidth=0.5em, + breakindent=40pt, + breakautoindent=true, + escapechar=\&, + aboveskip={0.1\baselineskip} +} + +\lstdefinestyle{get-style}{ + basicstyle=\small\ttfamily, % the size of the fonts that are used for the code + showspaces=false, % show spaces adding particular underscores + showstringspaces=false, % underline spaces within strings + showtabs=false, % show tabs within strings adding particular underscores +% frame=tlrb, % adds a frame around the code + framexleftmargin=1em, % space between left part of frame and listing + tabsize=2, % sets default tabsize to 2 spacesz + breaklines=true, % sets automatic line breaking + breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace + keywordstyle={\color{blue}\textbf}, % keywords are blue + commentstyle={\color{gray}}, % comments + literate={\$}{{{\$}}}1, + basewidth=0.5em, + breakindent=40pt, + breakautoindent=true, + escapechar=\&, + aboveskip={0.1\baselineskip} +} + +\lstdefinestyle{post-style}{ + basicstyle=\small\ttfamily, % the size of the fonts that are used for the code + showspaces=false, % show spaces adding particular underscores + showstringspaces=false, % underline spaces within strings + showtabs=false, % show tabs within strings adding particular underscores +% frame=tlrb, % adds a frame around the code + framexleftmargin=1em, % space between left part of frame and listing + tabsize=2, % sets default tabsize to 2 spacesz + breaklines=true, % sets automatic line breaking + breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace + keywordstyle={\color{olive}\textbf}, % keywords are blue + commentstyle={\color{gray}}, % comments + literate={\$}{{{\$}}}1, + basewidth=0.5em, + breakindent=40pt, + breakautoindent=true, + escapechar=\&, + aboveskip={0.1\baselineskip} +} + +\lstdefinestyle{delete-style}{ + basicstyle=\small\ttfamily, % the size of the fonts that are used for the code + showspaces=false, % show spaces adding particular underscores + showstringspaces=false, % underline spaces within strings + showtabs=false, % show tabs within strings adding particular underscores +% frame=tlrb, % adds a frame around the code + framexleftmargin=1em, % space between left part of frame and listing + tabsize=2, % sets default tabsize to 2 spaces + breaklines=true, % sets automatic line breaking + breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace + keywordstyle={\color{red}\textbf}, % keywords are blue + commentstyle={\color{gray}}, % comments + literate={\$}{{{\$}}}1, + basewidth=0.5em, + breakindent=40pt, + breakautoindent=true, + escapechar=\&, + aboveskip={0.1\baselineskip} +} + +\lstdefinestyle{put-style}{ + basicstyle=\small\ttfamily, % the size of the fonts that are used for the code + showspaces=false, % show spaces adding particular underscores + showstringspaces=false, % underline spaces within strings + showtabs=false, % show tabs within strings adding particular underscores +% frame=tlrb, % adds a frame around the code + framexleftmargin=1em, % space between left part of frame and listing + tabsize=2, % sets default tabsize to 2 spaces + breaklines=true, % sets automatic line breaking + breakatwhitespace=true, % sets if automatic breaks should only happen at whitespace + keywordstyle={\color{orange}\textbf}, % keywords are orange + commentstyle={\color{gray}}, % comments literate={\$}{{{\$}}}1, basewidth=0.5em, breakindent=40pt, @@ -59,3 +149,69 @@ \lstdefinestyle{AST} { language=AST,style=common-style } \lstdefinestyle{JRAG} { language=JRAG,style=common-style } \lstdefinestyle{Java} { language=Java,style=common-style } + +\lstdefinelanguage{GET}{ + style=get-style, + morekeywords={GET}, + otherkeywords={::=,->,<,>}, + morecomment=[l]{//}, morecomment=[s]{/*}{*/}, +} + +\lstdefinelanguage{POST}{ + style=post-style, + morekeywords={POST}, + otherkeywords={::=,->,<,>}, + morecomment=[l]{//}, morecomment=[s]{/*}{*/}, +} + +\lstdefinelanguage{DELETE}{ + style=delete-style, + morekeywords={DELETE}, + otherkeywords={::=,->,<,>}, + morecomment=[l]{//}, morecomment=[s]{/*}{*/}, +} + +\lstdefinelanguage{PUT}{ + style=put-style, + morekeywords={PUT}, + otherkeywords={::=,->,<,>}, + morecomment=[l]{//}, morecomment=[s]{/*}{*/}, +} + +\lstdefinelanguage{json}{ + basicstyle=\small\ttfamily, + breaklines=true, + frame=lines, + backgroundcolor=\color{background}, + literate= + *{0}{{{\color{numb}0}}}{1} + {1}{{{\color{numb}1}}}{1} + {2}{{{\color{numb}2}}}{1} + {3}{{{\color{numb}3}}}{1} + {4}{{{\color{numb}4}}}{1} + {5}{{{\color{numb}5}}}{1} + {6}{{{\color{numb}6}}}{1} + {7}{{{\color{numb}7}}}{1} + {8}{{{\color{numb}8}}}{1} + {9}{{{\color{numb}9}}}{1} + {:}{{{\color{punct}{:}}}}{1} + {,}{{{\color{punct}{,}}}}{1} + {\{}{{{\color{delim}{\{}}}}{1} + {\}}{{{\color{delim}{\}}}}}{1} + {[}{{{\color{delim}{[}}}}{1} + {]}{{{\color{delim}{]}}}}{1}, +} + +\lstdefinestyle{rest}{ + breaklines=true, + frame=lines, + backgroundcolor=\color{background}, + emptylines=1, + breaklines=true, + basicstyle=\ttfamily\color{black}, + moredelim=**[is][\color{violet}]{@}{@}, + moredelim=**[is][\color{orange}]{~}{~}, + moredelim=**[is][\color{cyan}]{<}{>}, + moredelim=**[is][\color{brown}]{ABCD}{ABCD}, + moredelim=**[is][\color{olive}]{V}{V}, +} \ No newline at end of file diff --git a/sections/background.tex b/sections/background.tex index d06a2d4..1d6029f 100644 --- a/sections/background.tex +++ b/sections/background.tex @@ -1,5 +1,5 @@ \chapter{Background}\label{ch:background} -In this Chapter, concepts and technologies related and used as the basis of this work are presented. +In this Chapter, we present basis concepts and technologies of this work to understand the following contents after this chapter. \input{sections/testing} \input{sections/restapi} diff --git a/sections/benefits.tex b/sections/benefits.tex index d78b70d..4f37096 100644 --- a/sections/benefits.tex +++ b/sections/benefits.tex @@ -4,14 +4,12 @@ \item{\textbf{RQ3 : Which advantages can RAG provide with its features at expressing testing approaches?}} \end{description} -% General - % Helpful attributes (Collection, inherited, easier return with =) During the implementation phase of parameter inference, RAG was beneficial at writing codes. At writing codes for parser and back-transformation, attributes could not be applied, because the functional parts change the structure of AST, which conflicts to the definition of attribute and also in JastAdd. So, it could not be realized that attributes can be practical. But, following attributes and features of JastAdd were helpful to construct the generators and implement them: \begin{itemize} -\item As long as a returning value can be called or storable by an AST node, the syntax in RAG is reduced with an equals sign and simpler than in common programming language. Therefore, the source codes are compact. To compare how RAG could be implemented effectively, see the implementation of an attribute in this work in Listing~\ref{lst:attribute-infParam} and how this attribute is defined in common Java description in Listing~\ref{lst:java-infParam}. -\item To iterate all paths available in OpenAPI, an inherited attribute facilitated the writing effort. Paths Objects are child nodes of OpenAPI Object, so, all that should have been done was only two lines of code instead of writing an extra for loop. See Listing~\ref{lst:inherited}. +\item As long as a returning value can be called or storable by an AST node, the syntax in RAG is reduced with an equals sign and simpler than in common programming language. Therefore, the source codes are compact. To compare how RAG could be implemented effectively, see the implementation of an attribute in this work in Listing~\ref{lst:attribute-infParam} and how it is defined in common Java description in Listing~\ref{lst:java-infParam}. +\item To iterate all elements available in a node, an inherited attribute facilitated the writing effort. Paths Objects are child nodes of an OpenAPI Object, so, all that should have been done was only two lines of code instead of writing an extra for-loop. See Listing~\ref{lst:inherited}. \item Nodes described as References could refer objects with a collection attribute. Listing~\ref{lst:rago-ast} shows how attributes for such purpose look like. \end{itemize} @@ -37,6 +35,7 @@ eq OpenAPIObject.getPathsObject(int i).inferUrl(){ \end{lstlisting} % Extension +Additionally, JastAdd frameworks developed so far could improve testing methods in RAGs. Improvements with those extensions are huge advantages of RAG. ExtendJ, previously JastAddJ, is a Java compiler extended with JastAdd \cite{ekman2007jastadd}. It improves Java compliance, compilation speed, specification size and the support for non-trivial extensions compared to other extensible Java compilers. Analyses suggested in RAG \cite{fors2020principles}, e.g. Name Analysis, Type Analysis, might also be usable at parameter inference, which the name inference in this paper uses the similar pattern as Name Analysis (Lookup). Relational Reference Attribute Grammars \cite{mey2018continuous} could improve problems with references and enable to build a new test model and connect it to the OpenAPI model implemented in this paper, parallel to \cite{gotz2018jastadd}, \cite{mey2020reusing}. A recently invented framework, RagConnect, enables to connect RAG-based models to models with other basis \cite{schone2020connecting}. Since version 0.2.1, it has a new model connection with REST and might help at generating test cases, because test cases are based on requests and responses of REST APIs. All of these extensions are open topics, so, it must be worthful to discuss and research how they can be used into OpenAPI Testing to suggest tests with a better quality. \begin{comment} > To evaulate how well-suited RAGs are for API testing, we revisit the research questions... @@ -46,4 +45,14 @@ eq OpenAPIObject.getPathsObject(int i).inferUrl(){ - erweiterbarkeit von RAGs - https://programming-journal.org/2020/4/15/ - https://scholar.google.de/scholar?hl=de&as_sdt=0%2C5&q=exstensible+java+compiler+hedin&btnG= + +ExtendJ - The JastAdd Extensible Java Compiler -> enables static analysis and quality better + +relational RAGs (referenzen verbessern, verschiedene ASTs verbinden -> testbeschriebungs-modell und OAPI modell), + +RagConnect (https://jastadd.pages.st.inf.tu-dresden.de/ragconnect/use_cases/) - erweiterung für verbindung mit laufzeitumgebungen (weil ein testsystem ja auch ein laufzeitsystem ist, könnte es helfen, mit openapi requests und responses umzugehen. hier könnte der experimentelle REST support helfen): + +Design and patterns + Lookup (P1) : name analysis for parameter inference +Expected Type (P3) : type analysis for parameter inference \end{comment} \ No newline at end of file diff --git a/sections/conclusion.tex b/sections/conclusion.tex index 8713f54..79c984c 100644 --- a/sections/conclusion.tex +++ b/sections/conclusion.tex @@ -1 +1,9 @@ -\chapter{Conclusion}\label{ch:conclusion} \ No newline at end of file +\chapter{Conclusion}\label{ch:conclusion} + +In this paper, we have firstly researched which approaches to test REST APIs documented by OpenAPI are developed so far. Most of approaches are based on Fuzzing and use concepts e.g. Parameter Inference, Operation Dependency Inference, Model Transformations, Stateful Dynamic Analysis, etc. to get more sensible results than results in random testing. + +% 2 +RAGO API is a first framework that configures OpenAPIs in RAG generates random test requests of an API descriebed in OpenAPI and infers parameters by responses in the API. The OpenAPI model is validated by \textbf{974 APIs} selected in the repository of apis.guru\footref{apis-guru}. This OpenAPI model could be the basis of published testing approaches introduced in this paper or any other test methods and be extended with JastAdd frameworks released already publicly. We have presented an example of an Fuzzing approach and usage of RAGs in attributes. Especially, collection attributes were the most helpful attributes in this work, because it simplified the implementation of references of OpenAPI structures used for grammar and parameter inference. + +% 3 +Finally, we have presented several suggestions to extend this tool intended to improve basic functionalities e.g. references with \cite{mey2018continuous} and also to develop new approaches e.g. model transformation with \cite{gotz2018jastadd}, \cite{mey2020reusing}, \cite{schone2020connecting} \ No newline at end of file diff --git a/sections/feasibility.tex b/sections/feasibility.tex index bdcbfd9..53cedf9 100644 --- a/sections/feasibility.tex +++ b/sections/feasibility.tex @@ -17,4 +17,4 @@ Several of them inference parameters or operations or use test model generation. To determine an answer of this question, we have constructed a data structure for OpenAPI specification in \Cref{ch:rago} to parse OpenAPI documents and validated the parser with 98 commercial APIs, i.e. the parser taken an OpenAPI document returns the same elements except elements with empty values and sibling elements of references in an OpenAPI document. The input and output documents still semantically are same. In \Cref{ch:stm}, we have also implemented two Fuzzing approaches (Random Testing, Parameter Inference). Parameter Inference is motivated by Specification-based Approach\cite{ed2018automatic} and RESTTESTGEN\cite{viglianisi2020resttestgen}, where seperate properties of responses are collected and used as inputs in a parameter with the same schema of a response. % 3 -Several approaches are based on their own metamodels. It is not clear yet, whether such model-based approaches could be developed in RAGs. For implementing metamodel generations of approaches in RAGs, a JastAdd- and ILP-based framework \cite{gotz2018jastadd} could be helpful to analyze and solve model problems, because it gives an optimized model solution for a problem described in AST model. Particularly, the OpenAPI structure implemented in this work is much smaller than models denied in \cite{gotz2018jastadd}. So, it could produce an interesting result for model problems in OpenAPI testing. \ No newline at end of file +Several approaches are based on their own metamodels. It is not clear yet, whether such model-based approaches could be developed in RAGs. For implementing metamodel generations of approaches in RAGs, JastAdd frameworks \cite{gotz2018jastadd}, \cite{mey2020reusing} could be helpful to transform a model to another model. It is worthful to discuss and research how such frameworks developed already could be applied to those model-based approaches, because it would save an enormous amount of effort at implementing. \ No newline at end of file diff --git a/sections/introduction.tex b/sections/introduction.tex index ded930d..448b2e1 100644 --- a/sections/introduction.tex +++ b/sections/introduction.tex @@ -16,7 +16,7 @@ To sum up, following three questions are formulated as research questions: \item{\textbf{RQ3 : Which advantages can RAG provide with its features at expressing testing approaches?}} \end{description} -\textbf{RQ1} is intended to investigate which approaches might be able to implement in RAG. Corresponding literatures are introduced in \Cref{ch:curr-appr}. \\ \textbf{RQ2} focuses on the implementation the data structure and testing methods in RAG and is answered in \Cref{ch:rago} and \Cref{ch:stm}. \\ In \Cref{ch:suitability}, Results for \textbf{RQ3} shows concretely which features of RAG are usable and which benefits exist at this point. +\textbf{RQ1} is intended to investigate which approaches might be able to implement in RAG. Corresponding literatures are introduced in \Cref{ch:curr-appr}. \textbf{RQ2} focuses on the implementation the data structure and testing methods in RAG and is answered in \Cref{ch:rago} and \Cref{ch:stm}. In \Cref{ch:suitability}, Results for \textbf{RQ3} shows concretely which features of RAG are usable and which benefits exist at this point. % [1] https://swagger.io/specification/ % [2] Basu, Anirban (2015). Software Quality Assurance, Testing and Metrics. PHI Learning. ISBN 978-81-203-5068-7. \ No newline at end of file diff --git a/sections/openapi.tex b/sections/openapi.tex index 639d4b5..dca9a67 100644 --- a/sections/openapi.tex +++ b/sections/openapi.tex @@ -9,7 +9,7 @@ OpenAPI specification does not hold on strict definitions and has a tree-shaped This specification is relevant to automated testing of REST APIs, because it enables black-box testing. There are already many interesting approaches \cite{atlidakis2019restler}, \cite{ed2018automatic}, \cite{karlsson2020quickrest}, \cite{martin2020restest}, \cite{viglianisi2020resttestgen}, more concrete explanations to separate approaches are in \cref{ch:curr-appr}. \\ Black-box testing needs the specification of the REST API (in our case, OpenAPI specification) and generates test cases automatically. OpenAPI specifications are defined semi-formal, so test generations could generate unrealistic or invalid inputs. Nonetheleoss it is a meaningful way to test APIs automatically, because it does not require access to the source code and is available for every API regardless of in which programming language it is implemented or whether it is locally or remotely deployed \cite{arcuri2019restful}. \\ -\begin{lstlisting}[style=unboxed, caption={Example OpenAPI}, label={lst:openapi}] +\begin{lstlisting}[language=json, caption={Example OpenAPI}, label={lst:openapi}] { "openapi" : "3.0.0", "info" : { diff --git a/sections/rag.tex b/sections/rag.tex index f4c79ea..38bbcb0 100644 --- a/sections/rag.tex +++ b/sections/rag.tex @@ -21,7 +21,7 @@ Such features of RAG represent advantages over AG, largely in efficiency. It is \begin{figure} \centering -\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{ast} +\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{astimage.png} \caption{Example AST, motivated by \cite{hedin2009introductory}}\label{fig:ast} \end{figure} @@ -45,8 +45,6 @@ DivExp:BinExp ; MinusExp:BinExp ; \end{lstlisting} -\newpage - \begin{lstlisting}[language=JRAG,label={lst:example-attributes},caption={Example of synthesized attributes}] aspect Printing{ syn String ASTNode.print(); diff --git a/sections/ragoGram.tex b/sections/ragoGram.tex index 691d2e0..70362e1 100644 --- a/sections/ragoGram.tex +++ b/sections/ragoGram.tex @@ -31,6 +31,25 @@ eq ParameterReference.parameterObject() { During transferring the structure from OpenAPI to RAG, several properties of JastAdd were detectable: \begin{description} -\item JastAdd does not support any map structure. So, nodes derived from maps in OpenAPI must be configured in tuples (List of a named tuple containing a key and a value). -\item Extensions which are properties of an object class in OpenAPI are also defined in nodes. -\end{description} \ No newline at end of file +\item \textbf{JastAdd does not support any map structure. So, nodes derived from maps in OpenAPI must be configured in tuples (List of a named tuple containing a key and a value).} +\end{description} + +For instance, elements of Components Object are defined as maps\footnote{\url{https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.0.md\#componentsObject}}. +JastAdd has only AST classes: ASTNode, List and Opt. This problem is solved with construction of a node saving two child nodes in itself. See an example in Listing~\ref{lst:grammar-one} + +\begin{lstlisting}[language=AST, label={lst:grammar-one}, caption={Solution of Map Problem}] +ComponentsObject ::= SchemaTuple* ResponseTuple* ... ; +SchemaTuple ::= <Key> SchemaOb; +ResponseTuple ::= <Key> ResponseOb; +\end{lstlisting} + +\begin{description} +\item \textbf{Extensions which are properties of an object class in OpenAPI are also defined in nodes.} +\end{description} + +Extensions with unfixed name and value in Objects of OpenAPI are also solved with such tuples explained in the previous solution. + +\begin{lstlisting}[language=AST, label={lst:grammar-two}, caption={Solution of Extension}] +ResponseObject : ResponseOb ::= <Description> ... Extension*; +Extension ::= <Key> <Value:Object>; +\end{lstlisting} \ No newline at end of file diff --git a/sections/ragoProcess.tex b/sections/ragoProcess.tex index d34ca92..83d1548 100644 --- a/sections/ragoProcess.tex +++ b/sections/ragoProcess.tex @@ -13,8 +13,6 @@ Before working with attribute definitions, an input specification in JSON or YAM %Parse Java -> RAG The next step of processing this framework is transferring parsed objects in java into AST nodes. This step is done with attribute definitions in jrag file. A small definition example of Parameter Object is in Listing~\ref{lst:parser}. - -\newpage \begin{lstlisting}[language=JRAG,label={lst:parser},caption={Parser for Parameter Object}] { ... diff --git a/sections/ragoTest.tex b/sections/ragoTest.tex index d3c4091..908e05d 100644 --- a/sections/ragoTest.tex +++ b/sections/ragoTest.tex @@ -1,7 +1,7 @@ \section{Validation} \label{sec:ragotest} % General -For correct (re-)constructions, objects after the processing phase must be the same before. In that sense, a generated JSON or YAML must be equivalent to the given OpenAPI document. Thankfully, there are several practical libraries to compare two JSONs (JsonNode, JsonDiff, JsonPath) and conditions for the assertion were uncomplicated. As a result, we have validated the functionality of the structure transfer, while 100 APIs from apis.guru\footnote{\url{https://apis.guru/}} are constructed in RAG and reconstructed in openapi4j. +For correct (re-)constructions, objects after the processing phase must be the same before. In that sense, a generated JSON or YAML must be equivalent to the given OpenAPI document. Thankfully, there are several practical libraries to compare two JSONs (JsonNode, JsonDiff, JsonPath) and conditions for the assertion were uncomplicated. % Differences In the validation, differences with empty values and differences in Reference Objects are excluded. After the observation of OpenAPI documents, we have noticed that every author has an individual implementing behavior (i.e. description parts are always initialized in some APIs or nodes with empty values do not exist in others). Sibling elements of references do not provide semantical differences. So, it was not sensible to generate strictly equivalent values\footnote{\url{https://swagger.io/docs/specification/using-ref/}}. Its implementation is shown in Listing~\ref{lst:validation}. @@ -27,5 +27,8 @@ if (diff.size() != 0) { Firstly, it takes a JSON node which is expected after processing phase and an other node which is actually created as inputs. A path shows only which file is concerned. Then, nodes are compared with JsonDiff. It returns an ArrayNode, "diff" describing which differences they have and where the differences have appeared. Unfortunately, it does not have a filter with empty values. So, the validation method tries to get a value of a path in "diff" and checks if it is empty. The differences with empty values are removed from this ArrayNode. Afterwards, it executes an assertion with a text comparison, if "diff" has an element. A text comparison gives a concreter but bigger overview than JsonDiff. As described in the comment, it is not necessary to verify nodes twice. +% Result +As a result, we have validated the functionality of the structure transfer, while \textbf{974 APIs} from the repository of apis.guru\footnote{\url{https://github.com/APIs-guru/openapi-directory}\label{apis-guru}} are constructed in RAG and reconstructed in openapi4j. APIs involving validation or null pointer errors at openapi4j were excluded. This significant amount of validations presents that this grammar parses and transforms OpenAPI documents which are reliably semantically equivalent to their inputs. + % ^{3} : api.guru % ^{4} : https://swagger.io/docs/specification/using-ref/ \ No newline at end of file diff --git a/sections/relatedwork.tex b/sections/relatedwork.tex index 6195bff..53d224c 100644 --- a/sections/relatedwork.tex +++ b/sections/relatedwork.tex @@ -7,4 +7,5 @@ There are already many approaches suggesting to test REST APIs with OpenAPI spec \input{sections/propBasedAppr} \input{sections/ConstBasedAppr} \input{sections/ODGAppr} -\input{sections/restler} \ No newline at end of file +\input{sections/restler} +\input{sections/summary} \ No newline at end of file diff --git a/sections/restapi.tex b/sections/restapi.tex index 7a6a084..56d0dfb 100644 --- a/sections/restapi.tex +++ b/sections/restapi.tex @@ -7,12 +7,12 @@ The concept of REST has been proposed by Roy Fielding in 2000 \cite{fielding2000 It offers constraints to increase simplicity, performance, visibility, modifiability, portability and reliability of APIs. \\ Constraints defined in REST are following: \begin{description} -\item Client-Server: API must be a connection in a client-server architecture. -\item Stateless: Every request must be stateless (i.e. independent of other requests). -\item Cache: Data in API must be cacheable. -\item Layered System: Several servers are able to use in one API. -\item Code on Demand: Responses might be an executable code (optional). -\item Uniform Interface: API holds on four additional constraints to be consistent +\item \textbf{Client-Server}: API must be a connection in a client-server architecture. +\item \textbf{Stateless}: Every request must be stateless (i.e. independent of other requests). +\item \textbf{Cache}: Data in API must be cacheable. +\item \textbf{Layered System}: Several servers are able to use in one API. +\item \textbf{Code on Demand}: Responses might be an executable code (optional). +\item \textbf{Uniform Interface}: API holds on four additional constraints to be consistent \begin{itemize} \item Resources in requests are identified by URI \item Client should hold the representation of a resource that has enough information to modify or delete the resource. @@ -25,25 +25,46 @@ Constraints defined in REST are following: With this set of constraints system resources are characterized by URIs, sent as requests and modified with CRUD operations (Create, Read, Update, Delete), that are mapped to the HTTP methods (POST, GET, PUT, DELETE). Additionally, URIs, header and body objects are modified by parameters (Query, Path, Body, Header, Form). To change URIs and call an operation with variables, parameters in Query and Path are used. \\ An example for a web service with REST API might be a web service of a pet store. Example operations for this REST API could be: \\ \begin{description} -\item GET /pets (returns all pet information) -\item GET /pets/findByStatus?k1=v1\&k2=v2 (returns information of users with Query parameters k1 = v1 and k2 = v2 ) -\item GET /users/\{id\} (returns information of an user with the given Path parameter, id) -\item POST /users (creates a new user) -\item PUT /users/\{id\} (updates information of an user with the given Path parameter, id) -\item DELETE /users/\{id\} (removes an user with the given Path parameter, id) +\item \lstinline[{language=GET}]|GET /pets| \\ (returns all pet information) +\item \lstinline[{language=GET}]|GET /pets/findByStatus?k1=v1&k2=v2| \\ (returns information of users with Query parameters k1 = v1 and k2 = v2 ) +\item \lstinline[{language=GET}]|GET /users/{id}| \\ (returns information of an user with the given Path parameter, id) +\item \lstinline[{language=POST}]|POST /users| \\ (creates a new user) +\item \lstinline[{language=PUT}]|PUT /users/{id}| \\ (updates information of an user with the given Path parameter, id) +\item \lstinline[{language=DELETE}]|DELETE /users/{id}| \\ (removes an user with the given Path parameter, id) \end{description} %Process -When a client request is made via a REST API, it transmits a representation of the resource status to the client or endpoint. \\ This representation or information is provided in mostly JSON or XML. JSON is the most popular programming language because it is language-agnostic despite its name and can be read by both humans and machines. \\ +When a client request is made via a REST API, it transmits a representation of the resource status to the client or endpoint. \\ This representation or information is provided in mostly JSON or XML. An example of a request in pet store we used for researches is following: + +\begin{lstlisting}[style=rest, caption={Example of Request}, label={lst:exp-request}] +@POST@ ~/v2/pet~ @HTTP/1.1@ +<Host:> ABCDpetstore.swagger.ioABCD +<Accept:> ABCDapplication/jsonABCD +<Content-Type:> ABCDapplication/jsonABCD +<Content-Length:> ABCD215ABCD + +{ "id": 0, ... } +\end{lstlisting} + After a client sends a HTTP request, a corresponding server is going to send back a HTTP response with headers and optionally a payload (data pack for a GET request). Additionally, a numeric status code will be a part of this response as well. Staus codes are specified in one of five categories: \begin{description} -\item 1xx : Informational provisional responses -\item 2xx : Request is successfully processed -\item 3xx : Request requires more information to complete the request -\item 4xx : Client error (invalid request, non-existent resource, client not authenticated or authorized) -\item 5xx : Server error (Server can not supply a valid response) +\item \textbf{1xx} : Informational provisional responses +\item \textbf{2xx} : Request is successfully processed +\item \textbf{3xx} : Request requires more information to complete the request +\item \textbf{4xx} : Client error (invalid request, non-existent resource, client not authenticated or authorized) +\item \textbf{5xx} : Server error (Server can not supply a valid response) \end{description} -HTTP status code is an important component to this work, because it provides to test REST APIs and find out errors (e.g. requests expected as valid return 4xx status code or requests expected as invalid return 2xx status code). +HTTP status code is an important component to this work, because it provides to test REST APIs and find out errors (e.g. requests expected as valid return 4xx status code or requests expected as invalid return 2xx status code). A response by the request shown above is in Listing~\ref{lst:exp-respnse}. + +\begin{lstlisting}[style=rest, caption={Example of Response}, label={lst:exp-respnse}] +@HTTP/1.1@ V200V OK +<Date>: ABCDSat, 1 Jan 2000 00:00:00 GMTABCD +<Content-Type>: ABCDapplication/jsonABCD +<Connection>: ABCDkeep-aliveABCD +<Server>: ABCD...ABCD + +{ "id": 0, ... } +\end{lstlisting} % [1] Roy Fielding in 2000 \ No newline at end of file diff --git a/sections/stm1.tex b/sections/stm1.tex index 5d2f5f0..e48e9ea 100644 --- a/sections/stm1.tex +++ b/sections/stm1.tex @@ -1,13 +1,13 @@ \section{Random Testing} \label{sec:stm1} -OpenAPI defines a parameter in an operation in four types, Query, Path, Header and Cookie\footnote{\url{https://swagger.io/docs/specification/describing-parameters}}. In this work, only Query and Path parameters are considered to research the functionality of the Fuzzing prototype in RAG. These parameters are clearly describable in String values and also comfortably testable, because they target only variable URIs. \\ -For the experiments, the OpenAPI document of a Pet Store is mainly used\footnote{\url{https://petstore.swagger.io}}. Additionally, only GET and POST operations are tested to research basic functionality firstly. +OpenAPI defines a parameter in an operation in four types, Path, Query, Header and Cookie\footnote{\url{https://swagger.io/docs/specification/describing-parameters}}. In this work, only Path and Query parameters are considered to research the functionality of the Fuzzing prototype in RAG. These parameters are clearly describable in String values and also comfortably testable, because they target only variable URIs. \\ +For the experiments, the OpenAPI document of a Pet Store\footnote{\url{https://petstore.swagger.io}\label{petstore}} is mainly used. Additionally, only GET and POST operations are tested to research basic functionality firstly. % Process The main code at random testing is following: \begin{lstlisting}[language=JRAG,label={lst:random-testing},caption={Random Testing}] -String Uri; +String Uri = getServerUrl(); for (ParameterOb o : operationObject.getParameterObs()) { ParameterObject p = o.parameterObject(); if (p.getIn().equals("path")) @@ -17,11 +17,17 @@ for (ParameterOb o : operationObject.getParameterObs()) { } connect(Uri); \end{lstlisting} -Initially, the generator for random testing computes a list of parameter objects stored in RAG and iterates all elements in this list (Line 2). Subsequently, each iteration examines in which type the parameter is and produces a random URI. This URI is saved in a String variable (Line 4-7). Finally, the test generator sends a request -with the generated URI (Line 9). + +\begin{lstlisting}[language=JRAG, label={lst:rt-attribute}, caption={Attribute for Random Parameters}] +syn String ParameterObject.randomPathParameter(String uri); // Generate random Path and save in URI + +syn String ParameterObject.randomQueryParameter(String uri); // Generate random Query and save in URI +\end{lstlisting} +Initially, the generator for random testing computes a list of parameter objects stored in RAG and iterates all elements in this list (Line 2, Listing~\ref{lst:random-testing}). Subsequently, each iteration examines in which type the parameter is and produces a random URI with synthesized attributes (Listing~\ref{lst:rt-attribute}). This URI is saved in a String variable (Line 4-7, Listing~\ref{lst:random-testing}). Finally, the test generator sends a request +with the generated URI (Line 9, Listing~\ref{lst:random-testing}). % Result -Besides operations with requirements of request bodies, results of this implementation made possible to observe that parameters based on the specification were successfully randomized and they produced documented status codes in their operations. For future work, constraints of schema (minItems, maxItems, minLengths, maxLengths, etc.) can be completely extended. In this approach, the generator considers only the existence of enums. +Besides operations with requirements of request bodies, \textbf{results of this implementation made possible to observe that parameters were successfully randomized and they produced documented status codes in Pet store\footref{petstore} (200, 400, 404, 405 status codes).} For future work, constraints of schema (minItems, maxItems, minLengths, maxLengths, etc.) can be completely extended. In this approach, the generator considers only the existence of enums. % ^5 : https://swagger.io/docs/specification/describing-parameters/ % ^6 : https://petstore.swagger.io \ No newline at end of file diff --git a/sections/stm2.tex b/sections/stm2.tex index 1268f19..9b8e105 100644 --- a/sections/stm2.tex +++ b/sections/stm2.tex @@ -3,11 +3,10 @@ Random testing is a one of easiest way to test API and can be useful in some sit % General To solve this problem, most of REST API testing approaches use a stateful process, because it enables to analyze properties of APIs and infer inputs which are more appropriate than random inputs. There are several suggestions in \Cref{ch:curr-appr}, this framework investigates a inference of parameters with operation dependency motivated by Specification-based Approach \cite{ed2018automatic} and RESTTESTGEN \cite{viglianisi2020resttestgen}. Generally, it collects all responses and inferences parameters contributing the same schema of a succesful response. If there is a schema set in a request and a response, parameters of them are inferred by three strategies: - \begin{itemize} -\item Case insensitive -\item Id completion in a field name (e.g. if a property is named with "id", it gets an additional field name available in the specification) -\item Stemming algorithm (e.g. pet and pets are considered as a same value.) +\item \textbf{Case insensitive} +\item \textbf{Id completion} in a field name (e.g. if a property is named with "id", it gets an additional field name available in the specification) +\item \textbf{Stemming algorithm} (e.g. pet and pets are considered as a same value.) \end{itemize} % Process @@ -39,7 +38,6 @@ for (String path : paths) \end{lstlisting} \begin{lstlisting}[language=JRAG,label={lst:parameter-dict},caption={Attribute writeDictionary}] - syn String OperationObject.writeDictionary(SchemaOb schema, String resp) { ... return inferredParameter; @@ -66,7 +64,7 @@ syn List<String> ParameterObject.addinfPathParameters(String pathRef,List<String } \end{lstlisting} -Before it starts with the parameter inference, the random testing generator of \Cref{sec:stm1} is executed first (Line 1, Listing~\ref{lst:parameter-inference}). During this execution, the status code of a response is checked if it is a successful response with 200 status code (Line 4, Listing~\ref{lst:parameter-inference}). Afterwards, the response schema of returned values is also checked. If it is in type array, the function "writeDictionary" is iterated, otherwise it only executed once (Listing~\ref{lst:parameter-dict}). The attribute "writeDictionary" saves the returend values of a successful response in seperate properties and write them in a dictionary (e.g. properties "id" and "name" are seperately stored with their value in the dictionary). If the schema of a response provides a reference of a schema object, the field name gets a name of a reference as prefix. Subsequently, this implementation does the similar way of execution in random testing at the generation phase. Firstly, it iterates all parameter objects (Line 14, Listing~\ref{lst:parameter-inference}) and examines whether the parameter type is Path or Query (Line 15-18, Listing~\ref{lst:parameter-inference}). Both attributes return URIs with parameter values inferred by the dictionary and case insensitive comparison (Line 4, Listing~\ref{lst:parameter-case}). Generated URIs are put in a list. Lastly, the generator attribute sends requests with the URIs and starts with observation (Line 20-21, Listing~\ref{lst:parameter-inference}). +Before it starts with the parameter inference, random tests of \Cref{sec:stm1} are generated first (Line 1, Listing~\ref{lst:parameter-inference}). During this execution, the status code of a response is checked if it is a successful response with 200 status code (Line 4, Listing~\ref{lst:parameter-inference}). Afterwards, the response schema of returned values is also checked. If it is in type array, the function "writeDictionary" is iterated, otherwise it only executed once (Listing~\ref{lst:parameter-dict}). The attribute "writeDictionary" saves the returend values of a successful response in seperate properties and write them in a dictionary (e.g. properties "id" and "name" are seperately stored with their value in the dictionary). If the schema of a response provides a reference of a schema object, the field name gets a name of a reference as prefix. Subsequently, this implementation does the similar way of execution in random testing at the generation phase. Firstly, it iterates all parameter objects (Line 14, Listing~\ref{lst:parameter-inference}) and examines whether the parameter type is Path or Query (Line 15-18, Listing~\ref{lst:parameter-inference}). Both attributes return URIs with parameter values inferred by the dictionary and case insensitive comparison (Line 4, Listing~\ref{lst:parameter-case}). Generated URIs are put in a list. Lastly, the generator attribute sends requests with the URIs and starts with observation (Line 20-21, Listing~\ref{lst:parameter-inference}). % Result -As results, the test case generator with parameter inference implemented in this framework could create maximum over 300 acceptable URIs for the parameter petId in the selected API, pet store, at the operation getPetById. It generated also numerous requests denied by the server. After the observation of several execution iterations, it can be assumed that the API with this operation sends 200 or 404 status codes randomly or according to some rules, because a same URI provided status codes in that way. \ No newline at end of file +As results, \textbf{the test case generator with parameter inference implemented in this framework could create maximum over 300 acceptable URIs for the parameter petId in the selected API, pet store\footref{petstore}, at the operation getPetById.} It generated also numerous requests denied by the server. After the observation of several execution iterations, it can be assumed that the API with this operation sends 200 or 404 status codes randomly or according to some rules, because a same URI provided status codes in that way. \ No newline at end of file diff --git a/sections/summary.tex b/sections/summary.tex new file mode 100644 index 0000000..2f3e57f --- /dev/null +++ b/sections/summary.tex @@ -0,0 +1,46 @@ +\section{Summary} \label{sec:sum} + +\newcolumntype{Y}{>{\hspace{0pt}}X} +\newcolumntype{D}{>{\raggedright}Y} +\newcolumntype{E}{>{\centering}Y} +\newcolumntype{F}{>{\raggedleft}Y} + +\begin{table} +\fontsize{7}{9}\selectfont +\begin{tabularx}{\textwidth}{@{}D|E|E|E|E@{}} +\toprule + & \textbf{Type of Errors} & \textbf{Type of Process} & \textbf{Type of Inference} & \textbf{Results} \tabularnewline\midrule +Specification-based Approach & Nominal Test Cases : \textbf{4xx/500 Status Codes, Schema Errors} \newline Faulty Test Cases : \textbf{500, 200 Status Codes} & +Stateful & +Parameter Inference & +Bugs found in 37 experimented APIs of 91 +\tabularnewline \hline +Property-based Approach & +\textbf{500 Status Codes} & +Stateless/Stateful & +Inference of Failure Area & +In Average, 9.84\% Probability of Error Occurrence in GitLab +\tabularnewline \hline +Constraint-based Approach & +\textbf{5XX Status Codes, OpenAPI Schema Errors, 2XX Related to Parameters, 2XX Related to Parameter Dependencies, 4XX Status Codes} & +Stateful & +Inference of Parameter Dependency by IDLReasoner\footnote{\url{https://github.com/isa-group/IDLReasoner}} & +Over 2000 Bugs found in 6 commercial APIs +\tabularnewline \hline +Operation Dependency Graph Approach & +Nominal Cases : \textbf{5xx Status Codes or Validation Error of Response} \newline Error Cases : \textbf{2xx or 5xx Status Codes} & +Stateful & +Inference of Operation Dependency & +Errors found in 87 selected APIs. +\tabularnewline \hline +Stateful REST API Fuzzer & +\textbf{500 Status Codes} & +Stateful & +Inference of Request Dependency & +28 Bugs in GitLab and several Bugs in Microsoft Azure and Office365 cloud services +\tabularnewline\bottomrule +\end{tabularx} +\caption{Overview of Approaches in Table}\label{tab:sum} +\end{table} + +In this work, we found that most current testing approaches using OpenAPI are based on Fuzzing. HTTP status codes were mostly the basis of test oracles, Specification-based, Constraint-based and Operation Dependency Graph Approaches collect also schema validation errors. All of the approaches considered 500 status codes as bugs and several of them expects only 200 status codes by valid test cases and 4xx status codes by error test cases. To result more precisely, they all suggest to inference data of a server or dependency between requests or requests and responses. This usage of inferences requires the stateful process which means requests depend on previous sequences (i.e. requests, responses). The simplified explanantion of current researches is in \Cref{tab:sum} \ No newline at end of file diff --git a/sections/testing.tex b/sections/testing.tex index fcb9845..ed872e9 100644 --- a/sections/testing.tex +++ b/sections/testing.tex @@ -1,12 +1,12 @@ \section{Software Testing} -To understand what this paper is about, it is required to know what is software testing. Software testing is a method to see whether a software product works with its expected functionality and is defect free. The problem without testing is that bugs are expensive or also critical in terms of security. Solving this problem brings the software huge advantages (e.g. effectiveness, stronger security, robust software quality). \\ +Software testing is a method to see whether a software product works with its expected functionality and is defect free. The problem without testing is that bugs are expensive or also critical in terms of security. Solving this problem brings the software huge advantages (e.g. effectiveness, stronger security, robust software quality). \\ There are several classifications in software testing. One classification is related to goals of testing: testing if a software does not have critical bugs (Functional Testing), testing if a software is effective enough (Non-Functional Testing) and modifying an existent software product to correct appeared bugs (Regression Testing) \cite{anirban2015software}. If a software product is implemented small enough, it is commonly better to test manually and a tester individually defines test cases. But, in most industrial softwares, like REST APIs, it is necessary to automate tests, because the products are too big and manual testing is too difficult at this point. %2 Afterwards, there is a box approach to divide software testing into three categories, black and white Box Testing \cite{saleh2009software}. Black box tests are developed without knowledge of the internal structure of the system to be tested, but on the basis of development documents. In practice, black box tests are usually not processed by developers of a target software, but by technically oriented testers or by special test departments or test teams. White box tests are developed on the basis of knowledge about the internal structure of the component to be tested. \\ -This paper focuses on automated testing with a black box approach. In section 2.3 the selection of the approach is explained. +This paper focuses on automated testing with a black box approach. In \Cref{sec:openapi} the selection of the approach is explained. % [1] Saleh, K.A. (2009). Software Engineering. J. Ross Publishing. pp. 224–41. diff --git a/thesis.tex b/thesis.tex index f7fa1b3..48c82f3 100644 --- a/thesis.tex +++ b/thesis.tex @@ -2,7 +2,7 @@ %\RequirePackage[ngerman=ngerman-x-latest]{hyphsubst} % change to english for english theses -\documentclass[english,BCOR=1.5cm,twoside]{tudscrreprt} +\documentclass[english,BCOR=1.5cm,twoside,xcolor={dvipsnames}]{tudscrreprt} \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} @@ -47,7 +47,6 @@ \usepackage{csquotes} - \usepackage{caption} \captionsetup{font=sf,labelfont=bf,labelsep=space} \usepackage{floatrow} -- GitLab