From 0eb28e643628965cdd248b6cf5167a07aa21af99 Mon Sep 17 00:00:00 2001 From: Harco Kuppens Date: Thu, 23 Sep 2021 08:48:33 +0200 Subject: [PATCH] added model based testing documentation fixed inclusion of epilog.rst --- source/bibliography.rst | 296 ++++- source/command-line.rst | 1 + source/conf.py | 23 +- source/continuous_publishing.py | 188 ++- source/epilog.rst | 16 + source/examples/HelloWorld/index.rst | 245 ++++ .../examples/HelloWorld/testarchitecture.pdf | Bin 0 -> 9155 bytes .../examples/HelloWorld/testarchitecture.svg | 914 +++++++++++++++ .../HelloWorld/yed_model_helloworld.pdf | Bin 0 -> 158855 bytes .../HelloWorld/yed_model_helloworld.svg | 1014 +++++++++++++++++ source/examples/Queue/index.rst | 7 + source/examples/index.rst | 3 + source/getting-started.rst | 151 ++- source/glossary.rst | 5 +- source/index.rst | 27 +- source/intro.rst | 5 +- source/mbt/index.rst | 14 + source/mbt/mbt.rst | 347 ++++++ source/mbt/mbt_with_lts.rst | 192 ++++ source/prolog.rst | 0 source/torxakis_mbt.rst | 262 +++++ source/usage/index.rst | 15 + source/{ => usage}/trace-replay.rst | 0 23 files changed, 3612 insertions(+), 113 deletions(-) create mode 100644 source/epilog.rst create mode 100644 source/examples/HelloWorld/index.rst create mode 100644 source/examples/HelloWorld/testarchitecture.pdf create mode 100644 source/examples/HelloWorld/testarchitecture.svg create mode 100644 source/examples/HelloWorld/yed_model_helloworld.pdf create mode 100644 source/examples/HelloWorld/yed_model_helloworld.svg create mode 100644 source/examples/Queue/index.rst create mode 100644 source/mbt/index.rst create mode 100644 source/mbt/mbt.rst create mode 100644 source/mbt/mbt_with_lts.rst create mode 100644 source/prolog.rst create mode 100644 source/torxakis_mbt.rst create mode 100644 source/usage/index.rst rename source/{ => usage}/trace-replay.rst (100%) diff --git a/source/bibliography.rst b/source/bibliography.rst index e772f26..e573d7d 100644 --- a/source/bibliography.rst +++ b/source/bibliography.rst @@ -1,5 +1,295 @@ -Bibliography -======================================================= -.. [EWD69] E.W. Dijkstra. Notes On Structured Programming – EWD249. T.H. Report 70-WSK-03, Technische Hogeschool Eindhoven, Eindhoven, The Netherlands, 1969. +.. only:: html + + Bibliography + ============ + + + + +.. [R1] S. Abramsky. Observational Equivalence as a Testing + Equivalence. *Theoretical Computer Science* , 53(3):225– 241, 1987. + +.. [R2] T. Arts, J. Hughes, J. Johansson, and U. Wiger. Testing Telecoms + Software with Quviq Quickcheck. In *ACM SIGPLAN Workshop on Erlang* , + ERLANG’06, pages 2–10. ACM, NY, USA, 2006. + +.. [R3] Axini. Testautomatisering. ``http://www.axini.com`` . + +.. [R4] C. Barrett, C.L. Conway, M. Deters, L. Hadarean, D. Jovanovi´c, T. + ing, and C. Reynolds, A.and Tinelli. CVC4. In *Computer Aided + Verification – CAV 2011* , volume 6806 of *Lecture Notes in Computer + Science* , pages 171–177. Springer-Verlag, 2011. + +.. [R5] A. Belinfante. JTorX: A Tool for On-Line Model-Driven Test + Derivation and Execution . In J. Esparza and R. Majumdar, + editors, *Tools and Algorithms for the Construction and Analysis of + Systems – TACAS 2010* , volume 6015 of *Lecture Notes in Computer + Science* , pages 266–270. Springer, 2010. + +.. [R6] A. Belinfante, J. Feenstra, R.G. de Vries, J. Tretmans, N. Goga, + L. Feijs, S. Mauw, and L. Heerink. Formal Test Automation: A Simple + Experiment. In G. Csopaki, S. Dibuz, and K. Tarnay, editors, *Int. + Workshop on Testing of Communicating Systems 12* , pages 179–196. + Kluwer Academic Publishers, 1999. + +.. [R7] G. Bernot, M. G. Gaudel, and B. Marre. Software testing based on + formal specifications: a theory and a tool. *Software Engineering + Journal* , 1991(November):387–405, 1991. + +.. [R8] M. van der Bijl, A. Rensink, and J. Tretmans. Compositional + Testing with ``ioco`` . In A. Petrenko and A. Ulrich, + editors, *Formal Approaches to Software Testing – FATES 2003* , volume + 2931 of *Lecture Notes in Computer Science* , pages 86–100. + Springer-Verlag, 2004. + +.. [R9] Bijl, M. van der and Beek, H. van. Model-Based Testing in + Safety-Critical Scaled Agile. *Bits & Chips* , August 2021. + +.. [R10] H.C. Bohnenkamp and M.I.A. Stoelinga. Quantitative Testing. + In *ACM & IEEE Int. Conf. on Embedded Software – EMSOFT’08* , pages + 227–236. ACM, 2008. + +.. [R11] T. Bolognesi and E. Brinksma. Introduction to the ISO specification + language LOTOS. *Computer Networks and ISDN Systems* , 14:25–59, 1987. + +.. [R12] P. van den Bos, R. Janssen, and J. Moerman. *n* -Complete Test + Suites for ``IOCO`` . *Software Quality Journal* , 27(2):563–588, + 2019. + +.. [R13] P. van den Bos and J. Tretmans. Coverage-Based Testing with + Symbolic Transition Systems. In D. Beyer and C. Keller, editors, *Tests + and Proofs – TAP 2019* , volume 11823 of *Lecture Notes in Computer + Science* , pages 64–82. Springer Int. Publishing, 2019. + +.. [R14] Bos, P. van den. *Coverage and Games in Model-Based Testing* . + PhD thesis, Radboud University, Nijmegen, The Netherlands, 2020. + +.. [R15] L. Branda´n Briones and E. Brinksma. A Test Generation Framework + for *quiescent* Real-Time Systems. In J. Grabowski and B. Nielsen, + editors, *Formal Approaches to Software Testing – FATES 2004* , volume + 3395 of *Lecture Notes in Computer Science* , pages 64–78. + Springer-Verlag, 2005. + +.. [R16] E. Brinksma. A Theory for the Derivation of Tests. In S. Aggarwal + and K. Sabnani, editors, *Protocol Specification, Testing, and + Verification VIII* , pages 63–74. North-Holland, 1988. + +.. [R17] E. Brinksma, R. Alderden, R. Langerak, J. van de Lagemaat, and J. + Tretmans. A Formal Approach to Conformance Testing. In J. de Meer, L. + Mackert, and W. Effelsberg, editors, *Second Int. Workshop on Protocol + Test Systems* , pages 349–363. North-Holland, 1990. + +.. [R18] T.S. Chow. Testing Software Design Modeled by Finite-State + Machines. *IEEE Transactions on Software Engineering* , 4(3):178–187, + 1978. + +.. [R19] K. Claessen and J. Hughes. QuickCheck: A Lightweight Tool for + Random Testing of Haskell Programs. In *ACM SIGPLAN Int. Conf. on + Functional Programming 2000* , ICFP’00, pages 268–279. ACM, NY, USA, + 2000. + +.. [R20] D.R. Cok. *The SMT-LIBv2 Language and Tools: A Tutorial* . + GrammaTech, Inc., 2011. + +.. [R21] L. De Moura and N. Bjørner. Z3: An Efficient SMT Solver. In C.R. + Ramakrishnan and J. Rehof, editors, *Int. Conf. on Tools and Algorithms + for the Construction and Analysis of Systems – TACAS 2008* , volume + 4963 of *Lecture Notes in Computer Science* , pages 337–340. Springer, + 2008. + +.. [R22] L. De Moura and N. Bjørner. Satisfiability Modulo Theories: + Introduction and Applications. *Communications of the ACM* , + 54(9):69–77, September 2011. + +.. [R23] R. De Nicola and M.C.B. Hennessy. Testing Equivalences for + Processes. *Theoretical Computer Science* , 34:83–133, 1984. + +.. [R24] E.W. Dijkstra. Notes On Structured Programming – EWD249. T.H. + Report 70-WSK-03, Technische Hogeschool Eindhoven, Eindhoven, The + Netherlands, 1969. + +.. [R25] Dropbox. ``https://www.dropbox.com`` . + +.. [R26] H. Eertink. Executing LOTOS specifications: The SMILE tool. In T. + Bolognesi, J. van de Lagemaat, and C. Vissers, editors, *LOTOSphere: + Software Development with LOTOS* , pages 221–234. Kluwer Academic + Publishers, 1995. + +.. [R27] P.H.J. van Eijk. *Software Tools for the Specification Language + LOTOS* . PhD thesis, University of Twente, Enschede, The Netherlands, + 1988. + +.. [R28] J. Engelfriet. Determinacy → (Observation Equivalence = Trace + Equivalence). *Theoretical Computer Science* , 36(1):21–25, 1985. + +.. [R29] L. Frantzen, J. Tretmans, and T. Willemse. Test Generation Based on + Symbolic Specifications. In J. Grabowski and B. Nielsen, + editors, *Formal Approaches to Software Testing – FATES 2004* , volume + 3395 of *Lecture Notes in Computer Science* , pages 1–15. + Springer-Verlag, 2005. + +.. [R30] L. Frantzen, J. Tretmans, and T.A.C. Willemse. A Symbolic Framework + for Model-Based Testing. In K. Havelund, M. Nu´n˜ez, G. Ro¸su, and B. + Wolff, editors, *Formal Approaches to Software Testing and Runtime + Verification – FATES/RV’06* , volume 4262 of *Lecture Notes in + Computer Science* , pages 40–54. SpringerVerlag, 2006. + +.. [R31] M.-C. Gaudel. Testing can be Formal, too. In P.D. Mosses, M. + Nielsen, and M.I. Schwartzbach, editors, *TAPSOFT’95: Theory and + Practice of Software Development* , volume 915 of *Lecture Notes in + Computer Science* , pages 82–96. Springer-Verlag, 1995. + +.. [R32] R.J. van Glabbeek. The Linear Time – Branching Time Spectrum. In + J.C.M. Baeten and J.W. Klop, editors, *CONCUR’90* , number 458 in + Lecture Notes in Computer Science, pages 278–297. Springer-Verlag, 1990. + +.. [R33] R.J. van Glabbeek. The Linear Time – Branching Time Spectrum II + (The Semantics of Sequential Systems with Silent Moves). In E. Best, + editor, *CONCUR’93* , number 715 in Lecture Notes in Computer Science, + pages 66–81. Springer-Verlag, 1993. + +.. [R34] J.F. Groote and M.R. Mousavi. *Modeling and Analysis of + Communicating Systems* . MIT Press, 2014. + +.. [R35] A. Hartman and K. Nagin. The AGEDIS Tools for Model Based Testing. + In *Int. Symposium on Software Testing and Analysis – ISSTA 2004* , + pages 129–132, New York, USA, 2004. ACM Press. + +.. [R36] Haskell: An Advanced, Purely Functional Programming + Language. ``https://www.haskell.org`` . + +.. [R37] L. Heerink. *Ins and Outs in Refusal Testing* . PhD thesis, + University of Twente, Enschede, The Netherlands, 1998. + +.. [R38] A. Hessel, K.G. Larsen, M. Mikucionis, B. Nielsen, P. Pettersson, + and A. Skou. Testing Real-Time Systems Using ``Uppaal`` . In R.M. + Hierons, J.P. Bowen, and M. Harman, editors, *Formal Methods and + Testing* , volume 4949 of *Lecture Notes in Computer Science* , pages + 77–117. Springer-Verlag, 2008. + +.. [R39] C.A.R. Hoare. *Communicating Sequential Processes* . + Prentice-Hall, 1985. + +.. [R40] J. Hughes, B.C. Pierce, T. Arts, and U. Norell. Mysteries of + DropBox: Property-Based Testing of a Distributed Synchronization + Service. In *IEEE Int. Conf. on Software Testing, Verification and + Validation – ICST* , pages 135–145. IEEE, 2016. + +.. [R41] International Organization for Standardization. *ISO/IEC + 25010:2011* . Systems and software engineering – Systems and software + Quality Requirements and Evaluation (SQuaRE) – System and software + quality models. ISO, Geneva, 2011. + +.. [R42] ISO. *Information Processing Systems, Open Systems + Interconnection, LOTOS - A Formal Description Technique Based on the + Temporal Ordering of Observational Behaviour* . International Standard + IS-8807. ISO, Geneve, 1989. + +.. [R43] R. Janssen and J. Tretmans. Matching Implementations to + Specifications: The Corner Cases of *ioco* . In *ACM/SIGAPP Symp. on + Applied Computing – Software Verification and Testing Track* , SAC’19, + pages 2196–2205, New York, NY, USA, 2019. ACM. + +.. [R44] C. Jard and T. J´eron. TGV: Theory, Principles and Algorithms: A + Tool for the Automatic Synthesis of Conformance Test Cases for + Non-Deterministic Reactive Systems. *Software Tools for Technology + Transfer* , 7(4):297–315, 2005. + +.. [R45] M. Krichen and S. Tripakis. Black-Box Conformance Testing for + Real-Time Systems. In *11th Int. SPIN Workshop on Model Checking of + Software – SPIN’04* , volume 2989 of *Lecture Notes in Computer + Science* . Springer-Verlag, 2004. + +.. [R46] R. Langerak. A Testing Theory for LOTOS using Deadlock Detection. + In E. Brinksma, G. Scollo, and C. A. Vissers, editors, *Protocol + Specification, Testing, and Verification IX* , pages 87–98. + North-Holland, 1990. + +.. [R47] D. Lee and M. Yannakakis. Principles and Methods for Testing Finite + State Machines – A Survey. *The Proceedings of the IEEE* , + 84(8):1090–1123, August 1996. + +.. [R48] N.A. Lynch and M.R. Tuttle. An Introduction to Input/Output + Automata. *CWI Quarterly* , 2(3):219–246, 1989. Also: Technical Report + MIT/LCS/TM-373 (TM-351 revised), Massachusetts Institute of Technology, + Cambridge, U.S.A., 1988. + +.. [R49] L. Marsso, R. Mateescu, and W. Serwe. TESTOR: A Modular Tool for + On-the-Fly Conformance Test Case Generation. In D. Beyer and M. Huisman, + editors, *Tools and Algorithms for the Construction and Analysis of + Systems – TACAS 2018* , volume 10806 of *Lecture Notes in Computer + Science* , pages 211–228. Springer Int. Publishing, 2018. + +.. [R50] R. Milner. *Communication and Concurrency* . Prentice-Hall, 1989. + +.. [R51] A. Petrenko. Fault Model-Driven Test Derivation from Finite State + Models: Annotated Bibliography. In F. Cassez, C. Jard, B. Rozoy, and + M.D. Ryan, editors, *Modeling and Verification of Parallel Processes – + 4th Summer School MOVEP 2000* , volume 2067 of *Lecture Notes in + Computer Science* , pages 196–205. + Springer-Verlag, 2001. + +.. [R52] M. Phalippou. *Relations d’Implantation et Hypoth`eses de Test sur + des Automates a\` Entr´ees et Sorties* . PhD thesis, L’Universit´e de + Bordeaux I, France, 1994. + +.. [R53] I. Phillips. Refusal Testing. *Theoretical Computer Science* , + 50(2):241–284, 1987. + +.. [R54] A. Pnueli. Specification and development of reactive systems. In + H.J. Kugler, editor, *Information Processing 86* , pages 845–858. + North-Holland, 1986. + +.. [R55] J.H. Poore, L. Lan, R. Eschbach, and T. Bauer. Automated + Statistical Testing for Embedded Systems. In J. Zander, I. + Schieferdecker, and P.J. Mosterman, editors, *Model-Based Testing for + Embedded Systems* , pages 111–146. CRC Press, 2012. + +.. [R56] Selenium – Browser Automation. ``http://www.seleniumhq.org`` . + +.. [R57] Sikuli Script. ``http://www.sikuli.org`` . + +.. [R58] TorXakis – A Tool for Model-Based + Testing. ``https://torxakis.org`` . + +.. [R59] J. Tretmans. HIPPO: A LOTOS Simulator. In P.H.J. van Eijk, C.A. + Vissers, and M. Diaz, editors, *The Formal Description Technique + LOTOS* , pages 391–396. North-Holland, 1989. + +.. [R60] J. Tretmans. Test Generation with Inputs, Outputs, and Quiescence. + In T. Margaria and B. Steffen, editors, *Second Int. Workshop on Tools + and Algorithms for the Construction and Analysis of Systems + (TACAS’96)* , pages 127–146. Lecture Notes in Computer Science 1055, + Springer-Verlag, 1996. + +.. [R61] J. Tretmans. Test Generation with Inputs, Outputs and Repetitive + Quiescence. *Software—Concepts and Tools* , 17(3):103–120, 1996. + +.. [R62] J. Tretmans. Model Based Testing with Labelled Transition Systems. + In R.M. Hierons, J.P. Bowen, and M. Harman, editors, *Formal Methods + and Testing* , volume 4949 of *Lecture Notes in Computer Science* , + pages 1–38. Springer-Verlag, 2008. + +.. [R63] J. Tretmans and L. Verhaard. A Queue Model relating Synchronous and + Asynchronous Communication. In R.J. Linn and M.U. Uyar, + editors, *Protocol Specification, Testing, and + Verification XII* , number C-8 in IFIP Transactions, pages 131–145. + North-Holland, 1992. + +.. [R64] F. Vaandrager. On the Relationship between Process Algebra and + Input/Output Automata. In *Logic in Computer Science* , pages 387–398. + Sixth Annual IEEE Symposium, IEEE Computer Society Press, 1991. + +.. [R65] Vaandrager, F. Model Learning. *Commun. ACM* , 60(2):86–95, January 2017. + +.. [R66] M. Volpato and J. Tretmans. Towards Quality of Model-Based Testing + in the ``ioco`` Framework. In *Int. Workshop on Joining AcadeMiA and + Industry Contributions to testing Automation – JAMAICA’13* , pages + 41–46, New York, NY, USA, 2013. ACM. + +.. [R67] R.G. de Vries and J. Tretmans. Towards Formal Test Purposes. In E. + Brinksma and J. Tretmans, editors, *Formal Approaches to Testing of + Software – FATES’01* , number NS-01-4 in BRICS Notes Series, pages + 61–76, University of Aarhus, Denmark, 2001. BRICS. diff --git a/source/command-line.rst b/source/command-line.rst index a96ab8e..ffffb74 100644 --- a/source/command-line.rst +++ b/source/command-line.rst @@ -53,6 +53,7 @@ solver being used, which we can create using the following commands: echo 'selected-solver: "cvc4" ' > ~/.torxakis.yaml + From now on ``TorXakis`` will use `CVC4 `__ instead of `Z3 `__. diff --git a/source/conf.py b/source/conf.py index 9e81177..275248f 100644 --- a/source/conf.py +++ b/source/conf.py @@ -65,19 +65,34 @@ def __init__(self, **options): exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +# internal linking :ref:linkname # using :ref: we can use sphinx cross referencing in a sphinx document (between possible different rst files in sphinx project) -# however :ref: is only used for internal linking, for external linking you must use the standard restructured text +# however :ref: is only used for internal linking, +# +# external linking linkname_ +# for external linking you must use the standard restructured text # syntax using a role with an ending _ character. You can even separate the link and the target definition. # However the target definition from standard restructured text only holds for the current rst file. +# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # The trick to have target definitions hold for all rst files in the sphinx project is to include to each # rst file the target definitions. We do this by adding an include directive for including hyperlinks.rst # to the rst_epilog, so that hyperlinks.rst is then automatically include to rst file. # -#rst_epilog=""" -#.. include:: hyperlinks.rst -#""" rst_epilog=""" +.. include:: /epilog.rst """ +# note: officially include directive only supports a relative file argument +# https://docutils.sourceforge.io/docs/ref/rst/directives.html#including-an-external-document-fragment +# The "include" directive reads a text file. The directive argument is the path to the file to be included, +# relative to the document containing the directive.Unless the options literal, code, or parser are given, +# the file is parsed in the current document's context at the point of the directive. +# however https://stackoverflow.com/questions/44563794/how-to-correctly-include-other-rest-files-in-a-sphinx-project +# said an absolute path ( root is source/ dir) works also and I verified it! + + +# rst_prolog=""" +# .. include:: /prolog.rst +# """ numfig = True diff --git a/source/continuous_publishing.py b/source/continuous_publishing.py index dfb94ea..f3bf291 100644 --- a/source/continuous_publishing.py +++ b/source/continuous_publishing.py @@ -194,10 +194,142 @@ def slugify(value, allow_unicode=False): "source_suffix": '.rst', } +#html_show_sourcelink = True + +# for adding color roles in html +# ------------------------------- +# +# src: https://stackoverflow.com/questions/32033158/create-a-role-font-color-in-sphinx-that-works-with-make-latexpdf#answer-32038624 +# https://www.sphinx-doc.org/en/master/man/sphinx-quickstart.html#cmdoption-sphinx-quickstart-dot +# Inside the root directory, two more directories will be created; “_templates” for custom HTML templates and “_static” for custom stylesheets and other static files. +# https://www.sphinx-doc.org/en/master/usage/configuration.html +# # Add any paths that contain templates here, relative to this directory. +# templates_path = ['_templates'] +# +# # Add any paths that contain custom static files (such as style sheets) here, +# # relative to this directory. They are copied after the builtin static files, +# # so a file named "default.css" will overwrite the builtin "default.css". +# html_static_path = ['_static'] + +# https://stackoverflow.com/questions/32033158/create-a-role-font-color-in-sphinx-that-works-with-make-latexpdf#answer-32038624 +# + +css_filepath="_static/custom.css" +css_template=""" +@import url("default.css"); + +.black { + color: black; +} + +.blue { + color: blue; +} + +.brown { + color: brown; +} + +.cyan { + color: cyan; +} + +.darkgray { + color: darkgray; +} + +.gray { + color: gray; +} + +.green { + color: green; +} + +.lightgray { + color: lightgray; +} + +.lime { + color: lime; +} + +.magenta { + color: magenta; +} + +.olive { + color: olive; +} + +.orange { + color: orange; +} + +.pink { + color: pink; +} + +.purple { + color: purple; +} + +.red { + color: red; +} + +.teal { + color: teal; +} + +.violet { + color: violet; +} + +.white { + color: white; +} + +.yellow { + color: yellow; +} +""" + +# black, blue, brown, cyan, darkgray, gray, green, lightgray, lime, magenta, olive, orange, pink, purple, red, teal, violet, white, yellow + +# black blue brown cyan darkgray gray green lightgray lime magenta olive orange pink purple red teal violet white yellow + +html_filepath='_templates/layout.html' +html_template=""" +{% extends "!layout.html" %} + +{% block extrahead %} + + +{% endblock %} +""" + + +# script running at PWD=source/ +print(os.getcwd()) +#for directory in ["source/_static","source/_templates"]: +for directory in ["_static","_templates"]: + if not os.path.exists(directory): + os.makedirs(directory) + + +with open(html_filepath,"w") as f: + f.write(html_template) + +with open(css_filepath,"w") as f: + f.write(css_template) + + + # -- Configuration for Latex/PDF output ------------------------------------------------- -#html_show_sourcelink = True # higher toc depth in latex bookmarks # see: https://www.sphinx-doc.org/en/master/latex.html#latex-elements-confval @@ -213,6 +345,9 @@ def slugify(value, allow_unicode=False): \hypersetup{bookmarksnumbered} +%% for adding color roles in html +%% ------------------------------- + %%https://en.wikibooks.org/wiki/LaTeX/Colors \usepackage{xcolor} %% https://docutils.sourceforge.io/docs/user/latex.html#custom-interpreted-text-roles @@ -241,58 +376,7 @@ def slugify(value, allow_unicode=False): ''' } -# for adding color roles in html output do : https://stackoverflow.com/questions/32033158/create-a-role-font-color-in-sphinx-that-works-with-make-latexpdf#answer-32038624 -# - - -# https://www.sphinx-doc.org/en/master/man/sphinx-quickstart.html#cmdoption-sphinx-quickstart-dot -# Inside the root directory, two more directories will be created; “_templates” for custom HTML templates and “_static” for custom stylesheets and other static files. - -#https://www.sphinx-doc.org/en/master/usage/configuration.html -# # Add any paths that contain templates here, relative to this directory. -# templates_path = ['_templates'] -# -# # Add any paths that contain custom static files (such as style sheets) here, -# # relative to this directory. They are copied after the builtin static files, -# # so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] - -# https://stackoverflow.com/questions/32033158/create-a-role-font-color-in-sphinx-that-works-with-make-latexpdf#answer-32038624 -# - -css_filepath="_static/custom.css" -css_template=""" -@import url("default.css"); - -.red { - color: red; -} -""" - -html_filepath='_templates/layout.html' -html_template=""" -{% extends "!layout.html" %} - -{% block extrahead %} - - -{% endblock %} -""" -# script running at PWD=source/ -print(os.getcwd()) -#for directory in ["source/_static","source/_templates"]: -for directory in ["_static","_templates"]: - if not os.path.exists(directory): - os.makedirs(directory) - - -with open(html_filepath,"w") as f: - f.write(html_template) - -with open(css_filepath,"w") as f: - f.write(css_template) diff --git a/source/epilog.rst b/source/epilog.rst new file mode 100644 index 0000000..d544175 --- /dev/null +++ b/source/epilog.rst @@ -0,0 +1,16 @@ + +.. role:: latex(raw) + :format: latex + +.. role:: html(raw) + :format: html + + + +.. |nl| replace:: :latex:`\newline`:html:`
` + + +.. https://stackoverflow.com/questions/11830242/how-can-i-make-a-non-breaking-space-in-restructuredtext + +.. |~| unicode:: 0xA0 + :trim: \ No newline at end of file diff --git a/source/examples/HelloWorld/index.rst b/source/examples/HelloWorld/index.rst new file mode 100644 index 0000000..6b3b547 --- /dev/null +++ b/source/examples/HelloWorld/index.rst @@ -0,0 +1,245 @@ +.. _helloworld_example: + +======================================================================= +TorXakis Hello World Example +======================================================================= + +``code:`` https://github.com/TorXakis/examples/tree/main/HelloWorld + +Traditionally, the first program, in this case the first model, made in +a new language is the famous *Hello World!* program. Since the original +*Hello World!* program is rather easy to test, we take a slight +variation: our *Hello World!* initially prints ``Hello World!``, and +then continues with waiting for a as input, after which it +outputs “Hello ”, and then these two last actions are repeated. + +In order to use ``TorXakis`` to test *Hello World!* we need a *System +Under Test* (``SUT``), i.e., an executable program showing the above +described *Hello World!* behaviour, a *model* in the ``Txs``-language +specifying the allowed behaviour of the *Hello World!* system, and a +test *adapter* to connect the ``SUT`` to ``TorXakis``; see :numref:`fig_testarchitecture_helloworld`. +We can then use ``TorXakis`` to test whether the behaviour of the +``SUT`` complies with the behaviour specified in the model. + +.. _fig_testarchitecture_helloworld: +.. figure:: testarchitecture.* + :alt: Test architecture + :align: center + + Test architecture + +SUT +--- + +Our ``SUT`` is an executable program that is +claimed to behave according the *Hello World!* description given above. +Our task is to test whether this ``SUT`` indeed behaves as prescribed. +The ``SUT`` can be implemented in any language: we consider black-box +testing, which means that we only consider its input-output behaviour. +Our *Hello World!* ``SUT`` is a `C-program `_ with a simple line-oriented +user interface that communicates via standard input/output. + + +.. code:: sh + + $ gcc -o HelloWorld HelloWorld.c $ ./HelloWorld + Hello World! + Jan + Hello Jan! Pierre + Hello Pierre! ... + + +Adapter +------- + +We now consider a test adapter for *Hello +World!*. Since the ``SUT`` commmunicates via standard input/output and +``TorXakis`` communicates via plain old sockets, this means that we +have to convert standard input/output communication to socket +communication. In a Linux-like environment this can be done using +standard utilities like ``netcat nc`` or ``socat``: + +.. code:: sh + + $ socat TCP4-LISTEN:7890 EXEC:"./HelloWorld" + +Using ``socat``, a socket-server connection is opened on port 7890. Data +on this connection is forwarded to/from standard input/output for +executable ``HelloWorld``. So, ``socat`` constitutes the test adapter +for *Hello World!*. The ``TorXakis`` view of the *Hello World!* program +is a black box receiving names, i.e, strings of characters, on socket +with port number 7890, and sending responses, being also strings, on the +same socket. + +Model +----- + +Now it is time to construct a model in the +``TorXakis`` modelling language ``Txs``. The description above says +that, after an initial ``Hello World!``, the system shall repeatedly +receive names and then output ``Hello`` with that name. The behaviour +is represented in the state automaton ``STAUTDEF helloWorld`` in :numref:`fig_yed_helloworld`; +the complete model including all additional definitions is shown in :numref:`fig_txs_helloworld`. + +.. _fig_yed_helloworld: +.. figure:: yed_model_helloworld.* + :alt: State automaton for Hello World! + :figwidth: 70% + :align: center + + State automaton for Hello World! (`Hstaut.graphml `_) + + +In :numref:`fig_yed_helloworld`, there are three states: the initial state ``init``, the state +``noname`` when no name has been entered yet, and state +``named`` after a name has been entered. The transition from *init* to +*noname* specifies the welcoming message: on channel ``Outp`` the +message ``"Hello World!"`` is produced. The exclamation mark +``"!"`` indicates that a fixed value, i.e., the string +``"Hello World!"``, shall be ouput. The channel ``Outp`` is an ouput +channel from the point of view of the *Hello World!* system. When +testing, it will be an input for ``TorXakis``, i.e., ``TorXakis`` will +observe this message. + +Once in state ``noname``, the next possible action is an input message +on channel ``Inp`` leading to state ``named``. The part +``? n :: String`` indicates that the input message shall be of type +``String`` and that the actual input is bound to the local variable +``n``. Moreover, the input message must satisfy the constraint given +between ``[[`` and ``]]``. This is a regular-expression constraint, it +is expressed with the standard function ``strinre`` (*str* ing *in +r* egular *e* xpression), and it requires that ``n`` starts with a +capital letter followed by one or more small letters. The final part of +this input transition, ``name := n``, assigns the actual message that is +communicated, i.e., the value of ``n``, to the state variable ``name``, +so that it can be later used in other transitions. The variable +``n`` is local to the transiton, whereas the state variable +``name`` is global in the whole state automaton. + +Once in state *named* the next possible transition is going back to +*noname* while emitting on output channel + +``Outp`` the message, that is, the string concatenation +``"Hello " ++ name ++ "!"``, where ``name`` refers to the state +variable containing the value obtained in the preceding transition. + +An additional node in :numref:`fig_yed_helloworld`, which is not a state, gives the +declaration of the state automaton as a ``STAUTDEF``. It declares the +name of the state automaton, its channels with message types, +parameters, states, state variables, initial state, and the initial +values of the state variables, + + +.. code-block:: txs + :caption: Txs model of *Hello World!* (`HelloWorld.txs `_) + :name: fig_txs_helloworld + + STAUTDEF helloWorld [ Inp, Outp :: String ] ( ) + ::= + STATE + init, noname, named + VAR + name :: String + INIT + init { name := "" } + TRANS + init -> Outp ! "Hello World!" -> noname + noname -> Inp ? n [[ strinre(n, REGEX(’[A-Z][a-z]+’)) ]] { name := n } -> named + named -> Outp ! "Hello " ++ name ++ "!" -> noname + ENDDEF + + CHANDEF Chans + ::= + Input :: String ; + Output :: String + ENDDEF + + MODELDEF Hello + ::= + CHAN IN Input + CHAN OUT Output + BEHAVIOUR + helloWorld [Input, Output] () + ENDDEF + + CNECTDEF Sut + ::= + CLIENTSOCK + + CHAN OUT Input HOST "localhost" PORT 7890 + ENCODE Input ? s -> ! s + + CHAN IN Output HOST "localhost" PORT 7890 + DECODE Output ! s <- ? s + ENDDEF + + + +In ``Txs``, the input language for ``TorXakis``, this model is given in +:numref:`fig_txs_helloworld`. The model contains 4 definitions. The first one, ``STAUTDEF``, +defines a *state automaton*, and is directly generated from :numref:`fig_yed_helloworld`. The +second definition ``CHANDEF`` defines two channels with messages of +type ``String``. Thirdly, the overall model is defined in +``MODELDEF Hello``. It specifies which channels are inputs, which are +outputs, and it specifies the behaviour of the model instantiating the +state automaton ``helloWorld`` with appropriate channels and +parameters. + +Lastly, the ``CNECTDEF`` specifies that the tester connects as client +to the ``SUT`` (the server) via sockets. It binds the channel +``Input``, which is an input of the model and of the ``SUT``, thus an +*output* of ``TorXakis``, to the socket ``localhost:7890``. +Moreover, an encoding of actions to strings on the socket can be +defined, but in this case, the encoding is trivial. Analogously, outputs +from the ``SUT``, i.e., inputs to ``TorXakis``, are read from socket ``localhost:7890`` and decoded. + +Testing +-------- + +Now we are ready to perform a test, by running +the ``SUT`` with its adapter and ``TorXakis`` as two separate +processes in two different windows. For the ``SUT`` we run: + +.. code:: sh + + $ socat TCP4-LISTEN:7890 EXEC:"./HelloWorld" + +For ``TorXakis`` we have: + +.. code:: sh + + $ torxakis HelloWorld.txs + TXS >> TorXakis :: Model-Based Testing + TXS >> txsserver starting: "kubernetes.docker.internal" : 41873 + TXS >> Solver "z3" initialized : Z3 [4.8.5] + TXS >> TxsCore initialized + TXS >> LPEOps version 2019.07.05.02 TXS >> input files parsed: + TXS >> ["HelloWorld.txs"] + TXS >> tester Hello Sut + TXS >> Tester started + TXS >> test 7 + TXS >> .....1: OUT: Act { { ( Output, [ "Hello World!" ] ) } } + TXS >> .....2: IN: Act { { ( Input, [ "Pu" ] ) } } + TXS >> .....3: OUT: Act { { ( Output, [ "Hello Pu!" ] ) } } + TXS >> .....4: IN: Act { { ( Input, [ "Busvccc" ] ) } } + TXS >> .....5: OUT: Act { { ( Output, [ "Hello Busvccc!" ] ) } } + TXS >> .....6: IN: Act { { ( Input, [ "Pust" ] ) } } + TXS >> .....7: OUT: Act { { ( Output, [ "Hello Pust!" ] ) } } + TXS >> PASS + TXS >> + + +After having started ``TorXakis`` , we start the tester +with ``tester Hello Sut`` , expressing that we wish to test with +model ``Hello`` and ``SUT`` connection ``Sut`` , shown in the +model file in :numref:`fig_txs_helloworld`. Then we can test 7 test steps +with ``test 7`` and, indeed, after 7 test steps it stops with +verdict ``PASS`` . A test run of 7 steps is rather small; we could +have run for 100 , 000 steps or more. ``TorXakis`` generates inputs +to the ``SUT`` , such as ``( Input, [ ""Busvccc" ] )`` , with names +satisfying the regular expression constraint. These input names are +generated from the constraint by the SMT solver. Some extra +functionality has been added in ``TorXakis`` in order to generate +quasi-random inputs, which is not normally provided by an SMT solver. +Moreover, it is checked that the outputs, +such as ``( Output, [ "Hello Busvccc!" ] )`` , are correct. diff --git a/source/examples/HelloWorld/testarchitecture.pdf b/source/examples/HelloWorld/testarchitecture.pdf new file mode 100644 index 0000000000000000000000000000000000000000..79d46f0c407e45203db2522a6eba50197e3e61c1 GIT binary patch literal 9155 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 + + +sutAdapterTorXakisModelFigure1:Testarchitecture.TXS>>afterwhichyoucanusevariousTorXakiscommands;tryh(elp)togetanoverviewofpossiblecommands,q(uit)toquitTorXakis,andtryevaluatinganexpression,tocheckwhethereverythingwassuccessfullyinstalled:TXS>>eval42-171.2SystemUnderTestThesecondthingyouneedforMBTisansut.AcoupleofexamplesforTorXakisusagecanbefoundontheExamples-pageviatheDocumentation-tabontheTorXakiswebsitehttps://torxakis.org.OneoftheexamplesistheQueue,whichhasvariousmodelsandsuts.ThereisaJavaimplementationoftheQueueinsut0/QueueServer0.java,whichwillbeoursutintheseinstructions.TheprogramisaQueue-implementationthatoersitsserviceviaaplainoldsocketinter-face.ItacceptsinputEnq(x)(Enqueue)toputintegervaluexinthequeue,anditacceptsinputDeq(Dequeue)andthenprovidesthefrstvaluefromthequeueasoutput;seeFig.2.Enq(x::Int)y::Int13579Enq(x)Deqy421701QueueServerInOutDeqFigure2:AQueueofintegers.Toexperimentwiththesut,compileitandrunit,orusetheprecompiledversion,andusetheportnumber7890.TousetheQueueweneedtoconnecttoitviatheplainoldsocketinterfaceusinganapplication2 diff --git a/source/examples/HelloWorld/yed_model_helloworld.pdf b/source/examples/HelloWorld/yed_model_helloworld.pdf new file mode 100644 index 0000000000000000000000000000000000000000..18897b3fe2124d62665199b434a432d5c4a389a9 GIT binary patch literal 158855 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 literal 0 HcmV?d00001 diff --git a/source/examples/HelloWorld/yed_model_helloworld.svg b/source/examples/HelloWorld/yed_model_helloworld.svg new file mode 100644 index 0000000..248d367 --- /dev/null +++ b/source/examples/HelloWorld/yed_model_helloworld.svg @@ -0,0 +1,1014 @@ + + + +Usingsocat,asocket-serverconnectionisopenedonport7890.Dataonthisconnectionisforwardedto/fromstandardinput/outputforexecutableHelloWorld.So,socatconstitutesthetestadapterforHelloWorld!.TheTorXakisviewoftheHelloWorld!programisablackboxreceivingnames,i.e,stringsofcharacters,onsocketwithportnumber7890,andsendingresponses,beingalsostrings,onthesamesocket.HelloWorldModelNowitistimetoconstructamodelintheTorXakismodellinglanguageTxs.Thedescriptionabovesaysthat,afteraninitialHelloWorld!,thesystemshallrepeatedlyreceivenamesandthenoutputHellowiththatname.ThebehaviourisrepresentedinthestateautomatonSTAUTDEFhelloWorldinFig.5;thecompletemodelincludingalladditionaldefnitionsisshowninFig.6.Figure5:StateautomatonforHelloWorld!InFig.5,therearethreestates:theinitialstateinit,thestatenonamewhennonamehasbeenenteredyet,andstatenamedafteranamehasbeenentered.Thetransitionfrominittononamespecifesthewelcomingmessage:onchannelOutpthemessage"HelloWorld!"isproduced.Theexclamationmark"!"indicatesthatafxedvalue,i.e.,thestring"HelloWorld!",shallbeouput.ThechannelOutpisanouputchannelfromthepointofviewoftheHelloWorld!system.Whentesting,itwillbeaninputforTorXakis,i.e.,TorXakiswillobservethismessage.Onceinstatenoname,thenextpossibleactionisaninputmessageonchannelInpleadingtostatenamed.Thepart?n::StringindicatesthattheinputmessageshallbeoftypeStringandthattheactualinputisboundtothelocalvariablen.Moreover,theinputmessagemustsatisfytheconstraintgivenbetween[[and]].Thisisaregular-expressionconstraint,itisexpressedwiththestandardfunctionstrinre(stringinregularexpression),anditrequiresthatnstartswithacapitalletterfollowedbyoneormoresmallletters.Thefnalpartofthisinputtransition,name:=n,assignstheactualmessagethatiscommunicated,i.e.,thevalueofn,tothestatevariablename,sothatitcanbelaterusedinothertransitions.Thevariablenislocaltothetransiton,whereasthestatevariablenameisglobalinthewholestateautomaton.OnceinstatenamedthenextpossibletransitionisgoingbacktononamewhileemittingonoutputchannelOutpthemessage,thatis,thestringconcatenation"Hello"++name++"!",wherenamereferstothestatevariablecontainingthevalueobtainedintheprecedingtransition.AnadditionalnodeinFig.5,whichisnotastate,givesthedeclarationofthestateautomatonasaSTAUTDEF.Itdeclaresthenameofthestateautomaton,itschannelswithmessagetypes,parameters,17 diff --git a/source/examples/Queue/index.rst b/source/examples/Queue/index.rst new file mode 100644 index 0000000..f13b049 --- /dev/null +++ b/source/examples/Queue/index.rst @@ -0,0 +1,7 @@ +.. _queue_example: + +======================================================================= +TorXakis Queue Example +======================================================================= + +The Queue example is discussed in the :ref:`sec_testing_a_queue` section of the :ref:`chp_getting_started` chapter. \ No newline at end of file diff --git a/source/examples/index.rst b/source/examples/index.rst index 5985e59..7480b14 100644 --- a/source/examples/index.rst +++ b/source/examples/index.rst @@ -18,10 +18,13 @@ Starter examples .. toctree:: :maxdepth: 1 + HelloWorld + Queue StimulusResponse Echo Adder + Advanced examples ~~~~~~~~~~~~~~~~~ diff --git a/source/getting-started.rst b/source/getting-started.rst index bf7d683..e06db91 100644 --- a/source/getting-started.rst +++ b/source/getting-started.rst @@ -1,3 +1,7 @@ + + +.. _chp_getting_started: + Getting started =============== @@ -5,25 +9,11 @@ Getting started for installation, for executing your first model-based test, and for detecting your first bug with ``TorXakis``. As an example, we use an *integer queue*. -For model-based testing you first need the tool ``TorXakis``, second, a :term:`System under Test (SUT)` -that is a Java program implementing the *queue*, third, a model specifying the behaviour -of the queue, fourth, a connection between the test tool and the ``SUT``. -When having all these ingredients, depicted -in :numref:`Image of Test architecture (Fig. %s) ` , then you can start running model-based tests. - - - -.. _figtestarchitecture: -.. figure:: images/testarchitecture.* - :alt: Test architecture - :align: center - - Test architecture - - -TorXakis Installation +Get TorXakis running --------------------- + +For model-based testing you first need the tool ``TorXakis``. Download and install ``TorXakis`` for your favourite operation system using the instructions at the :ref:`Installation chapter `. After installation you can run ``TorXakis`` in a terminal window, with .. code:: sh @@ -45,15 +35,49 @@ to check whether everything was successfully installed: TXS >> eval 42-17 +.. _sec_testing_a_queue: -System Under Test ------------------ +Testing a Queue +---------------- + +``code:`` https://github.com/TorXakis/examples/tree/main/Queue -The second thing you need for MBT is an ``SUT``. A couple of examples for ``TorXakis`` usage +A couple of examples for ``TorXakis`` usage can be found on the :ref:`Examples chapter `. -One of the examples is the *Queue*, which has various models and ``SUTs``. +One of the examples is the *Queue*, which we will now use to demonstrate the usage of ``TorXakis`` in this *getting +started* chapter. + +Test architecture +~~~~~~~~~~~~~~~~~ + +For model-based testing you first need the tool ``TorXakis``, second, a :term:`System under Test (SUT)` +that is a Java program implementing the *queue*, third, a model specifying the behaviour +of the queue, fourth, a connection between the test tool and the ``SUT``. +When having all these ingredients, depicted +in :numref:`Image of Test architecture (Fig. %s) ` , then you can start running model-based tests. + + +.. _figtestarchitecture: +.. figure:: images/testarchitecture.* + :alt: Test architecture + :align: center + + Test architecture + + +The first thing needed for MBT is a Model-Based Testing Tool, which in our case is ``TorXakis``. +The second thing you need for MBT is an ``SUT``, and third thing a ``Model``. + +System Under Test +~~~~~~~~~~~~~~~~~~~ + + +``SUT`` is an abbreviation for *System under Test*, which +refers to a system that is being tested for correct operation + +The *Queue* example has various models and ``SUTs``. There is a Java implementation of the *Queue* in ``sut0/QueueServer0.java``, which will be our ``SUT`` in these instructions. The program is a *Queue*-implementation that offers its service via a plain old socket interface. @@ -69,35 +93,80 @@ See :numref:`figqueueofints`. A Queue of integers + To experiment with the ``SUT``, compile it and run it, or use the precompiled version, and use the portnumber ``7890``. To use the *Queue* we need to connect to it via the plain old socket interface using an application that can communicate via sockets, e.g., ``telnet``, ``nc`` (``netcat``), or ``putty``. Start the Java-*Queue* in one window and -``telnet``, etc. in another, and connect them by choosing the same port number. +``telnet``, etc. in another, and connect them by choosing the same port number. |nl| + + + .. parsed-literal:: + + *User Window* *SUT Window* + + $ telnet localhost 7890 $ java -jar QueueServer0.jar 7890 + Trying 127.0.0.1... Waiting for tester + Connected to localhost. Tester connected. + Escape character is ’ˆ]’. + [ ] + Enq(42) [ 42 ] + Enq(-17) [ 42, -17 ] + Deq [ -17 ] + 42 -.. code:: - SUT Window User Window - ---------------------------------- -------------------------- - $ java -jar QueueServer0.jar 7890 $ telnet localhost 7890 - Waiting for tester Trying 127.0.0.1... - Tester connected. Connected to localhost. - [] Escape character is ’ˆ]’. - [ 42 ] Enq(42) - [ 42, -17 ] Enq(-17) - [ -17 ] Deq - 42 +.. https://docutils.sourceforge.io/docs/ref/rst/directives.html#table + .. table:: + :align: center + + ========================== ================================== + User Window SUT Window + ========================== ================================== + $ telnet localhost 7890 $ java -jar QueueServer0.jar 7890 + Trying 127.0.0.1... Waiting for tester + Connected to localhost. Tester connected. + Escape character is ’ˆ]’. + [ ] + Enq(42) [ 42 ] + Enq(-17) [ 42, -17 ] + Deq [ -17 ] + 42 + ========================== ================================== + + + + +.. .. parsed-literal:: +.. +.. *User Window* *SUT Window* +.. -------------------------- ---------------------------------- +.. $ telnet localhost 7890 $ java -jar QueueServer0.jar 7890 +.. Trying 127.0.0.1... Waiting for tester +.. Connected to localhost. Tester connected. +.. Escape character is ’ˆ]’. +.. [ ] +.. Enq(42) [ 42 ] +.. Enq(-17) [ 42, -17 ] +.. Deq [ -17 ] +.. 42 +.. Model ------ +~~~~~ In the *Queue*-example, there are also a couple of ``TorXakis`` models, written in the ``TorXakis`` modelling language ``Txs``. -One of them is ``Queue.txs``. You can view and edit the model in your favourite plain editor. +One of them is `Queue.txs `_. + +You can view and edit the model in your favourite plain editor. The model specifies an unbounded, first-in-first-out *Queue* of integers. -There are some comments in the file explaining the model; comments in ``Txs`` are either between ``{-`` and ``-}``, or after ``--`` until end-of- line. +There are some comments in the file explaining the model; comments in ``Txs`` are either between ``{-`` and ``-}``, or +after ``--`` until end-of- line. + The state-transition system of the *queue* model is graphically represented as a ``Txs`` state automaton, -called ``STAUTDEF``, in :numref:`figqstaut`. In such a representation, the ``STAUTDEF`` declaration is textually described and the transitions are visualized as a graph. +called ``STAUTDEF``, in :numref:`figqstaut`. In such a representation, the ``STAUTDEF`` declaration +is textually described and the transitions are visualized as a graph. @@ -107,7 +176,7 @@ called ``STAUTDEF``, in :numref:`figqstaut`. In such a representation, the ``STA :figwidth: 70% :align: center - State automaton for the Queue. + State automaton for the Queue. (`Qstaut.graphml `_) You can copy the file ``Queue.txs`` to a new directory; also copy the file ``.torxakis.yaml`` that contains some ``TorXakis`` @@ -144,7 +213,7 @@ and the integer values are randomly chosen, so your result might differ a bit. Model-Based Testing of the Queue --------------------------------- +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Now that we have a ``SUT`` - ``QueueServer0.java`` – and a model specifying the required behaviour of the ``SUT`` – ``Queue.txs`` –, we can start testing the ``SUT`` against its model. To test the Queue, run the ``SUT`` in one window and start ``TorXakis`` @@ -179,11 +248,11 @@ easily try bigger numbers, e.g., ``test 7777``. Now you have executed your first TXS >> A Queue Mutant ---------------- +~~~~~~~~~~~~~~~ You have now tested the ``sutQueueServer0.java`` against its model, but ``QueueServer0.java`` does not contain bugs (at least, as far as we know, but ... “testing can only show the presence of errors, -never their absence” [EWD69]_). Detecting bugs is probably more rewarding for testers, so we added in the +never their absence” [R24]_). Detecting bugs is probably more rewarding for testers, so we added in the *Queue*-example three Queue mutants, small modifications in the Java program that may make the ``SUT`` buggy. These mutants are ``sut1``, ``sut2``, and ``sut3``. You can test these ``SUT``’s with the same model to see whether you can detect (and explain?) the bugs. diff --git a/source/glossary.rst b/source/glossary.rst index 8419ec2..27f3e91 100644 --- a/source/glossary.rst +++ b/source/glossary.rst @@ -3,4 +3,7 @@ Glossary .. glossary:: System under Test (SUT) - refers to a system that is being tested for correct operation \ No newline at end of file + refers to a system that is being tested for correct operation + + :math:`f(x)` + Description \ No newline at end of file diff --git a/source/index.rst b/source/index.rst index 93fe797..f161ca8 100644 --- a/source/index.rst +++ b/source/index.rst @@ -20,10 +20,10 @@ For other versions see the `documentation overview webpage `. + + +.. _fig_usage_testarchitecture: +.. figure:: images/testarchitecture.* + :alt: Test architecture + :align: center + + Test architecture + + +System under test +~~~~~~~~~~~~~~~~~ + +The ``sut`` is the actual program, compoenent, +or system that we wish to test. The ``TorXakis`` view of an ``sut`` is +a black-box communicating with messages on its interfaces. Interfaces +can be distinguished as either an input interface, where the environment +takes the initiative and the system always accepts the action +(input-enabledness; black arrows going into the ``sut`` in Fig. 4), or +an output interface, where the system takes the initiative and the +environment always accepts (input-enabledness of the environment for the +output actions of the system; black arrows going out of the ``sut`` in +Fig. 4). Interfaces are modelled as *channels* in ``Txs``. So, an input +is a message sent by the tester to the ``sut`` on an input channel; an +output is the observation by the tester of a message from the +``sut`` on an output channel. + +An instance of behaviour of the ``sut`` is a possible sequence of input +and output actions. The goal of testing is to compare the actual +behaviour that the ``sut`` exhibits with the behaviour specified in the +model. + +Figure 4: Test architecture. + +Technically, channels are implemented as plain old sockets where +messages are line-based strings, or string-encodings of some typed data. +So, technically, the ``TorXakis`` view of an ``sut`` is a black-box +communicating with strings on a couple of sockets. + +Model +~~~~~ + +The model is written in the ``TorXakis`` modelling language +``Txs``. A model consists of a collection of definitions. There are +channel, data-type, function, constant, process, and state-automaton +definitions, which are contained in one or multiple files. In addition, +there are some testing-specific definition: connections and +en/decodings. A connection definition defines how ``TorXakis`` will +connect to the ``sut`` for test execution. It can been as a proxy for +the ``sut``: it specifies the binding of abstract channels in the model +to concrete sockets. En/decodings specify the mapping of abstract +messages (ADTs) to strings and vice versa. The next sections will +explain the details of modelling using some examples. + +The model shall specify the allowed behaviour of the ``sut``, i.e., the +allowed sequences of input and output actions exchanged on its channels. +The basic structure to describe the allowed sequences is a +state-transition system with data, called *state-automaton* in ``Txs``. +These state-transition systems can be composed using combinators +(process-algebraic operators), so that complex state-transition systems +can be constructed from simple ones. Combinators include sequencing of +transition systems, choice, guards, parallelism, synchronization, +communication, interrupt, disable, and abstraction (hiding of actions). + +The data items used in these state-transition systems are either of +standard data types such as integer, boolean, or string, or they are +user-defined algebraic data-type definitions. Also functions and +constants over data can be defined. + +Adapter +~~~~~~~ + +``TorXakis`` communicates with the ``sut`` via sockets, +so either the ``sut`` must offer a socket interface – which a lot of +real-life ``sut`` s don’t do – or the ``sut`` must be connected via an +adapter, wrapper, test harness, or glueing software, that interfaces the +``sut`` to ``TorXakis``, and that transforms the native communication +of the ``sut`` to the socket communication that ``TorXakis`` requires. +Usually, such an adapter must be manually developed. Sometimes it is +simple, e.g., transforming standard I/O into socket communication using +standard (Unix) tools like ``netcat`` or ``socat``. Sometimes, building +an adapter can be quite cumbersome, e.g., when the ``sut`` provides a +GUI. In this case tools like ``Selenium`` [R56]_ or ``Sikuli`` [R57]_ may +be used to adapt a GUI or a web interface to socket communication. An +adapter is not specific for MBT but is required for any form of +automated test execution. If traditional test automation is in place +then this infrastructure can quite often be reused as adapter for MBT. + +Even when a ``sut`` communicates over sockets, there is still a caveat: +sockets have asynchronous communication whereas models and test +generation assume synchronous communication. This may lead to race +conditions if a model offers the choice between an input and an output. +If this occurs the asynchronous communication of the sockets must be +explicitly modelled, e.g., as queues in the model. + +Testing +~~~~~~~ + +Once we have an ``sut``, a model, and an adapter, we can +use ``TorXakis`` to run tests. The tool performs on-the-fly testing of +the ``sut`` by automatically generating test steps from the model and +immediately executing these test steps on the ``sut``, while observing +and checking the responses from the ``sut``. A test case may consist of +thousands of such test steps, which makes it also suitable for +reliability testing, and it will eventually lead to a verdict for the +test case. + +Other features +~~~~~~~~~~~~~~ + +Other functionality of ``TorXakis`` includes +calculation of data values, constraint solving for data variables, +exploration of a model without connecting to an ``sut`` (closed +simulation), and simulation of a model in an environment, i.e., +simulation while connected to the outside world (open simulation). diff --git a/source/usage/index.rst b/source/usage/index.rst new file mode 100644 index 0000000..c31e5a4 --- /dev/null +++ b/source/usage/index.rst @@ -0,0 +1,15 @@ +.. _usage_chapter: + + + +Usage +===== + +In this chapter we going to explain the usage of ``TorXakis`` in more detail. + +.. toctree:: + :maxdepth: 1 + :caption: Contents: + + + trace-replay diff --git a/source/trace-replay.rst b/source/usage/trace-replay.rst similarity index 100% rename from source/trace-replay.rst rename to source/usage/trace-replay.rst