Added task 2

This commit is contained in:
Michael Chen 2022-06-15 23:31:28 +02:00
parent ffea41af73
commit 52a777598a
No known key found for this signature in database
GPG Key ID: 1CBC7AA5671437BB

View File

@ -126,42 +126,85 @@
\begin{enumerate}[topsep=0pt, leftmargin=*] \begin{enumerate}[topsep=0pt, leftmargin=*]
\item Name and briefly describe the specific lines that (directly or indirectly) influence the boolean results of the predicates and clauses in line \textit{10}, \textit{12}, \textit{17}, \textit{20}, \textit{22}, \textit{30}, and \textit{32}. \item Name and briefly describe the specific lines that (directly or indirectly) influence the boolean results of the predicates and clauses in line \textit{10}, \textit{12}, \textit{17}, \textit{20}, \textit{22}, \textit{30}, and \textit{32}.
\begin{answer} \begin{answer}
[TODO: Add answer here] In this table I listed all dependencies the predicates.
\begin{center}
\begin{tabular}{r|c|c}
Line & Directly & Indirectly \\ \hline \hline
\textit{10} & \texttt{s} \\
\textit{12} & \texttt{start}, \texttt{end}, \texttt{s} \\
\textit{17} & \texttt{len} & \texttt{start}, \texttt{end} \\
\textit{20} & \texttt{value}, \texttt{newCount} & \texttt{count}, \texttt{len}, (\texttt{start}, \texttt{end}) \\
\textit{22} & \texttt{i}, \texttt{end} & \texttt{start} \\
\textit{30} & \texttt{newCapacity} & \texttt{value} \\
\textit{32} & \texttt{minimumCapacity}, \texttt{newCapacity} & \texttt{value}
\end{tabular}
\end{center}
\end{answer} \end{answer}
\item To which extent are the predicates influenced by internal states? Which conclusions do you draw for the application of logic coverage criteria to source code in general? \item To which extent are the predicates influenced by internal states? Which conclusions do you draw for the application of logic coverage criteria to source code in general?
\begin{answer} \begin{answer}
[TODO: Add answer here] The predicates in this examples are not influenced by the internal state of the object that much, except for the buffer size check of the character array. The internal state of the function influences the variables a lot, because the input parameters are used in operations that declare new internal variables. Finding variables for logic coverage from source code is a rather easy task, however finding input parameters to cover the test requirements is a very difficult task and sometimes not even possible.
\end{answer} \end{answer}
\item Provide a set of tests that cover the following predicates and clauses: \item Provide a set of tests that cover the following predicates and clauses:
\begin{enumerate} \begin{enumerate}
\item \texttt{(start < 0) || (end < 0) || (start > end) || (end > s.length())} (l.12) based on the \textit{Correlated Active Clause Coverage} (CACC) criterion \item \texttt{(start < 0) || (end < 0) || (start > end) || (end > s.length())} (l.12) based on the \textit{Correlated Active Clause Coverage} (CACC) criterion
\begin{answer} \begin{answer}
[TODO: Add answer here]
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip] \begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
/* Add code here */ @Test
public void caccBoundCheck() {
String s = "01234";
// base case
new StringBuilder(4).append(s, 0, s.length());
// start < 0
new StringBuilder(4).append(s, -1, s.length());
// start > end
new StringBuilder(4).append(s, 6, s.length());
// end > s.length()
new StringBuilder(4).append(s, 0, s.length() + 1);
// end < 0
new StringBuilder(4).append(s, -2, -1);
}
\end{lstlisting} \end{lstlisting}
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java} % or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
\end{answer} \end{answer}
\item \texttt{newCount > value.length} (l.20) for an evaluation to both \textit{true} and \textit{false} \item \texttt{newCount > value.length} (l.20) for an evaluation to both \textit{true} and \textit{false}
\begin{answer} \begin{answer}
[TODO: Add answer here] This predicate determines if the buffer needs to be expanded. To achieve this we can input more and less than the current capacity.
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip] \begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
/* Add code here */ @Test
public void requireExpansion() {
String s = "01234";
// Predicate is true, so buffer will expand
new StringBuilder(4).append(s, 0, s.length());
}
@Test
public void requireExpansion() {
String s = "01234";
// Predicate is false, so buffer will not expand
new StringBuilder(5).append(s, 0, s.length());
}
\end{lstlisting} \end{lstlisting}
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java} % or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
\end{answer} \end{answer}
\item \texttt{newCapacity < 0} (l.30) and \texttt{minimumCapacity > newCapacity} (l.32) for an evaluation to \textit{true}. Which requirement(s) does \texttt{value} have to meet so that \texttt{newCapacity < 0} will be satisfied? \item \texttt{newCapacity < 0} (l.30) and \texttt{minimumCapacity > newCapacity} (l.32) for an evaluation to \textit{true}. Which requirement(s) does \texttt{value} have to meet so that \texttt{newCapacity < 0} will be satisfied?
\begin{answer} \begin{answer}
[TODO: Add answer here] In order for \texttt{newCapacity < 0} to be satisfied, the monotonously increasing value of \texttt{value.length} (buffer size) has to overflow the integer size and become negative. The lowest value that could happen would be $2^30 - 1 = 1073741823$, which would allocate more than 1 gigabyte of memory for the buffer.
\begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip] \begin{lstlisting}[language=Java,belowskip=-0.8\baselineskip]
/* Add code here */ @Test
public void newCapOverflow() {
new StringBuilder(1073741823).expandCapacity(0);
}
@Test
public void lowerThanMin() {
new StringBuilder(2).expandCapacity(7);
}
\end{lstlisting} \end{lstlisting}
% or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java} % or: \lstinputlisting[language=Java,belowskip=-0.8\baselineskip]{file_name.java}
\end{answer} \end{answer}