Lessons learnt from using DSLs for Automated Software Testing ?· Lessons learnt from using DSLs for…

Download Lessons learnt from using DSLs for Automated Software Testing ?· Lessons learnt from using DSLs for…

Post on 10-Jun-2018

212 views

Category:

Documents

0 download

TRANSCRIPT

Lessons learnt from using DSLsfor Automated Software TestingMark Micallef, Christian Colombo{mark.micallef | christian.colombo}@um.edu.mtPEST Research LabFaculty of Information & Communication TechnologyUniversity of MaltaAbstractDomain Specific Languages (DSLs) provide a meansof unambiguously expressing concepts in a particular domain.Although they may not refer to it as such, companies buildand maintain DSLs for software testing on a day-to-day basis,especially when they define test suites using the Gherkin language.However, although the practice of specifying and automating testcases using the Gherkin language and related technologies suchas Cucumber has become mainstream, the curation of such lan-guages presents a number of challenges. In this paper we discusslessons learnt from five case studies on industry systems, twoinvolving the use of Gherkin-type syntax and another three casestudies using more rigidly defined language grammars. Initialobservations indicate that the likelihood of success of such effortsis increased if one manages to use an approach which separatesthe concerns of domain experts who curate the language, userswho write scripts with the language, and engineers who wirethe language into test automation technologies thus producingexecutable test code. We also provide some insights into desirablequalities of testing DSLs in different contexts.I. INTRODUCTIONIn her widely cited paper about the future of softwaretesting, Bertolino [1] claims that domain specific languages(DSLs) have emerged as an efficient solution towards allowingexperts within a domain to express specifications in thatdomain. She goes on to claim that success of domain-specificapproaches should be built upon and extended to the testingstage of software engineering. An intuitive place to start wouldbe to explore DSLs in the context of automated software test-ing such that languages constructed by domain experts can beleveraged to specify not only requirements but also test caseswhich validate those requirements. This ties in nicely with theindustrys ever growing appetite for automated testing. To alarge extent, the use of DSLs for specifying automated testsis already widespread in the software development industrythrough the use of Gherkin [2] a language designed toexpress test scenarios and is often referred to as the Given-When-Then notation:Given I am a userWhen I log in using valid credentialsThen I should see the welcome page2015 IEEE Eighth International Conference on Software Testing, Verifica-tion and Validation Workshops (ICSTW)10th Testing: Academic and Industrial Conference - Practice and ResearchTechniques (TAIC PART)978-1-4799-1885-0/15/$31.00 c2015 IEEEThe language provides constructs for defining a numberof scenarios which in turn consist of a number of steps, eachbeing either a precondition to the scenario (Given) followed bya stimulus to the system (When) and finally the postcondition(Then). In the software development industry, hundreds ofsuch scenarios are developed in a typical project and are usedas a vehicle for communicating specifications amongst teammembers and eventually end up being turned into automatedtesting code via technologies such as Cucumber [2]. Thelanguage is very flexible in that it only requires steps to startwith one of the given-when-then keywords whilst the rest ofthe step is specified as free text by the user of the language.Developers then write code which translates each step intointeraction with the system, thus creating an automated testsuite. In essence, the collection of phrases after a given-when-then keyword form a domain specific language as defined bywhoever is maintaining scenarios written in Gherkin.In this paper we present observations from five case studiesinvolving the use of domain specific languages. The first twocase studies consisted of working with two industry partners1and introducing Gherkin-driven test automation frameworks.Whilst the industry partners were interested in setting upautomated testing frameworks, we were mainly interested inobserving the challenges encountered when using Gherkin todevelop a domain specific language. We subsequently went onto investigate the possibility of using more rigorously definedlanguages for specifying automated tests through three casestudies: (1) Android applications, (2) eCommerce websites and(3) graphics-based games.II. BACKGROUNDThis section provides a brief background of domain specificlanguages and automated testing the two main subject areasof this paper.A. Domain Specific LanguagesFowler and Parsons define Domain Specific Languages(DSLs) as computer programming languages of limited ex-pressiveness focused on a particular domain [3]. They arechampioned as a mechanism to improve expressiveness withina domain and have been applied to a wide variety of applica-tions in software engineering.1One partner was an online gaming company whilst the other was aninternational publishing house.The literature contains numerous guidelines to guide DSLdesign [3][4][5][6][7] but if one consolidates the sources, anumber of common characteristics of a good DSL emerge.Firstly, all sources strongly argue that a DSL should ex-hibit simplicity in that it is easily understood by humansyet parseable by machines. Related to this, a DSL should,where possible, exhibit similarity to another language withwhich users are already familiar (e.g. English). This contributessignificantly to the initial acceptance and long-term adoptionof the language. Thirdly, a DSL should be highly domainspecific and parsimonious so that any notions not related to thedomain in question are omitted; yet at the same time languagedesigners should strive to make a language as complete aspossible with respect to that domain. Finally, a domain specificlanguage should ideally be extensible thus making it easy toadd features and operations to the language; and reusable inthat the same grammar can be used as the basis of a newlanguage when required.B. Automated TestingTest automation technologies can be split into two broadcategories: record-playback and scripted automation [8]. Theformer involves using recording software which observes asystem being used and then simply replaying a series of actionsback when required; whilst the latter involves someone writingcode which when executed interacts with the system under testas part of an automated test suite. In this work, we are mainlyinterested in scripted testing.There are a number of tools/APIs available which enableprogrammatic interaction with a system under test to facilitatetest scripting. The Selenium/Webdriver [9] project is an opensource endeavour which has become the de facto industrystandard for web test automation. The project provides APIbindings for a variety of programming languages and enablesdevelopers to launch and control web browsers for the purposesof automated testing. The technology interacts with a websiteunder test by querying and interacting with the browser andthe document-object model (DOM) of the website. Two relatedtechnologies which build on the Selenium/Webdriver projectare Selendroid [10] and Appium [11]; two technologies whichallow automated interaction and querying of mobile devicesusing a DOM-based querying mechanism. Finally, for systemswhich do not expose their internal representation of the userinterface, Sikuli [12] is an automated testing API which utilisesimage recognition techniques. That is to say, instead of (forexample) searching through a websites DOM looking for abutton with the text OK, Sikuli takes a screenshot of theapp and looks for an image of such a button. The technologyis slower and more brittle than the alternatives but in certainsituations, it is the only option available. We discovered thiswhen attempting to automate the testing of graphics-basedgames.Whilst automating the execution of tests is becoming moreand more popular [13], with some considering it a necessity[14], test automation efforts tend to be expensive and suscep-tible to losing steam as a project grows and evolves in waysthat makes maintaining old tests difficult. In this paper weargue that hiding the low level intricacies of test automationtechnologies within a domain specific language goes a longway towards improving the usability of the technology, mainlyFig. 1. The layered approach proposed as a guideline for developing a DSLfor software testingthrough separating the role of the domain expert who curatesthe DSL and the engineer who wires phrases of the languageinto test automation tools. This is discussed further in thefollowing section.III. GHERKIN CASE STUDIESOur initial steps on this journey consisted of two casestudies with industry partners, one in the iGaming industry andthe other was an international publishing house. We embeddeda researcher with each of the industry partners for a period ofthree months with the researcher forming part of a productdevelopment team in a test engineer role. The arrangementwas mutually beneficial in that the partners would benefit fromthe services of an embedded researcher with test automationexperience who would champion and drive the creation of anautomated testing framework, whilst the research group wasable to observe challenges which arose throughout the process.Following initial discussions, two main problems wereidentified. Firstly, whilst test automation was the primaryoutcome sought by our partners, they acknowledged that theirtesters did not necessarily have the required skills to implementautomated tests. Whilst an effort would be made to recruitexperienced technical testers, the balance of technical to non-technical testers was unlikely to ever be close to even. Thesecond problem, stated bluntly, was that delivery deadlineswere a reality and sometimes test DSL development and testautomation would take a back seat whilst a product was pushedout of the door on time.Based on these challenges, we proposed a layered approach(see Figure 1) to enable domain experts to curate a languageof notions describing their particular domain. The languagewould subsequently be used to express specifications and testsfor the domain with the hope of making the testing processquicker. These tests can be processed by a language compileror interpreter and translated into executable code which formspart of an automated testing framework enabling testers lackingautomation skill to easily automate testing. The frameworkwas envisaged to be a collection of tools which automate(1) interaction with, and (2) querying of the state of, thesystem under test. Such a layered approach also enables amulti-role approach to test automation, in that different teammembers can participate in the process depending on the level.Therefore, a product owner or business analyst would be ableto define test scenarios at the top level, non-technical testanalysts can read these scenarios and carry out manual testingwhilst software developers or test engineers can pick througha backlog of such scenarios and wire them in to the automatedtesting framework over time. All this is carried out with thelanguage (and test scenarios written in the language) actingas the glue throughout. The multi-role features of the layeredapproach would address the challenge of not having a full-time supply of technical testers, since the few available couldbe shared across product teams and take on the role of pickingthrough language definitions, gaining an understanding ofexpressed notions by talking to other members of the team andsubsequently simply wiring language constructs into the testautomation framework. In the meantime, non-technical testerscould take on the role of manually executing unimplementedtests thus addressing the problem of test automation workcausing delays and missed deadlines.A. Lessons LearntThe two case studies provided us with a number ofinteresting observations. The layered approach worked inthat it delivered an automated test suite in a few weeks andits development did not seem to affect team productivity.The process of creating a DSL as part of the test suite alsoseemed to improve communication amongst team membersas this common language developed and started being used.Although these positive outcomes dominated the first fewweeks of the case studies, the cracks started to show as thenumber of test scenarios began to grow. Due to the fact thatCucumber provides a very loose grammar, the language greworganically with people adding their own versions of notionsas they went along. This resulted in substantial duplicationas people would express the same notions in differentways. For example, Given I log in to the system,Given I log on to the system, and Given Ilog in correctly, all express the same notion andresulting user actions. Similarly some team memberscondensed the sequences of actions into one whilstothers used the longer atomic format. For example,Given I log in and purchase a product couldalso be expressed as:Given I log inAnd I search for a productAnd I select the first item in the listAnd I add the item to my shopping cartDepending on who was writing a particular test scenario,the same notion could be expressed at different levels ofabstraction. Besides making things harder on technical testerswho were trying to maintain a clean coherent codebase, theseissues created a sense that the language was getting out ofhand and was less likely to be trusted as a common vehicle forcommunicating domain notions within the team. The problemwas further compounded when specifications began to changeas products evolved. In the case of one industry partner, theperceived cost of maintaining the language and automated testsbecame so high that the project was almost abandoned astechnical testers were assigned manual testing jobs in order tomeet deadlines. All this led to the following important lessons:1) Whilst the layered approach works, long term fea-sibility requires a dedicated language owner. Herjob would be that of ensuring consistency within thelanguage, avoiding duplication, and so on.Fig. 2. Testing DSLs can be visualised as a hierarchy of increasing specificityand rigidity2) Success also depends on having a development pro-cess which caters and makes space for DSL devel-opment. An ad-hoc approach is unlikely to work,especially when deadlines approach.3) As the language grows, tool support may be neededto help users of the language look up availablenotions much in the same way that they would use adictionary in a natural language.4) Finally management buy-in is essential in that ifthe process of developing and maintaining a DSLis perceived as being in competition with softwaredelivery then at some point, management will almostcertainly abandon any such efforts.B. Viewing Testing DSLs as a HierarchyFollowing our initial case studies, we propose that testingDSLs can be seen to exist in a form of hierarchy (see Figure 2)whereby the root DSL is very generic and only captures coreconcepts about testing. That is to say, it captures concepts suchas test suites, tests, assertions, setup/teardown and so on. Infact, Gherkin can be said to exist at this level given it basicallydefines the notions of features (test suites), scenarios (tests),and the Given-When-Then notation (test setup, exercise, testteardown); whilst leaving all other notions to be defined asfree text by users of the language. Languages further downthe hierarchy however would be able to express more specificnotions with regards to a particular domain or subdomain. Forexample, a DSL for testing graphics-based games would beable to express all the notions of the root DSL but also providegrammatical structures for defining concepts in the graphics-based games domain. However, it would not feasibly expressnotions about all possible graphics-based games. In fact, itwould probably express common notions such as starting agame, the score of a game, winning a game, and so on. If oneneeded to model concepts tailored to a specific game then onewould need to move one level further down in the hierarchyand create a DSL specifically for that purpose.With this in mind, we regrouped and decided to try andfurther investigate the use of DSLs in testing by exploringcase studies at various levels of this abstraction hierarchy. Wehypothesised that a more rigid approach to language definitionwould lead to better results in terms of long term evolutionand maintainability of the language. This is discussed in thefollowing section.Fig. 3. Selected case studies visualised as a language hierarchyIV. STRUCTURED LANGUAGE CASE STUDIESGiven the proposed hierarchical view of testing DSLsdiscussed in Section III-B, the motivation behind the nextpart of our investigation was that of exploring the design anduse of DSLs at various levels of the hierarchy. Whilst DSLslower down in the hierarchy will more likely need dedicatedparsers and code generators than Gherkin-based languages,they should reduce the symptoms observed in our initial casestudies whereby notions were expressed in a multitude of waysand the language quickly grew out of control. Also, morestructured languages would provide benefits in terms of havingscripts being automatically checked during compilation and aspart of an integrated development environment would benefitfrom features such as code helpers2. The first challenge in thisregard was that of case study selection.A. Case study selectionThree case studies were selected involving domains withpublicly available systems. The envisaged methodology wasthat of understanding the domains involved and designing aDSL for each one such that we would be able to specifytests and wire them in to test automation tools. The domainswere selected based on their envisaged level in the hierarchydiscussed in Section III-B and were as follows (see Figure 3)3:1) Android Applications: The Android operating system isnow one of the main players in the mobile device market andwell over a million applications are available for downloadonline. Whilst developers are essentially free to develop anykind of user interface they desire, it is generally advisablethat applications follow Googles established user interfaceguidelines. These define both the vocabulary of the typical in-terface components (e.g. buttons, sliders, status bars, etc), userinteractions (e.g. tap, long-tap, pinch, etc) and visual guidelinesregarding how components are best placed in relation to eachother on an interface. These guidelines are updated from timeto time but usually in very small increments, thus making thisdomain a very stable one. Our aim in this case study wasto design a language that would enable the creation of testswhich expressed interaction with applications that adhere to2In software development, code helpers in an integrated developmentenvironment provide developers with suggestions as to possible ways tocomplete a line of code which they are working on.3More details on the DSLs mentioned in this paper can be found atwww.um.edu.mt/ict/cs/pest/publications/testing_dslsFig. 4. Angry Birds (left) and Cut the Rope (right) were selected as candidatesfor the graphical games case study.the Android User Interface Guidelines; yet without expressingconcepts related to specific applications.2) eCommerce Websites: Most users of the Internet wouldbe familiar with eCommerce websites, sites which usuallyallow customers to search through a product database andpurchase items online. A substantial amount of softwaredevelopers are also likely to work on such systems at somepoint in their career. Yet whilst such websites embody acertain element of common functionality (e.g. searchingfor products, viewing products, adding items to a card,etc), companies would typically need to build automatedtest suites from the ground up. In this case study, wewanted to explore the possibility of defining a languagewhich was able to express notions across eCommercewebsites and also provide the engineering mechanismthat would actually execute the same script regardless ofthe website. That is to say that a script fragment statingAdd the current item to the shopping cartcould be transparently executed against Amazon.com,BookDepository.com, or any other eCommerce website whichsupports the notion of adding an item to a shopping cart.3) Graphical Games: Finally, we wanted to explore a casestudy which descended further down the language hierarchy.We selected graphics-based games for two main reasons.Firstly, in all likelihood, one graphics-based game will varyenormously from another due to the creative nature of develop-ment. This means that we would need to split the developmentof such a DSL across (at least) two levels in the hierarchy.That is to say that whilst we could design a DSL to expresscommon notions such as starting a game, winning a game,etc, we would not be able to express notions about all games.Secondly, the engineering challenge in automating interactionswith graphics-based games was intriguing. To this end weselected two popular games as part of our case study, AngryBirds and Cut the Rope (see Figure 4). The former is a populargame in which the user catapults various birds at structures inan attempt to kill the enemy pigs, whilst the latter is a game inwhich the user attempts to deliver candy to a hungry monsterby cutting ropes in the right timing and sequence so as tosuccessfully manipulate a swinging pendulum puzzle.B. Language Design DiscussionIn this section we compare and contrast language designissues and priorities across the three cases studies. An initialobservation we made was that a DSL for software testingessentially expresses notions in two domains: the softwaretesting domain, and the domain of the system being tested. Inthe testing domain, we are interested in defining the notionsof a test suite, a test, and various parts of the testing lifecycle. Therefore, an early design decision across all three casestudies was that and DSL would essentially consist of twoparts, with one part being common to all testing DSLs andexpresses notions about the testing life cycle whilst the secondpart would vary depending on the individual domain. In fact,all our languages had similar notions along the lines of:define testsuite "login tests"define setup "setup"...enddefine teardown "teardown"...enddefine test "valid login"...endendThe interesting observations surfaced when we looked atthe domain-specific component of each case study. In SectionII-A, we outlined a number of quality attributes related toDSLs which are found in the literature. Whilst some ofthese attributes (e.g. simplicity and orthogonality) remainedimportant across all our domains, other attributes become moreimportant than others depending on the case study in question.These attributes were domain specificity, extensibility, andreusability. We discuss observations for each attribute below.1) Domain Specificity: In the case of domain specificity,whilst one might think it an absolute necessity that a domainspecific language be highly domain specific, the reality is thatsome domains are not so easily definable from the outset. Theproblem of fluctuating requirements in software developmentis well known and has in fact led to the conception of newdevelopment processes that deal with the phenomenon. In thecontext of our case studies, we found it relatively easy tocreate a highly domain specific language for our well-defineddomain (Android applications), mainly due to the fact that wefocused on extracting notions from the Android User InterfaceGuidelines and embodying them in a well-defined grammar.However, on the other end of the spectrum where we weretrying to define a DSL for graphical games, the situation wasvery different. Whilst we were able to define concepts such asstarting a game, winning a game, losing a game, the score of agame, and so on, we could not be any more specific. Whetherwe define the notion of catapulting a bird, driving a car oraligning coloured blocks would depend on the particular gamewe are testing.In our eCommerce case study, we surveyed a number ofwebsites and enumerated all their features. As one wouldexpect, there was quite a bit of overlap with many sites offeringsimilar features. However, there were features which werevery site specific. For example, some sites offered productreviews while others did not. Also, amongst sites which offeredreviews, the style differed (e.g. one supported star ratingswhilst another supported thumbs-up/down ratings, and so on).So in terms of domain specificity, the eCommerce case studywas more of a compromise candidate.2) Extensibility: We observed that the importance of exten-sibility features in a DSL seemed to be inversely proportionalto its domain specificity. That is to say that whilst it wasimportant that our DSL about graphical games be extensibleto accommodate new concepts, it was less so for eCommercesystems and almost completely unnecessary for Android appli-cations. This was mainly due to the fact that our Android DSLmodelled the Android User Interface Guidelines completelyand the only plausible reason one would want to extend thelanguage was when a new version of the Android OperatingSystem was released; an occurrence which would arguablyrequire an associated new release of our DSL in any case.3) Reusability: All developed languages provided reusabil-ity support in the form of allowing users of the language togroup sequences of language phrases into procedures whichcould then be called by name. For example:define procedure "add out of stock book to cart"search for "Harry Potter" in "books"select first item from search resultsadd current item to cartenddefine test "buyOutOfStockBook"add out of stock book to cartverify that the item is not added to the cartendWe noticed that in the case of Android applications, thiscame in very handy due to the fact that test cases madeup of highly atomic statements such as tapping, pinching,waiting, etc tended to make tests less readable. Therefore acomplex sequence of interactions could be grouped togetherand labelled as zoomInToLondonOnGoogleMaps for aexample. We found less need for reusability in the case ofeCommerce websites because the notions modelled by thelanguage were by their nature on a business logic level. Thesame was observed in the case of the DSL for graphical games.Having said that, we argue that reusability should still beprovided within languages because it is a useful mechanismfor improving readability and maintainability of scripts. Forexample, in the case of our games DSL, we found it veryuseful to define procedures such as advanceToLevel5,which would result in an automated process of playing thegame through to level 5 before a test for a feature in level 5can be carried out.C. Engineering ChallengesThe nature of these case studies presented us with a numberof engineering challenges. Recall that the automation of testsspecified using one of our DSLs was an important deliverablefor industry partners. The fact that we departed from thecurrent industry standard immediately presented us with thechallenge of needing to provide a compiler for our DSLs.Many compilation frameworks are available but we decidedto use the xText language framework [15], based mainly onits ability to automatically build a compiler and code editor(as an Eclipse plugin) from a BNF-like grammar. Given somevery basic language specification training, we think that mostdomain experts would be able to curate their DSL in BNFnotation.The second engineering challenge involved the interactionor wiring in of our scripts such that they are able to interactwith the systems under test. In the case of Android applicationsand eCommerce websites, this was relatively easy to dothrough the use of standard technologies such as Selendroid[10] and Webdriver [9]. In this case, language compilationresulted in the generation of JUnit code which internallyutilised these APIs. The challenge was larger in the case ofgraphical games due to the fact that games do not utilisestandard user interface components. Whilst in a case study withan industry partner we would have asked engineers to provideus with test hooks to interact with the game, in our case wedid not have that luxury. We therefore decided to automategame interaction using Sikuli [12], a test automation APIwhich utilises image recognition techniques. Hence, languagecurators would not only have to provide a grammar for thegame-specific component of the language, but also a series ofimages which would be linked to notions (e.g. an image of ared bird in angry birds). Similarly, we utilised OCR techniquesto read the score on the screen when it was required by a test.The approach worked but risks being brittle, especially in morefast paced games where the time it takes to take a screenshotand process it is too slow to keep up with the changing stateof the game.Finally, you may recall from Section IV-A that in thecase of eCommerce systems, there was a desire to develop asite-agnostic technology stack in which scripts would executeseamlessly regardless of the website being tested. This wasachieved through the development of dedicated classifiers.A classifier takes as input a user interface component, ora whole HTML page and delivers a verdict as to whetheror not it is likely to be (for example) a search button ora product information page. Once a script in the eCom-merce DSL was compiled, the test automation frameworkwould execute it and when it comes across an instructionlike click on the search button, it would extract allclickable components from the current page and feed them tothe search classifier in order to find the one which is mostlikely the right button.V. CONCLUSION AND FUTURE WORKIn this paper we presented five case studies involving thedesign and utilisation of domain specific languages in thefield of automated software testing. We proposed that suchlanguages can be seen to exist in a hierarchy whereby theroot DSL is highly generic and embodies generic testingconcepts whilst DSLs lower down in the hierarchy becomeincreasingly specific to particular domains. Our case studiesseem to indicate that a layered approach to language designand test automation helps separate concerns between domainexperts, users of the language and engineers who wire thelanguage into test automation frameworks. We also observedthat without management buy-in and seamless incorporation ofDSL development into the software development process, suchefforts are likely to fail. Finally, we observed that the depth ofa DSL on the hierarchy has an impact on which attributes ofthe language should be given more importance.With regards to future work, we are currently lookingto gauge industry opinion on the development of structureDSLs for software testing; ideally followed up by a numberof long-running case studies in which we can observe thedevelopment and long-term evolution of such DSLs. Finally,in a bid to reduce barriers-to-entry of DSLs, we are lookingat improving the Gherkin language itself such that we canmake it more structured whilst maintaining the familiaritywhich current practitioners have with the technology.REFERENCES[1] A. Bertolino, Software testing research: Achievements, challenges,dreams, in 2007 Future of Software Engineering. IEEE ComputerSociety, 2007, pp. 85103.[2] M. Wynne and A. Hellesoy, The cucumber book: behaviour-drivendevelopment for testers and developers. Pragmatic Bookshelf, 2012.[3] M. Fowler, Domain-specific languages. Pearson Education, 2010.[4] C. Hoare, Hints on programming language design, DTIC Document,Tech. Rep., 1973.[5] J. L. Bentley, Little languages, Commun. ACM, vol. 29, no. 8, pp.711721, 1986.[6] M. Mernik, J. Heering, and A. M. Sloane, When and how to developdomain-specific languages, ACM computing surveys (CSUR), vol. 37,no. 4, pp. 316344, 2005.[7] G. Karsai, H. Krahn, C. Pinkernell, B. Rumpe, M. Schindler, andS. Volkel, Design guidelines for domain specific languages, arXivpreprint arXiv:1409.2378, 2014.[8] M. Fewster and D. Graham, Software test automation: effective use oftest execution tools. Addison-Wesley Reading, 1999.[9] U. Gundecha, Selenium Testing Tools Cookbook. Packt Publishing Ltd,2012.[10] P. Costa, A. C. Paiva, and M. Nabuco, Pattern based gui testingfor mobile applications, in 2014 9th International Conference on theQuality of Information and Communications Technology (QUATIC).IEEE, 2014, pp. 6674.[11] G. Shah, P. Shah, and R. Muchhala, Software testing automation usingappium, 2014.[12] T. Yeh, T.-H. Chang, and R. C. Miller, Sikuli: using gui screenshotsfor search and automation, in Proceedings of the 22nd annual ACMsymposium on User interface software and technology. ACM, 2009,pp. 183192.[13] M. Fewster and G. Consultants, Common mistakes in test automation,in Proceedings of Fall Test Automation Conference, 2001.[14] D. Graham and M. Fewster, Experiences of test automation: case studiesof software test automation. Addison-Wesley Professional, 2012.[15] L. Bettini, Implementing Domain-Specific Languages with Xtext andXtend. Packt Publishing Ltd, 2013.