[go: up one dir, main page]
More Web Proxy on the site http://driver.im/ skip to main content
research-article
Open access

A Formal Framework of Software Product Line Analyses

Published: 23 April 2021 Publication History

Abstract

A number of product-line analysis approaches lift analyses such as type checking, model checking, and theorem proving from the level of single programs to the level of product lines. These approaches share concepts and mechanisms that suggest an unexplored potential for reuse of key analysis steps and properties, implementation, and verification efforts. Despite the availability of taxonomies synthesizing such approaches, there still remains the underlying problem of not being able to describe product-line analyses and their properties precisely and uniformly. We propose a formal framework that models product-line analyses in a compositional manner, providing an overall understanding of the space of family-based, feature-based, and product-based analysis strategies. It defines precisely how the different types of product-line analyses compose and inter-relate. To ensure soundness, we formalize the framework, providing mechanized specification and proofs of key concepts and properties of the individual analyses. The formalization provides unambiguous definitions of domain terminology and assumptions as well as solid evidence of key properties based on rigorous formal proofs. To qualitatively assess the generality of the framework, we discuss to what extent it describes five representative product-line analyses targeting the following properties: safety, performance, dataflow facts, security, and functional program properties.

References

[1]
Sven Apel, Don S. Batory, Christian Kästner, and Gunter Saake. 2013. Feature-Oriented Software Product Lines: Concepts and Implementation. Springer.
[2]
Sven Apel, Christian Kästner, and Christian Lengauer. 2013. Language-independent and automated software composition: The FeatureHouse experience. IEEE Transactions on Software Engineering 39, 1 (2013), 63--79.
[3]
Sven Apel, Alexander von Rhein, Philipp Wendler, Armin Größlinger, and Dirk Beyer. 2013. Strategies for product-line verification: Case studies and experiments. In Proceedings of the International Conference on Software Engineering (ICSE). IEEE, 482--491.
[4]
Patrizia Asirelli, Maurice H. ter Beek, Alessandro Fantechi, and Stefania Gnesi. 2011. Formal description of variability in product families. In Proceedings of the 15th International Conference on Software Product Lines (SPLC). Springer, 130--139.
[5]
R. Iris Bahar, Erica A. Frohm, Charles M. Gaona, Gary D. Hachtel, Enrico Macii, Abelardo Pardo, and Fabio Somenzi. 1997. Algebraic decision diagrams and their applications. Formal Methods in System Design 10, 2/3 (1997), 171--206.
[6]
Christel Baier and Joost-Pieter Katoen. 2008. Principles of Model Checking (Representation and Mind Series). The MIT Press.
[7]
Christel Baier and Marta Kwiatkowska. 1998. On the verification of qualitative properties of probabilistic processes under fairness constraints. Inform. Process. Lett. 66, 2 (1998), 71--79.
[8]
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.
[9]
Eric Bodden, Társis Tolêdo, Márcio Ribeiro, Claus Brabrand, Paulo Borba, and Mira Mezini. 2013. : Statically analyzing software product lines in minutes instead of years. In Proceedings of the 34th ACM SIGPLAN conference on Programming Language Design and Implementation (PLDI). ACM, 355--364.
[10]
Paulo Borba, Leopoldo Teixeira, and Rohit Gheyi. 2012. A theory of software product line refinement. Theoretical Computer Science 455 (Oct. 2012), 2--30.
[11]
Claus Brabrand, Márcio Ribeiro, Társis Tolêdo, Johnni Winther, and Paulo Borba. 2013. Intraprocedural dataflow analysis for software product lines. In Transactions on Aspect-Oriented Software Development. Springer, 73--108.
[12]
Randal E. Bryant. 1992. Symbolic boolean manipulation with ordered binary-decision diagrams. Comput. Surveys 24, 3 (Sept. 1992), 293--318.
[13]
Thiago Castro, André Lanna, Vander Alves, Leopoldo Teixeira, Sven Apel, and Pierre-Yves Schobbens. 2018. All roads lead to Rome: Commuting strategies for product-line reliability analysis. Science of Computer Programming 152 (2018), 116--160.
[14]
Marsha Chechik, Benet Devereux, and Arie Gurfinkel. 2001. Model-checking infinite state-space systems with fine-grained abstractions using SPIN. In Proceedings of the 8th International SPIN Workshop on Model Checking of Software (SPIN). Springer, 16--36.
[15]
Sheng Chen and Martin Erwig. 2014. Type-based parametric analysis of program families. ACM SIGPLAN Notices 49, 9 (aug 2014), 39--51.
[16]
R. Cheung. 1980. A user-oriented software reliability model. IEEE Transactions on Software Engineering 6, 02 (March 1980), 118--125.
[17]
Philipp Chrszon, Clemens Dubslaff, Sascha Klüppelholz, and Christel Baier. 2016. Family-based modeling and analysis for probabilistic systems - featuring profeat. In Proceedings of the 19th International Conference on Fundamental Approaches to Software Engineering (FASE) (Lecture Notes in Computer Science), Vol. 9633. Springer, 287--304.
[18]
E. M. Clarke and E. A. Emerson. 1981. Design and synthesis of synchronization skeletons using branching-time temporal logic. In Logic of Programs (LNCS), Vol. 131. Springer, 52--71.
[19]
Andreas Classen, Maxime Cordy, Patrick Heymans, Axel Legay, and Pierre-Yves Schobbens. 2014. Formal semantics, modular specification, and symbolic verification of product-line behaviour. Science of Computer Programming 80 (2014), 416--439.
[20]
A. Classen, M. Cordy, P.-Y. Schobbens, P. Heymans, A. Legay, and J.-F. Raskin. 2013. Featured transition systems: Foundations for verifying variability-intensive systems and their application to LTL model checking. IEEE Transactions on Software Engineering 39, 8 (2013), 1069--1089.
[21]
Andreas Classen, Patrick Heymans, Pierre-Yves Schobbens, Axel Legay, and Jean-François Raskin. 2010. Model checking lots of systems: Efficient verification of temporal properties in software product lines. In Proceedings of the 32nd International Conference on Software Engineering (ICSE). ACM, 335--344.
[22]
Paul Clements and Linda Northrop. 2001. Software Product Lines: Practices and Patterns. Addison-Wesley Professional.
[23]
Maxime Cordy, Andreas Classen, Patrick Heymans, Pierre-Yves Schobbens, and Axel Legay. 2012. Managing evolution in software product lines : A model-checking perspective. In Proceedings of the 6th International Working Conference on Variability Modelling of Software-Intensive Systems (VAMOS). ACM, 183--191.
[24]
Maxime Cordy, Xavier Devroey, Axel Legay, Gilles Perrouin, Andreas Classen, Patrick Heymans, Pierre-Yves Schobbens, and Jean-François Raskin. 2019. A decade of featured transition systems. In From Software Engineering to Formal Methods and Tools, and Back - Essays Dedicated to Stefania Gnesi on the Occasion of Her 65th Birthday (Lecture Notes in Computer Science), Vol. 11865. Springer, 285--312.
[25]
Maxime Cordy, Patrick Heymans, Axel Legay, Pierre-Yves Schobbens, Bruno Dawagne, and Martin Leucker. 2014. Counterexample guided abstraction refinement of product-line behavioural models. In Proceedings of the 22nd ACM SIGSOFT International Symposium on Foundations of Software Engineering (FSE). ACM, 190--201.
[26]
Maxime Cordy, Pierre-Yves Schobbens, Patrick Heymans, and Axel Legay. 2013. Beyond boolean product-line model checking: Dealing with feature attributes and multi-features. In Proceedings of the 35th International Conference on Software Engineering (ICSE). IEEE, 472--481.
[27]
Krzysztof Czarnecki and Ulrich W. Eisenecker. 2000. Generative Programming: Methods, Tools, and Applications. ACM Press/Addison-Wesley Publishing Co., USA.
[28]
Krzysztof Czarnecki and Krzysztof Pietroszek. 2006. Verifying feature-based model templates against well-formedness OCL constraints. In Proceedings of the 5th International Conference on Generative Programming and Component Engineering (GPCE). ACM, 211--220.
[29]
Benjamin Delaware, William R. Cook, and Don S. Batory. 2009. Fitting the pieces together: A machine-checked model of safe composition. In Proceedings of the 7th joint meeting of the European Software Engineering Conference and the ACM SIGSOFT International Symposium on Foundations of Software Engineering, Hans van Vliet and Valérie Issarny (Eds.). ACM, 243--252.
[30]
Benjamin Delaware, William R. Cook, and Don S. Batory. 2011. Product lines of theorems. In Proceedings of the 26th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, OOPSLA 2011, part of SPLASH 2011, Portland, OR, USA, October 22-27, 2011. ACM, 595--608.
[31]
Aleksandar S. Dimovski, Claus Brabrand, and Andrzej Wąsowski. 2019. Finding suitable variability abstractions for lifted analysis. Formal Aspects of Computing 31, 2 (01 Apr 2019), 231--259.
[32]
Amador Durán, David Benavides, Sergio Segura, Pablo Trinidad, and Antonio Ruiz-Cortés. 2017. FLAME: A formal framework for the automated analysis of software product lines validated by automated specification testing. Software and Systems Modeling 16, 4 (Oct. 2017), 1049--1082.
[33]
Alessandro Fantechi and Stefania Gnesi. 2008. Formal modeling for product families engineering. In Proceedings of the 12th International Conference on Software Product Lines (SPLC). IEEE, 193--202.
[34]
Dario Fischbein, Sebastian Uchitel, and Victor Braberman. 2006. A foundation for behavioural conformance in software product line architectures. In Proceedings of the International Symposium on Software Testing and Analysis Workshop on Role of Software Architecture for Testing and Analysis (ROSATEA’06). ACM, 39--48.
[35]
B. J. Garvin and M. B. Cohen. 2011. Feature interaction faults revisited: An exploratory study. In Proceedings of the IEEE 22nd International Symposium on Software Reliability Engineering. IEEE, 90--99.
[36]
Carlo Ghezzi and Amir Molzam Sharifloo. 2013. Model-based verification of quantitative non-functional properties for software product lines. Information and Software Technology 55, 3 (March 2013), 508--524.
[37]
Joel Greenyer, Christian Brenner, Maxime Cordy, Patrick Heymans, and Erika Gressi. 2013. Incrementally synthesizing controllers from scenario-based product line specifications. In Proceedings of The ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE). ACM, 433--443.
[38]
Arne Haber, Holger Rendel, Bernhard Rumpe, and Ina Schaefer. 2011. Delta modeling for software architectures. In Proceedings of the 7th Tagungsband - Dagstuhl-Workshop: Modellbasierte Entwicklung eingebetteter Systeme (MBEES). 1--10.
[39]
Ernst Moritz Hahn, Holger Hermanns, and Lijun Zhang. 2011. Probabilistic reachability for parametric Markov models. International Journal on Software Tools for Technology Transfer (STTT) 13, 1 (2011), 3--19.
[40]
Reiner Hähnle and Ina Schaefer. 2012. A liskov principle for delta-oriented programming. In Leveraging Applications of Formal Methods, Verification and Validation. Technologies for Mastering Change - 5th International Symposium, ISoLA 2012, Proceedings, Part I. Springer, 32--46.
[41]
Gerard Holzmann. 2003. Spin Model Checker, the: Primer and Reference Manual (first ed.). Addison-Wesley Professional.
[42]
Michael Huth, Radha Jagadeesan, and David Schmidt. 2001. Modal transition systems: A foundation for three-valued program analysis. In Programming Languages and Systems. Lecture Notes in Computer Science, Vol. 2028. Springer, 155--169.
[43]
K. C. Kang, S. G. Cohen, J. A. Hess, W. E. Novak, and A. S. Peterson. 1990. Feature-Oriented Domain Analysis (FODA) Feasibility Study. Technical Report. Carnegie-Mellon University, Software Engineering Institute.
[44]
Christian Kästner, Sven Apel, and Martin Kuhlemann. 2008. Granularity in software product lines. In Proceedings of the 30th International Conference on Software Engineering (ICSE). ACM, 311--320.
[45]
Christian Kästner, Sven Apel, and Martin Kuhlemann. 2009. A model of refactoring physically and virtually separated features. In Proceedings of the 8th International Conference on Generative Programming and Component Engineering (GPCE’09). ACM, 157--166.
[46]
Sergiy Kolesnikov, Alexander von Rhein, Claus Hunsen, and Sven Apel. 2013. A comparison of product-based, feature-based, and family-based type checking. In Proceedings of 12th International Conference on Generative Programming: Concepts and Experiences (GPCE’13). ACM, 115--124.
[47]
Matthias Kowal, Max Tschaikowski, Mirco Tribastone, and Ina Schaefer. 2015. Scaling size and parameter spaces in variability-aware software performance models. In Proceedings of the 30th IEEE/ACM International Conference on Automated Software Engineering (ASE). IEEE, 407--417.
[48]
M. Kwiatkowska, G. Norman, and D. Parker. 2011. PRISM 4.0: Verification of probabilistic real-time systems. In Proceedings of the 23rd International Conference on Computer Aided Verification (CAV) (Lecture Notes in Computer Science), Vol. 6806. Springer, 585--591.
[49]
André Lanna, Thiago Castro, Vander Alves, Genaina Rodrigues, Pierre-Yves Schobbens, and Sven Apel. 2017. Feature-family-based reliability analysis of software product lines. Information and Software Technology 94 (2017), 59--81.
[50]
Michael Lienhardt, Ferruccio Damiani, Lorenzo Testa, and Gianluca Turin. 2018. On checking delta-oriented product lines of statecharts. Science of Computer Programming 166 (2018), 3--34.
[51]
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) (ICSE’16). ACM, 643--654.
[52]
Jens Meinicke, Thomas Thüm, Reimar Schröter, Fabian Benduhn, and Gunter Saake. 2014. An overview on analysis tools for software product lines. In Proceedings of the 18th International Software Product Line Conference (SPLC). ACM, 94--101.
[53]
Bertrand Meyer. 1992. Applying “design by contract”. Computer 25, 10 (Oct. 1992), 40--51.
[54]
Jan Midtgaard, Aleksandar S. Dimovski, Claus Brabrand, and Andrzej Wąsowski. 2015. Systematic derivation of correct variability-aware program analyses. Science of Computer Programming 105 (July 2015), 145--170.
[55]
Mukelabai Mukelabai, Damir Nešić, Salome Maro, Thorsten Berger, and Jan-Philipp Steghöfer. 2018. Tackling combinatorial explosion: A study of industrial needs and practices for analyzing highly configurable systems. In Proceedings of the 33rd ACM/IEEE International Conference on Automated Software Engineering. ACM, 155--166.
[56]
Laís Neves, Leopoldo Teixeira, Demóstenes Sena, Vander Alves, Uirá Kulezsa, and Paulo Borba. 2011. Investigating the safe evolution of software product lines. In Proceedings of the 10th ACM international conference on Generative programming and component engineering - GPCE ’11, Vol. 47. ACM, 33--42.
[57]
Sam Owre and Natarajan Shankar. 2001. Theory Interpretations in PVS. Technical Report. NASA Langley Research Center.
[58]
S. Owre, N. Shankar, J. M. Rushby, and D. W. J. Stringer-Calvert. 2001. PVS Language Reference. Computer Science Laboratory, SRI International, Menlo Park, CA.
[59]
Leonardo Passos, Leopoldo Teixeira, Nicolas Dintzner, Sven Apel, Andrzej Wasowski, Krzysztof Czarnecki, Paulo Borba, and Jianmei Guo. 2016. Coevolution of variability models and related software artifacts: A fresh look at evolution patterns in the Linux kernel. Empirical Software Engineering 21, 4 (05 2016), 1744--1793.
[60]
Sven Peldszus, Daniel Strüber, and Jan Jürjens. 2018. Model-based security analysis of feature-oriented software product lines. In Proceedings of the 17th ACM SIGPLAN International Conference on Generative Programming: Concepts and Experiences (GPCE 2018). ACM, 93--106.
[61]
Malte Plath and Mark Ryan. 2001. Feature integration using a feature construct. Science of Computer Programming 41, 1 (2001), 53--84.
[62]
Amir Pnueli. 1977. The temporal logic of programs. In Proceedings of the 18th Annual Symposium on Foundations of Computer Science (SFCS ’77). IEEE, 46--57.
[63]
Klaus Pohl, Günter Böckle, and Frank J. van der Linden. 2005. Software Product Line Engineering: Foundations, Principles and Techniques. Springer.
[64]
Christian Prehofer. 1997. Feature-oriented programming: A fresh look at objects. In Proceedings of the 11th European Conference on Object-Oriented Programming (Lecture Notes in Computer Science), Vol. 1241. Springer, 419--443.
[65]
Genaína Nunes Rodrigues, Vander Alves, Vinicius Nunes, André Lanna, Maxime Cordy, Pierre-Yves Schobbens, Amir Molzam Sharifloo, and Axel Legay. 2015. Modeling and verification for probabilistic properties in software product lines. In Proceedings of the 16th IEEE International Symposium on High Assurance Systems Engineering (HASE). IEEE, 173--180.
[66]
Gabriela Sampaio, Paulo Borba, and Leopoldo Teixeira. 2019. Partially safe evolution of software product lines. Journal of Systems and Software 155 (2019), 17--42.
[67]
Pierre-Yves Schobbens, Patrick Heymans, Jean-Christophe Trigaux, and Yves Bontemps. 2007. Generic semantics of feature diagrams. Computer Networks 51, 2 (Feb. 2007), 456--479.
[68]
Rok Strniša, Peter Sewell, and Matthew Parkinson. 2007. The java module system: Core design and semantic definition. In Proceedings of the 22nd Annual ACM SIGPLAN Conference on Object-oriented Programming Systems and Applications (OOPSLA) (OOPSLA ’07). ACM, 499--514.
[69]
Leopoldo Teixeira, Vander Alves, Paulo Borba, and Rohit Gheyi. 2015. A product line of theories for reasoning about safe evolution of product lines. In Proceedings of the 19th International Conference on Software Product Line (SPLC). ACM, 161--170.
[70]
Maurice H. ter Beek, Ferruccio Damiani, Stefania Gnesi, Franco Mazzanti, and Luca Paolini. 2015. From featured transition systems to modal transition systems with variability constraints. In Proceedings of the 13th International Conference on Software Engineering and Formal Methods (SEFM). Springer, 344--359.
[71]
Maurice H. ter Beek, Ferruccio Damiani, Stefania Gnesi, Franco Mazzanti, and Luca Paolini. 2019. On the expressiveness of modal transition systems with variability constraints. Science of Computer Programming 169 (2019), 1--17.
[72]
Maurice H. ter Beek, Alessandro Fantechi, Stefania Gnesi, and Franco Mazzanti. 2016. Modelling and analysing variability in product families: Model checking of modal transition systems with variability constraints. Journal of Logical and Algebraic Methods in Programming 85, 2 (2016), 287--315.
[73]
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. Comput. Surveys 47, 1 (June 2014), 1--45.
[74]
Thomas Thüm, Ina Schaefer, Martin Kuhlemann, and Sven Apel. 2011. Proof composition for deductive verification of software product lines. In 2011 IEEE 4th International Conference on Software Testing, Verification and Validation Workshops. IEEE, 270--277.
[75]
Thomas Thüm, Leopoldo Teixeira, Klaus Schmid, Eric Walkingshaw, Mukelabai Mukelabai, Mahsa Varshosaz, Goetz Botterweck, Ina Schaefer, and Timo Kehrer. 2019. Towards efficient analysis of variation in time and space. In Proceedings of the 23rd International Systems and Software Product Line Conference (SPLC) (SPLC ’19). ACM, 57--64.
[76]
J. van Gurp, J. Bosch, and M. Svahnberg. 2001. On the notion of variability in software product lines. In Proceedings Working IEEE/IFIP Conference on Software Architecture. IEEE, 45--54.
[77]
Mahsa Varshosaz, Lars Luthmann, Paul Mohr, Malte Lochau, and Mohammad Reza Mousavi. 2019. Modal transition system encoding of featured transition systems. Journal of Logical and Algebraic Methods in Programming 106 (2019), 1--28.
[78]
Alexander von Rhein, Sven Apel, Christian Kästner, Thomas Thüm, and Ina Schaefer. 2013. The PLA model: on the combination of product-line analyses. In Proceedings of the Seventh International Workshop on Variability Modelling of Software-intensive Systems (VaMoS). ACM, 1.
[79]
Alexander von Rhein, Jörg Liebig, Andreas Janker, Christian Kästner, and Sven Apel. 2018. Variability-aware static analysis at scale: An empirical study. ACM Transactions on Software Engineering and Methodology (TOSEM) 27, 4, Article 18 (Nov. 2018), 33 pages.
[80]
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 (jan. 2016), 125--145.
[81]
Eric Walkingshaw, Christian Kästner, Martin Erwig, Sven Apel, and Eric Bodden. 2014. Variational data structures: Exploring tradeoffs in computing with variability. In Onward! 2014, Proceedings of the 2014 ACM International Symposium on New Ideas, New Paradigms, and Reflections on Programming & Software, part of SPLASH ’14. ACM, 213--226.
[82]
Stephan Weißleder and Hartmut Lackner. 2013. Top-down and bottom-up approach for model-based testing of product lines. In Proceedings 8th Workshop on Model-Based Testing, (MBT), Alexander K. Petrenko and Holger Schlingloff (Eds.), Vol. 111. EPTCS, 82--94.

