Szente, E. (2014). Efficient distributed computation of web services API coverage metrics [Diploma Thesis, Technische Universität Wien]. reposiTUm. http://hdl.handle.net/20.500.12708/78447
Schnittstellen-Testabdeckung; Software Testen; Wertebereich-Partitionierung; Web Services; XML Schema; SOAP; WSDL; NoSQL; BigData
de
API Test Coverage; Software Testing; Domain Partitioning; Web Services; XML Schema; SOAP; WSDL; NoSQL; BigData
en
Abstract:
In der Softwareentwicklung ist die Testabdeckung ein wertvolles Instrument zur Qualitätssicherung. Die Abdeckung ist das Ausmaß, in welchem ein System getestet oder benutzt wurde. Softwaretests zielen darauf ab eine möglichst hohe Abdeckung zu erreichen und so ein hohes Maß an Qualität sicherzustellen. Im Gegensatz zu Whitebox Verfahren, bei denen die innere Struktur des Systems bekannt ist, und sich Aussagen über die Abdeckung von Anweisungen und Ausführungspfaden treffen lassen, steht bei Blackbox Verfahren die Prüfung des spezifizierten Ein- und Ausgabeverhaltens im Mittelpunkt. Die vorliegende Arbeit befasst sich mit der Entwicklung eines Frameworks zur Analyse der Abdeckung der Schnittstellen von Web Services. Die Abdeckung einer Schnittstelle ist das Verhältnis bisheriger Aufrufe zu der Anzahl theoretisch möglicher unterschiedlicher Aufrufe der Schnittstelle. Aufgrund der großen Anzahl möglicher Eingabeparameter ist eine vollständige Abdeckung nicht-trivialer Schnittstellen praktisch unmöglich, daher werden über die Domäne aller möglichen Eingangsdaten Aquivalenzklassen bzw. Partitionen gebildet. Im Fall von Web Services ist die Domäne aller möglichen Eingangsdaten die Menge aller zulässigen XML Nachrichten die durch die XSD in der WSDL definiert werden. Im Rahmen dieser Arbeit wird ein Ansatz vorgestellt, der die Menge aller möglichen Nachrichten partitioniert und einzelne Nachrichten in Äquivalenzklassen abbildet indem eine Synopsis über jede Nachricht berechnet wird. Die Abbildung in die Äquivalenzklassen erfolgt dabei basierend auf den Werten einzelner XML Elemente und deren strukturellen Eigenschaften. Die Domäne jedes XML Schema Elementes wird paritioniert indem jedem Element benutzerdefinierte Ausdrücke zugewiesen werden, die vom System ausgewertet werden. Die Kombination der einzelnen Element Partitionen ergibt dann eine Partitionierung der Eingangsdomäne des Web Services. Um die Abdeckung von Web Service Schnittstellen zu berechnen, müssen alle (unter umständen zahlreichen) historischen Daten der bisherigen Aufrufe herangezogen werden. Im Rahmen dieser Arbeit wird eine skalierbare Architektur für das Framework entworfen, die bei einer verteilten Datenhaltung über mehrere Knoten einen Großteil der Berechnung lokal bei den Daten durchführt und die Anzahl der abgedeckten Äquivalenzklassen in einer verteilten Menge ermittelt. Für eine effiziente Implementierung wird die Eignung verschiedener NoSQL Datenbanken analysiert, wobei der Prototyp letzendlich basierend auf einer In-Memory Datagrid implementiert wird. Eine abschließende Performenaceauswertung des Prototypes zeigt, dass die Vorgehensweise bis zu einer Datenmenge von mehreren Millionen Nachrichten und auch mit zunehmender Anzahl von Knoten gut skaliert und Resultate innerhalb einiger Sekunden liefern kann.
de
Test coverage is a valuable tool for quality assurance in software development. Coverage is the degree to which a system has been tested or used. Softwaretests aim to achieve a high coverage thus ensuring a high level of quality. In contrast to whitebox approaches, where the inner structure of a system is known and statements about the coverage of instructions and execution paths can be made, black box approaches focus on a system's input output behaviour. This thesis describes concepts and the prototypical implementation of an efficient distributed API coverage computation framework for Web services. The coverage of an API is defined by the amount of distinct invocations actually performed in relation to the amount of possible distinct invocations. Due to the large amount of possible input parameters a full coverage of non-trivial APIs is infeasible. Hence equivalence classes or partitions are defined upon the domain of all possible input data. In the case of Web services the domain of all possible input data is the set of all valid XML messages defined by the XSD within the WSDL. The first contribution of this thesis is an approach to partition the set of all possible Web services messages by computing a synopsis for each message which maps the message into the corresponding equivalence class. The mapping depends on values and structural properties of individual elements in the XML message. Each element in the XSD is assigned a set of userdefined expressions which are evaluated by the system during runtime, partitioning the domain of each schema element. The combination of the individual element partitions yields a partition of the input domain of the Web service. Computing the API coverage involves processing all elements in a (potentially large) set of historical invocation data. The second contribution of this thesis is a scalable architecture for the framework, which is capable of determining the amount of covered equivalence classes (or domain partition subsets) in a set of invocation messages which is held distributed over multiple data nodes. The major share of the computing workload is carried out next to the data. For an efficient implementation the suitability of various NoSQL databases is discussed whereas the final prototype is implemented on top of an in-memory data grid. The concluding performance evaluation of the prototype proves the scalability of the approach, providing fast response times even for millions of invocation messages distributed over multiple data nodes.