A guide to VHDL for digital system modeling. It aims to show how VHDL modeling fits into a design flow, starting from high-level design and proceeding through detailed design and verification, synthesis, FPGA place and route, and final timing verification.
The use of mathematical methods in the development of software is essential when reliable systems are sought; in particular they are now strongly recommended by the official norms adopted in the production of critical software. Program Verification is the area of computer science that studies mathematical methods for checking that a program conforms to its specification. This text is a self-contained introduction to program verification using logic-based methods, presented in the broader context of formal methods for software engineering. The idea of specifying the behaviour of individual software components by attaching contracts to them is now a widely followed approach in program development, which has given rise notably to the development of a number of behavioural interface specification languages and program verification tools. A foundation for the static verification of programs based on contract-annotated routines is laid out in the book. These can be independently verified, which provides a modular approach to the verification of software. The text assumes only basic knowledge of standard mathematical concepts that should be familiar to any computer science student. It includes a self-contained introduction to propositional logic and first-order reasoning with theories, followed by a study of program verification that combines theoretical and practical aspects - from a program logic (a variant of Hoare logic for programs containing user-provided annotations) to the use of a realistic tool for the verification of C programs (annotated using the ACSL specification language), through the generation of verification conditions and the static verification of runtime errors.
This book constitutes the proceedings of the 38th International Conference on Computer Safety, Reliability and Security, SAFECOMP 2019, held in Turku, Finland, in September 2019. The 16 full and 5 short papers included in this volume were carefully reviewed and selected from 65 submissions. They were organized in topical sections named: formal verification; autonomous driving; safety and reliability modeling; security engineering and risk assessment; safety argumentation; verification and validation of autonomous systems; and interactive systems and design validation.
Maude is a language and system based on rewriting logic. In this comprehensive account, you´ll discover how Maude and its formal tool environment can be used in three mutually reinforcing ways: as a declarative programming language, as an executable formal specification language, and as a formal verification system. Examples used throughout the book illustrate key concepts, features, and the many practical uses of Maude.
This book constitutes the refereed proceedings of the 12th International Conference on the Quality of Information and Communications Technology, QUATIC 2019, held in Ciudad Real, Spain, in September 2019. The 19 full papers and 6 short papers were carefully reviewed and selected from 66 submissions. The papers are organized in topical sections: security & privacy, requirements engineering, business processes, evidence-based software engineering, process improvement and assessment, model-driven engineering & software maintenance, data science & services, and verification and validation.
Formal specifications are an important tool for the construction, verification and analysis of systems, since without it is hardly possible to explain whether a system worked correctly or showed an expected behavior. This book proposes the use of representation theorems as a means to develop an understanding of all models of a specification in order to exclude possible unintended models, demonstrating the general methodology with representation theorems for applications in qualitative spatial reasoning, data stream processing, and belief revision. For qualitative spatial reasoning, it develops a model of spatial relatedness that captures the scaling context with hierarchical partitions of a spatial domain, and axiomatically characterizes the resulting relations. It also shows that various important properties of stream processing, such as prefix-determinedness or various factorization properties can be axiomatized, and that the axioms are fulfilled by natural classes of stream functions. The third example is belief revision, which is concerned with the revision of knowledge bases under new, potentially incompatible information. In this context, the book considers a subclass of revision operators, namely the class of reinterpretation operators, and characterizes them axiomatically. A characteristic property of reinterpretation operators is that of dissolving potential inconsistencies by reinterpreting symbols of the knowledge base. Intended for researchers in theoretical computer science or one of the above application domains, the book presents results that demonstrate the use of representation theorems for the design and evaluation of formal specifications, and provide the basis for future application-development kits that support application designers with automatically built representations.
A decision procedure is an algorithm that, given a decision problem, terminates with a correct yes/no answer. Here, the authors focus on theories that are expressive enough to model real problems, but are still decidable. Specifically, the book concentrates on decision procedures for first-order theories that are commonly used in automated verification and reasoning, theorem-proving, compiler optimization and operations research. The techniques described in the book draw from fields such as graph theory and logic, and are routinely used in industry. The authors introduce the basic terminology of satisfiability modulo theories and then, in separate chapters, study decision procedures for each of the following theories: propositional logic; equalities and uninterpreted functions; linear arithmetic; bit vectors; arrays; pointer logic; and quantified formulas. They also study the problem of deciding combined theories and dedicate a chapter to modern techniques based on an interplay between a SAT solver and a decision procedure for the investigated theory. This textbook has been used to teach undergraduate and graduate courses at ETH Zurich, at the Technion, Haifa, and at the University of Oxford. Each chapter includes a detailed bibliography and exercises. Lecturers´ slides and a C++ library for rapid prototyping of decision procedures are available from the authors´ website.
Automated testing is a cornerstone of agile development. An effective testing strategy will deliver new functionality more aggressively, accelerate user feedback, and improve quality. However, for many developers, creating effective automated tests is a unique and unfamiliar challenge. xUnit Test Patterns is the definitive guide to writing automated tests using xUnit, the most popular unit testing framework in use today. Agile coach and test automation expert Gerard Meszaros describes 68 proven patterns for making tests easier to write, understand, and maintain. He then shows you how to make them more robust and repeatable--and far more cost-effective. Loaded with information, this book feels like three books in one. The first part is a detailed tutorial on test automation that covers everything from test strategy to in-depth test coding. The second part, a catalog of 18 frequently encountered test smells, provides trouble-shooting guidelines to help you determine the root cause of problems and the most applicable patterns. The third part contains detailed descriptions of each pattern, including refactoring instructions illustrated by extensive code samples in multiple programming languages. Topics covered include Writing better tests--and writing them faster The four phases of automated tests: fixture setup, exercising the system under test, result verification, and fixture teardown Improving test coverage by isolating software from its environment using Test Stubs and Mock Objects Designing software for greater testability Using test smells (including code smells, behavior smells, and project smells) to spot problems and know when and how to eliminate them Refactoring tests for greater simplicity, robustness, and execution speed This book will benefit developers, managers, and testers working with any agile or conventional development process, whether doing test-driven development or writing the tests last. While the patterns and smells are especially applicable to all members of the xUnit family, they also apply to next-generation behavior-driven development frameworks such as RSpec and JBehave and to other kinds of test automation tools, including recorded test tools and data-driven test tools such as Fit and FitNesse. Visual Summary of the Pattern Language Foreword Preface Acknowledgments Introduction Refactoring a Test PART I: The Narratives Chapter 1 A Brief Tour Chapter 2 Test Smells Chapter 3 Goals of Test Automation Chapter 4 Philosophy of Test Automation Chapter 5 Principles of Test Automation Chapter 6 Test Automation Strategy Chapter 7 xUnit Basics Chapter 8 Transient Fixture Management Chapter 9 Persistent Fixture Management Chapter 10 Result Verification Chapter 11 Using Test Doubles Chapter 12 Organizing Our Tests Chapter 13 Testing with Databases Chapter 14 A Roadmap to Effective Test Automation PART II: The Test Smells Chapter 15 Code Smells Chapter 16 Behavior Smells Chapter 17 Project Smells PART III: The Patterns Chapter 18 Test Strategy Patterns Chapter 19 xUnit Basics Patterns Chapter 20 Fixture Setup Patterns Chapter 21 Result Verification Patterns Chapter 22 Fixture Teardown Patterns Chapter 23 Test Double Patterns Chapter 24 Test Organization Patterns Chapter 25 Database Patterns Chapter 26 Design-for-Testability Patterns Chapter 27 Value Patterns PART IV: Appendixes Appendix A Test Refactorings Appendix B xUnit Terminology Appendix C xUnit Family Members Appendix D Tools Appendix E Goals and Principles Appendix F Smells, Aliases, and Causes Appendix G Patterns, Aliases, and Variations Glossary References Inde
This book constitutes the refereed proceedings of the 19th International Conference on Embedded Computer Systems: Architectures, Modeling, and Simulation, SAMOS 2019, held in Pythagorion, Samos, Greece, in July 2019. The 21 regular papers presented were carefully reviewed and selected from 55 submissions. The papers are organized in topical sections on system design space exploration; deep learning optimization; system security; multi/many-core scheduling; system energy and heat management; many-core communication; and electronic system-level design and verification. In addition there are 13 papers from three special sessions which were organized on topics of current interest: insights from negative results; machine learning implementations; and European projects.