Cited By

View all
  • (2024)On the Expressive Power of Languages for Static VariabilityProceedings of the ACM on Programming Languages10.1145/36897478:OOPSLA2(1018-1050)Online publication date: 8-Oct-2024
  • (2024)How Easy is SAT-Based Analysis of a Feature Model?Proceedings of the 18th International Working Conference on Variability Modelling of Software-Intensive Systems10.1145/3634713.3634733(149-151)Online publication date: 7-Feb-2024
  • (2024)A structural taxonomy for lifted software product line analysesJournal of Systems and Software10.1016/j.jss.2024.112280(112280)Online publication date: Dec-2024

Recommendations

Comments

Please enable JavaScript to view thecomments powered by Disqus.

Information & Contributors

Information

Published In

cover image ACM Transactions on Software Engineering and Methodology
ACM Transactions on Software Engineering and Methodology  Volume 30, Issue 3
Continuous Special Section: AI and SE
July 2021
600 pages
ISSN:1049-331X
EISSN:1557-7392
DOI:10.1145/3450566
  • Editor:
  • Mauro Pezzè
Issue’s Table of Contents
This work is licensed under a Creative Commons Attribution International 4.0 License.

Publisher

Association for Computing Machinery

New York, NY, United States

Publication History

Published: 23 April 2021
Accepted: 01 December 2020
Revised: 01 December 2020
Received: 01 June 2020
Published in TOSEM Volume 30, Issue 3

