skip to main content
article

Measuring effectiveness of sample-based product-line testing

Published:07 April 2020Publication History
Skip Abstract Section

Abstract

Recent research on quality assurance (QA) of configurable software systems (e.g., software product lines) proposes different analysis strategies to cope with the inherent complexity caused by the well-known combinatorial-explosion problem. Those strategies aim at improving efficiency of QA techniques like software testing as compared to brute-force configuration-by-configuration analysis. Sampling constitutes one of the most established strategies, defining criteria for selecting a drastically reduced, yet sufficiently diverse subset of software configurations considered during QA. However, finding generally accepted measures for assessing the impact of sample-based analysis on the effectiveness of QA techniques is still an open issue. We address this problem by lifting concepts from single-software mutation testing to configurable software. Our framework incorporates a rich collection of mutation operators for product lines implemented in C to measure mutation scores of samples, including a novel family-based technique for product-line mutation detection. Our experimental results gained from applying our tool implementation to a collection of subject systems confirms the widely-accepted assumption that pairwise sampling constitutes the most reasonable efficiency/effectiveness trade-off for sample-based product-line testing.

References

  1. Iago Abal, Jean Melo, Stefan Stanciulescu, Claus Brabrand, Márcio Ribeiro, and Andrzej Wasowski. 2018. Variability Bugs in Highly Configurable Systems: A Qualitative Analysis. ACM Trans. Softw. Eng. Methodol. 26, 3, Article 10 (Jan. 2018), 34 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  2. Hiralal Agrawal, Richard A. DeMillo, Bob Hathaway, William Hsu, Wynne Hsu, E. W. Krauser, R. J. Martin, Aditya P. Mathur, and Eugene Spafford. 1989. Design of mutant operators for the C programming language - Technical Report. (1989).Google ScholarGoogle Scholar
  3. B. S. Ahmed, K. Z. Zamli, W. Afzal, and M. Bures. 2017. Constrained Interaction Testing: A Systematic Literature Study. IEEE Access 5 (2017), 25706-25730.Google ScholarGoogle ScholarCross RefCross Ref
  4. Mustafa Al-Hajjaji, Fabian Benduhn, Thomas Thüm, Thomas Leich, and Gunter Saake. 2016. Mutation Operators for Preprocessor-Based Variability. In Proceedings of the Tenth International Workshop on Variability Modelling of Software-intensive Systems (VaMoS '16). ACM, New York, NY, USA, 81-88. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Mustafa Al-Hajjaji, Sebastian Krieter, Thomas Thüm, Malte Lochau, and Gunter Saake. 2016. IncLing: Efficient Product-line Testing Using Incremental Pairwise Sampling. In Proceedings of the 2016 ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences (GPCE 2016). ACM, New York, NY, USA, 144-155. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. M. Al-Hajjaji, J. Krüger, F. Benduhn, T. Leich, and G. Saake. 2017. Efficient Mutation Testing in Configurable Systems. In 2017 IEEE/ACM 2nd International Workshop on Variability and Complexity in Software Design (VACE). 2-8. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. Mustafa Al-Hajjaji, Thomas Thüm, Malte Lochau, Jens Meinicke, and Gunter Saake. 2016. Effective Product-Line Testing using Similarity-Based Product Prioritization. Software & Systems Modeling (17 Dec 2016).Google ScholarGoogle Scholar
  8. Paul Ammann and Jeff Offutt. 2016. Introduction to Software Testing. Cambridge University Press. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. P. Arcaini, A. Gargantini, and P. Vavassori. 2015. Generating Tests for Detecting Faults in Feature Models. In 2015 IEEE 8th International Conference on Software Testing, Verification and Validation (ICST). 1-10.Google ScholarGoogle Scholar
  10. H. Baller, S. Lity, M. Lochau, and I. Schaefer. 2014. Multi-objective Test Suite Optimization for Incremental Product Family Testing. In 2014 IEEE Seventh International Conference on Software Testing, Verification and Validation. 303-312. Google ScholarGoogle ScholarDigital LibraryDigital Library
  11. Don Batory. 2005. Feature Models, Grammars, and Propositional Formulas. In Software Product Lines, Henk Obbink and Klaus Pohl (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 7-20. Google ScholarGoogle ScholarDigital LibraryDigital Library
  12. David Benavides, Sergio Segura, and Antonio Ruiz-Cortés. 2010. Automated Analysis of Feature Models 20 Years Later: A Literature Review. Information Systems 35, 6 (2010), 615-636. Google ScholarGoogle ScholarDigital LibraryDigital Library
  13. Johannes Bürdek, Malte Lochau, Stefan Bauregger, Andreas Holzer, Alexander von Rhein, Sven Apel, and Dirk Beyer. 2015. Facilitating Reuse in Multi-goal Test-Suite Generation for Software Product Lines. In Fundamental Approaches to Software Engineering, Alexander Egyed and Ina Schaefer (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 84-99.Google ScholarGoogle Scholar
  14. M. Bures and B. S. Ahmed. 2017. On the Effectiveness of Combinatorial Interaction Testing: A Case Study. In 2017 IEEE International Conference on Software Quality, Reliability and Security Companion (QRS-C). 69-76.Google ScholarGoogle Scholar
  15. Luiz Carvalho, Marcio Augusto Guimarães, Márcio Ribeiro, Leonardo Fernandes, Mustafa Al-Hajjaji, Rohit Gheyi, and Thomas Thüm. 2018. Equivalent Mutants in Configurable Systems: An Empirical Study. In Proceedings of the 12th International Workshop on Variability Modelling of Software-Intensive Systems (VAMOS 2018). ACM, New York, NY, USA, 11-18. Google ScholarGoogle ScholarDigital LibraryDigital Library
  16. Anastasia Cmyrev and Ralf Reissing. 2014. Efficient and Effective Testing of Automotive Software Product Lines. Int'l J. Applied Science and Technology (IJAST) 7, 2 (2014).Google ScholarGoogle Scholar
  17. Krzysztof Czarnecki and Ulrich W Eisenecker. 2000. Generative Programming: Methods, Tools, and Applications. Vol. 16. Addison Wesley Reading. Google ScholarGoogle ScholarDigital LibraryDigital Library
  18. Paulo Anselmo da Mota Silveira Neto, Ivan do Carmo Machado, John D. McGregor, Eduardo Santana de Almeida, and Silvio Romero de Lemos Meira. 2011. A Systematic Mapping Study of Software Product Lines Testing. Inf. Softw. Technol. 53 (2011), 407-423. Issue 5. Google ScholarGoogle ScholarDigital LibraryDigital Library
  19. R. A. DeMillo, R. J. Lipton, and F. G. Sayward. 1978. Hints on Test Data Selection: Help for the Practicing Programmer. Computer 11, 4 (April 1978), 34-41. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Xavier Devroey, Gilles Perrouin, Maxime Cordy, Mike Papadakis, Axel Legay, and Pierre-Yves Schobbens. 2014. A Variability Perspective of Mutation Analysis. In Proceedings of the 22Nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 2014). ACM, New York, NY, USA, 841-844. Google ScholarGoogle ScholarDigital LibraryDigital Library
  21. Xavier Devroey, Gilles Perrouin, Maxime Cordy, Pierre-Yves Schobbens, Axel Legay, and Patrick Heymans. 2013. Towards Statistical Prioritization for Software Product Lines Testing. In Proceedings of the Eighth International Workshop on Variability Modelling of Software-Intensive Systems (VaMoS '14). ACM, New York, NY, USA, Article 10, 7 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  22. Xavier Devroey, Gilles Perrouin, Axel Legay, Pierre-Yves Schobbens, and Patrick Heymans. 2015. Covering SPL Behaviour with Sampled Configurations: An Initial Assessment. In Proceedings of the Ninth International Workshop on Variability Modelling of Software-intensive Systems (VaMoS '15). ACM, New York, NY, USA, Article 59, 8 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  23. Xavier Devroey, Gilles Perrouin, Axel Legay, Pierre-Yves Schobbens, and Patrick Heymans. 2016. Search-Based Similarity-Driven Behavioural SPL Testing. In Proceedings of the Tenth International Workshop on Variability Modelling of Software-intensive Systems (VaMoS '16). ACM, New York, NY, USA, 89-96. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Xavier Devroey, Gilles Perrouin, Mike Papadakis, Axel Legay, Pierre-Yves Schobbens, and Patrick Heymans. 2016. Featured Model-based Mutation Analysis. In Proceedings of the 38th International Conference on Software Engineering (ICSE '16). ACM, New York, NY, USA, 655-666. Google ScholarGoogle ScholarDigital LibraryDigital Library
  25. Ivan do Carmo Machado, John D. McGregor, Yguarata Cerqueira Cavalcanti, and Eduardo Santana de Almeida. 2014. On Strategies for Testing Software Product Lines: A Systematic Literature Review. Information and Software Technology 56, 10 (2014), 1183-1199. Google ScholarGoogle ScholarDigital LibraryDigital Library
  26. T. do Nascimento Ferreira, J. N. Kuk, A. Pozo, and S. R. Vergilio. 2016. Product selection based on upper confidence bound MOEA/D-DRA for testing software product lines. In 2016 IEEE Congress on Evolutionary Computation (CEC). 4135-4142.Google ScholarGoogle Scholar
  27. Emelie Engström and Per Runeson. 2011. Software Product Line Testing - A Systematic Mapping Study. Information and Software Technology 53, 1 (2011), 2-13. Google ScholarGoogle ScholarDigital LibraryDigital Library
  28. T. N. Ferreira, J. A. P. Lima, A. Strickler, J. N. Kuk, S. R. Vergilio, and A. Pozo. 2017. Hyper-Heuristic Based Product Selection for Software Product Line Testing. IEEE Computational Intelligence Magazine 12, 2 (May 2017), 34-45. Google ScholarGoogle ScholarDigital LibraryDigital Library
  29. Helson L. Jakubovski Filho, Jackson A. Prado Lima, and Silvia R. Vergilio. 2017. Automatic Generation of Search-Based Algorithms Applied to the Feature Testing of Software Product Lines. In Proceedings of the 31st Brazilian Symposium on Software Engineering (SBES'17). ACM, New York, NY, USA, 114-123. Google ScholarGoogle ScholarDigital LibraryDigital Library
  30. S. Fischer, R. E. Lopez-Herrejon, R. Ramler, and A. Egyed. 2016. A Preliminary Empirical Assessment of Similarity for Combinatorial Iteraction Testing of Software Product Lines. In 2016 IEEE/ACM 9th International Workshop on Search-Based Software Testing (SBST). 15-18. Google ScholarGoogle ScholarDigital LibraryDigital Library
  31. Brady J. Garvin, Myra B. Cohen, and Matthew B. Dwyer. 2011. Evaluating Improvements to a Meta-Heuristic Search for Constrained Interaction Testing. Empirical Software Engineering 16, 1 (01 Feb 2011), 61-102. Google ScholarGoogle ScholarDigital LibraryDigital Library
  32. Axel Halin, Alexandre Nuttinck, Mathieu Acher, Xavier Devroey, Gilles Perrouin, and Benoit Baudry. 2017. Test Them All, Is It Worth It? Assessing Configuration Sampling on the JHipster Web Development Stack. (2017). arXiv:arXiv:1710.07980 (submitted to Empirical Software Engineering).Google ScholarGoogle Scholar
  33. Evelyn Nicole Haslinger, Roberto E. Lopez-Herrejon, and Alexander Egyed. 2013. Using Feature Model Knowledge to Speed Up the Generation of Covering Arrays. In Proceedings of the Seventh International Workshop on Variability Modelling of Software-intensive Systems (VaMoS '13). ACM, New York, NY, USA, Article 16, 6 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  34. Christopher Henard, Mike Papadakis, and Yves Le Traon. 2014. Mutation-Based Generation of Software Product Line Test Configurations. In Search-Based Software Engineering, Claire Le Goues and Shin Yoo (Eds.). Springer International Publishing, 92-106.Google ScholarGoogle Scholar
  35. C. Henard, M. Papadakis, G. Perrouin, J. Klein, and Y. L. Traon. 2013. Assessing Software Product Line Testing Via Model-Based Mutation: An Application to Similarity Testing. In 2013 IEEE Sixth International Conference on Software Testing, Verification and Validation Workshops. 188-197. Google ScholarGoogle ScholarDigital LibraryDigital Library
  36. Laura Inozemtseva and Reid Holmes. 2014. Coverage is Not Strongly Correlated with Test Suite Effectiveness. In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014). ACM, NewYork, NY, USA, 435-445. Google ScholarGoogle ScholarDigital LibraryDigital Library
  37. Y. Jia and M. Harman. 2008. MILU: A Customizable, Runtime-Optimized Higher Order Mutation Testing Tool for the Full C Language. In Testing: Academic Industrial Conference - Practice and Research Techniques (TAIC PART 2008). 94-98. Google ScholarGoogle ScholarDigital LibraryDigital Library
  38. Y. Jia and M. Harman. 2011. An Analysis and Survey of the Development of Mutation Testing. IEEE Transactions on Software Engineering 37, 5 (2011), 649-678. Google ScholarGoogle ScholarDigital LibraryDigital Library
  39. Yue Jia and Mark Harman. 2014 (accessed June 6, 2018). Mutation Testing Repository. http://crestweb.cs.ucl.ac.uk/resources/mutation_testing_repository/.Google ScholarGoogle Scholar
  40. Martin Fagereng Johansen, Øystein Haugen, and Franck Fleurey. 2011. Properties of Realistic Feature Models Make Combinatorial Testing of Product Lines Feasible. In Model Driven Engineering Languages and Systems, Jon Whittle, Tony Clark, and Thomas Kühne (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 638-652. Google ScholarGoogle ScholarDigital LibraryDigital Library
  41. Martin Fagereng Johansen, Øystein Haugen, and Franck Fleurey. 2012. An Algorithm for Generating T-wise Covering Arrays from Large Feature Models. In Proceedings of the 16th International Software Product Line Conference - Volume 1 (SPLC '12). ACM, 46-55. Google ScholarGoogle ScholarDigital LibraryDigital Library
  42. René Just, Darioush Jalali, Laura Inozemtseva, Michael D. Ernst, Reid Holmes, and Gordon Fraser. 2014. Are Mutants a Valid Substitute for Real Faults in Software Testing?. In Proceedings of the 22Nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE 2014). ACM, New York, NY, USA, 654-665. Google ScholarGoogle ScholarDigital LibraryDigital Library
  43. Kyo C Kang, Sholom G Cohen, James A Hess, William E Novak, and A Spencer Peterson. 1990. Feature-Oriented Domain Analysis (FODA) Feasibility Study. Technical Report. Carnegie-Mellon Univ., Software Engineering Inst.Google ScholarGoogle Scholar
  44. D. R. Kuhn, D. R. Wallace, and A. M. Gallo. 2004. Software fault interactions and implications for software testing. IEEE Transactions on Software Engineering 30, 6 (2004), 418-421. Google ScholarGoogle ScholarDigital LibraryDigital Library
  45. Hartmut Lackner and Martin Schmidt. 2014. Towards the Assessment of Software Product Line Tests: A Mutation System for Variable Systems. In Proceedings of the 18th International Software Product Line Conference: Companion Volume for Workshops, Demonstrations and Tools - Volume 2 (SPLC '14). ACM, 62-69. Google ScholarGoogle ScholarDigital LibraryDigital Library
  46. Jihyun Lee, Sungwon Kang, and Danhyung Lee. 2012. A Survey on Software Product Line Testing. In Proceedings of the 16th International Software Product Line Conference - Volume 1 (SPLC '12). ACM, New York, NY, USA, 31-40. Google ScholarGoogle ScholarDigital LibraryDigital Library
  47. R. E. Lopez-Herrejon, S. Fischer, R. Ramler, and A. Egyed. 2015. A First Systematic Mapping Study on Combinatorial Interaction Testing for Software Product Lines. In 2015 IEEE Eighth International Conference on Software Testing, Verification and Validation Workshops (ICSTW). 1-10.Google ScholarGoogle Scholar
  48. L. Madeyski, W. Orzeszyna, R. Torkar, and M. Jozala. 2014. Overcoming the Equivalent Mutant Problem: A Systematic Literature Review and a Comparative Experiment of Second Order Mutation. IEEE Transactions on Software Engineering 40, 1 (Jan 2014), 23-42. Google ScholarGoogle ScholarDigital LibraryDigital Library
  49. Dusica Marijan, Arnaud Gotlieb, Sagar Sen, and Aymeric Hervieu. 2013. Practical Pairwise Testing for Software Product Lines. In Proceedings of the 17th International Software Product Line Conference (SPLC '13). ACM, NewYork, NY, USA, 227-235. Google ScholarGoogle ScholarDigital LibraryDigital Library
  50. Rui A. Matnei Filho and Silvia R. Vergilio. 2016. A multi-objective test data generation approach for mutation testing of feature models. Journal of Software Engineering Research and Development 4, 1 (26 Jul 2016), 4.Google ScholarGoogle ScholarCross RefCross Ref
  51. John D. McGregor. 2010. Testing a Software Product Line. Springer Berlin Heidelberg, Berlin, Heidelberg, 104-140.Google ScholarGoogle Scholar
  52. Flávio Medeiros, Christian Kästner, Márcio Ribeiro, Rohit Gheyi, and Sven Apel. 2016. A Comparison of 10 Sampling Algorithms for Configurable Systems. In Proceedings of the 38th International Conference on Software Engineering (ICSE '16). ACM, New York, NY, USA, 643-654. Google ScholarGoogle ScholarDigital LibraryDigital Library
  53. A. Jefferson Offutt and Jie Pan. 1998. Automatically Detecting Equivalent Mutants and Infeasible Paths. Software Testing, Verification and Reliability 7, 3 (1998), 165-192.Google ScholarGoogle ScholarCross RefCross Ref
  54. Jeff Offutt. 2011. A Mutation Carol: Past, Present and Future. Information and Software Technology 53, 10 (2011), 1098-1107. Special Section on Mutation Testing.Google ScholarGoogle ScholarCross RefCross Ref
  55. Sebastian Oster, Florian Markert, and Philipp Ritter. 2010. Automated Incremental Pairwise Testing of Software Product Lines. In Software Product Lines: Going Beyond, Jan Bosch and Jaejoon Lee (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 196-210. Google ScholarGoogle ScholarDigital LibraryDigital Library
  56. S. Oster, A. Wübbeke, G. Engels, and A. Schürr. 2011. A Survey of Model-Based Software Product Lines Testing. In Model-based Testing for Embedded Systems. CRC Press, 338-381.Google ScholarGoogle Scholar
  57. M. Papadakis, C. Henard, and Y. L. Traon. 2014. Sampling Program Inputs with Mutation Analysis: Going Beyond Combinatorial Interaction Testing. In 2014 IEEE Seventh International Conference on Software Testing, Verification and Validation. 1-10. Google ScholarGoogle ScholarDigital LibraryDigital Library
  58. M. Papadakis, Y. Jia, M. Harman, and Y. Le Traon. 2015. Trivial Compiler Equivalence: A Large Scale Empirical Study of a Simple, Fast and Effective Equivalent Mutant Detection Technique. In 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering, Vol. 1. 936-946. Google ScholarGoogle ScholarDigital LibraryDigital Library
  59. G. Perrouin, S. Sen, J. Klein, B. Baudry, and Y. l. Traon. 2010. Automated and Scalable T-wise Test Case Generation Strategies for Software Product Lines. In 2010 Third International Conference on Software Testing, Verification and Validation. 459-468. Google ScholarGoogle ScholarDigital LibraryDigital Library
  60. Klaus Pohl, Günter Böckle, and Frank J van Der Linden. 2005. Software Product Line Engineering: Foundations, Principles and Techniques. Springer Science & Business Media. Google ScholarGoogle ScholarDigital LibraryDigital Library
  61. Dennis Reuling, Johannes Bürdek, Serge Rotärmel, Malte Lochau, and Udo Kelter. 2015. Fault-based Product-line Testing: Effective Sample Generation Based on Feature-diagram Mutation. In Proceedings of the 19th International Conference on Software Product Line (SPLC '15). ACM, NewYork, NY, USA, 131-140. Google ScholarGoogle ScholarDigital LibraryDigital Library
  62. Ana B. Sánchez, Sergio Segura, José A. Parejo, and Antonio Ruiz-Cortés. 2017. Variability Testing in the Wild: The Drupal Case Study. Software & Systems Modeling 16, 1 (2017), 173-194. Google ScholarGoogle ScholarDigital LibraryDigital Library
  63. A. B. Sánchez, S. Segura, and A. Ruiz-Cortés. 2014. A Comparison of Test Case Prioritization Criteria for Software Product Lines. In 2014 IEEE Seventh International Conference on Software Testing, Verification and Validation. 41-50. Google ScholarGoogle ScholarDigital LibraryDigital Library
  64. Reinhard Tartler, Christian Dietrich, Julio Sincero, Wolfgang Schröder-Preikschat, and Daniel Lohmann. 2014. Static Analysis of Variability in System Software: The 90,000 #Ifdefs Issue. In Proceedings of the 2014 USENIX Conference on USENIX Annual Technical Conference (USENIX ATC'14). USENIX Association, Berkeley, CA, USA, 421-432. http://dl.acm.org/citation.cfm?id=2643634.2643677. Google ScholarGoogle ScholarDigital LibraryDigital Library
  65. Reinhard Tartler, Daniel Lohmann, Christian Dietrich, Christoph Egger, and Julio Sincero. 2012. Configuration Coverage in the Analysis of Large-scale System Software. SIGOPS Oper. Syst. Rev. 45, 3 (Jan. 2012), 10-14. Google ScholarGoogle ScholarDigital LibraryDigital Library
  66. Thomas Thüm, Sven Apel, Christian Kästner, Ina Schaefer, and Gunter Saake. 2014. A Classification and Survey of Analysis Strategies for Software Product Lines. ACM Comput. Surv. 47, 1, Article 6 (June 2014), 45 pages. Google ScholarGoogle ScholarDigital LibraryDigital Library
  67. Mahsa Varshosaz, Mustafa Al-Hajjaji, Thomas Thüm, Tobias Runge, Mohammadreza Mousavi, and Ina Schaefer. 2018. A Classification of Product Sampling for Software Product Lines. To appear.Google ScholarGoogle Scholar
  68. Alexander von Rhein, Thomas Thüm, Ina Schaefer, Jörg Liebig, and Sven Apel. 2016. Variability Encoding: From Compile-Time to Load-Time Variability. Journal of Logical and Algebraic Methods in Programming 85, 1, Part 2 (2016), 125-145. Formal Methods for Software Product Line Engineering.Google ScholarGoogle ScholarCross RefCross Ref

Index Terms

  1. Measuring effectiveness of sample-based product-line testing

            Recommendations

            Comments

            Login options

            Check if you have access through your login credentials or your institution to get full access on this article.

            Sign in

            Full Access

            • Published in

              cover image ACM SIGPLAN Notices
              ACM SIGPLAN Notices  Volume 53, Issue 9
              GPCE '18
              September 2018
              214 pages
              ISSN:0362-1340
              EISSN:1558-1160
              DOI:10.1145/3393934
              Issue’s Table of Contents
              • cover image ACM Conferences
                GPCE 2018: Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences
                November 2018
                214 pages
                ISBN:9781450360456
                DOI:10.1145/3278122

              Copyright © 2018 ACM

              Publisher

              Association for Computing Machinery

              New York, NY, United States

              Publication History

              • Published: 7 April 2020

              Check for updates

              Qualifiers

              • article

            PDF Format

            View or Download as a PDF file.

            PDF

            eReader

            View online with eReader.

            eReader
            About Cookies On This Site

            We use cookies to ensure that we give you the best experience on our website.

            Learn more

            Got it!