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 second edition continues to provide a clear introduction to formal reasoning which is both relevant to the needs of modern computer science and rigorous enough for practical application. Improvements have been made throughout, with many extra and expanded sections and exercises. The coverage of model-checking has been substantially updated.
Get up to speed on Git for tracking, branching, merging, and managing code revisions. Through a series of step-by-step tutorials, this practical guide takes you quickly from Git fundamentals to advanced techniques, and provides friendly yet rigorous advice for navigating the many functions of this open source version control system. This thoroughly revised edition also includes tips for manipulating trees, extended coverage of the reflog and stash, and a complete introduction to the GitHub repository. Git lets you manage code development in a virtually endless variety of ways, once you understand how to harness the system?s flexibility. This book shows you how. * Learn how to use Git for several real-world development scenarios * Gain insight into Git?s common-use cases, initial tasks, and basic functions * Use the system for both centralized and distributed version control * Learn how to manage merges, conflicts, patches, and diffs * Apply advanced techniques such as rebasing, hooks, and ways to handle submodules * Interact with Subversion (SVN) repositories?including SVN to Git conversions * Navigate, use, and contribute to open source projects though GitHub
Bachelor Thesis from the year 2009 in the subject Computer Science - Commercial Information Technology, grade: 1,3, University of Frankfurt (Main) (Institute of Information Systems), language: English, abstract: The Information Systems (IS) research discipline is undergoing a serious identity crisis, seeking its sphere of activity to be relevant in practice and rigorous in scientific considerations. One reason for this is the strengthening of the Design Science approach. This new discipline developed as a synergy from aspects of engineering, architecture, and industrial design and is employed in the design of IT artifacts and software systems. Design Science is becoming a powerful trend in IS research (Vahidov 2006). It gives the IS discipline a new and more detailed focal point as pertains to the application of software and IT artifact development which is growing in importance in IS research over the time (Weber 2003; Orlikowski and Iacono 2001; Cross 2001). IS practitioners ask for new and innovative design approaches, dealing with the evolving organizational and inter-organizational tasks. The way these tasks are executed, in close cooperation with the practical business world, seems to be insufficiently considered. The debate in IS research is carried out between traditional scientists and the knowledge-producing researchers/practitioners and ´´it could be argued that research aimed at developing IT systems, at improving IT practice, has been more successful and important than traditional scientific attempts to understand it´´ (March and Smith 1995, p. 252). IS researchers are mainly focused on the behavioral impact of new IT solutions within a business unit. These concepts are needed to describe the relationship between the humans and the technology. However, this way of conducting research is descriptive and evaluative. Instead of telling ´´what is´´ or ´´what will be´´, Design Science is giving guidance as to ´´how to do´´ things (Walls et al. 1992). The importance of this new approach is given through the rapid development of business needs and the increased necessity to solve business problems through the implementation of IT solutions. The knowledge base for designing new solutions has not yet been fully developed. IT consultants borrow knowledge from reference disciplines and apply this knowledge to present problems. This way of providing solutions is not compatible with Design Science as an area of research. A relevant design approach needs to give new answers to phenomena thus far unsolved. However, the IS discipline has not yet established a solid groundwork for Design Science within its discipline.
In Distributed Algorithms , Nancy Lynch provides a blueprint for designing, implementing, and analyzing distributed algorithms. She directs her book at a wide audience, including students, programmers, system designers, and researchers. Distributed Algorithms contains the most significant algorithms and impossibility results in the area, all in a simple automata-theoretic setting. The algorithms are proved correct, and their complexity is analyzed according to precisely defined complexity measures. The problems covered include resource allocation, communication, consensus among distributed processes, data consistency, deadlock detection, leader election, global snapshots, and many others. The material is organized according to the system model-first by the timing model and then by the interprocess communication mechanism. The material on system models is isolated in separate chapters for easy reference. The presentation is completely rigorous, yet is intuitive enough for immediate comprehension. This book familiarizes readers with important problems, algorithms, and impossibility results in the area: readers can then recognize the problems when they arise in practice, apply the algorithms to solve them, and use the impossibility results to determine whether problems are unsolvable. The book also provides readers with the basic mathematical tools for designing new algorithms and proving new impossibility results. In addition, it teaches readers how to reason carefully about distributed algorithms-to model them formally, devise precise specifications for their required behavior, prove their correctness, and evaluate their performance with realistic measures.
Computer Vision: Algorithms and Applications explores the variety of techniques commonly used to analyze and interpret images. It also describes challenging real-world applications where vision is being successfully used, both for specialized applications such as medical imaging, and for fun, consumer-level tasks such as image editing and stitching, which students can apply to their own personal photos and videos. More than just a source of ´´recipes,´´ this exceptionally authoritative and comprehensive textbook/reference also takes a scientific approach to basic vision problems, formulating physical models of the imaging process before inverting them to produce descriptions of a scene. These problems are also analyzed using statistical models and solved using rigorous engineering techniques. Topics and features: structured to support active curricula and project-oriented courses, with tips in the Introduction for using the book in a variety of customized courses; presents exercises at the end of each chapter with a heavy emphasis on testing algorithms and containing numerous suggestions for small mid-term projects; provides additional material and more detailed mathematical topics in the Appendices, which cover linear algebra, numerical techniques, and Bayesian estimation theory; suggests additional reading at the end of each chapter, including the latest research in each sub-field, in addition to a full Bibliography at the end of the book; supplies supplementary course material for students at the associated website, for an upper-level undergraduate or graduate-level course in computer science or engineering, this textbook focuses on basic techniques that work under real-world conditions and encourages students to push their creative boundaries. Its design and exposition also make it eminently suitable as a unique reference to the fundamental techniques and current research literature in computer vision.