Permissions

Request permissions for this article.

Check for updates

Author Tags

  1. Software product lines
  2. product-line analysis

Qualifiers

  • Research-article
  • Research
  • Refereed

Funding Sources

  • CNPq
  • CAPES
  • German Research Foundation
  • FNR Luxembourg
  • FAPDF
  • FACEPE

Contributors

Other Metrics

Bibliometrics & Citations

Bibliometrics

Article Metrics

  • Downloads (Last 12 months)177
  • Downloads (Last 6 weeks)23
Reflects downloads up to 13 Dec 2024

Other Metrics

Citations

Cited By

View all
  • (2024)On the Expressive Power of Languages for Static VariabilityProceedings of the ACM on Programming Languages10.1145/36897478:OOPSLA2(1018-1050)Online publication date: 8-Oct-2024
  • (2024)How Easy is SAT-Based Analysis of a Feature Model?Proceedings of the 18th International Working Conference on Variability Modelling of Software-Intensive Systems10.1145/3634713.3634733(149-151)Online publication date: 7-Feb-2024
  • (2024)A structural taxonomy for lifted software product line analysesJournal of Systems and Software10.1016/j.jss.2024.112280(112280)Online publication date: Dec-2024

View Options

View options

PDF

View or Download as a PDF file.

PDF

eReader

View online with eReader.

eReader

Login options

Full Access

Media

Figures

Other

Tables

Share

Share

Share this Publication link

Share on social media