Bhive: Behaviour-Driven Development Meets B-Method

Total Page:16

File Type:pdf, Size:1020Kb

Bhive: Behaviour-Driven Development Meets B-Method BHive: Behaviour-Driven Development Meets B-Method by John Douglas Carter A Thesis presented to The University of Guelph In partial fulfilment of requirements for the degree of Doctor of Philosophy in Computer Science Guelph, Ontario, Canada © John Douglas Carter, March, 2017 ABSTRACT BHIVE: BEHAVIOUR-DRIVEN DEVELOPMENT MEETS B-METHOD John Douglas Carter Advisor: University of Guelph, 2017 Professor W. B. Gardner Behaviour-Driven Development (BDD) is an agile, “outside-in” approach to software development built upon semi-formal mediums for specifying the behavior of a sys- tem as it would be observed externally. Through the representation of a system as a collection of user stories and scenarios using BDD's notation, practitioners automate acceptance tests using examples of desired behavior for the envisioned system. A for- mal model created in concert with BDD tests would provide valuable insight into test validity and enhance the visibility of the problem domain. This work called BHive builds upon the formal underpinnings of BDD scenarios by mapping their “Given,” “When,” and “Then” statements to “Precondition,” “Command,” and “Postcondi- tion” constructs as introduced by Floyd-Hoare logic. We posit that this mapping allows for a B-Method representation to be created and that such a model is useful for exploring system behavior and exposing gaps in requirements and test plans. In combining BDD with B-Method through BHive, a bridge between the worlds of agile and formal is created, reaping benefits of both approaches. We also outline exten- sions to BDD tooling required for the described integration and present benefits of the BHive approach to integrating formalism within a BDD project. Acknowledgments I would like to thank the following people for their support throughout this project: • Dr. Bill Gardner for his supervision, instruction, support and patience throughout the research project. • My advisory committee for their 11th-hour contributions of time. • The support staff at the University of Guelph who were always helpful despite my living 500 km off campus. • My parents, Lynn and Don Carter, for their support. • My grandparents, the late John and Jean Murray, and Doug and Eileen Carter. • Dave Rooney, for many productive discussions on agile methods and book recommen- dations. • Marion Scott, for her support throughout the work, not the least being her enthusiasm for last-minute babysitting. iii Dedication This work is dedicated to my family: My wife, Katherine Anne Scott, who never doubted my completion and has kept the world turning for the past months of “shock work.” My sons Huck, Willie, and Abe who are anxious to have their dad back and their tree house built. John Douglas Carter Richmond, Ontario, Canada March 2017 iv Table of Contents Acknowledgments . iii Dedication . iv Table of Contents . .v List of Tables . viii List of Figures . ix Chapter 1 Introduction . .1 1.1 Agile? Formal? Why not both? . .5 1.2 Bridging agile and formal development . .8 1.3 Road map . .10 Chapter 2 Context of BHive . .11 2.1 BDD Development Process . .12 2.1.1 Concentric Development Processes . .13 2.1.2 Going Green with Test Doubles. .15 2.2 Using B-Method to Discover Problems with Global Mutable State . .16 Chapter 3 Related Work . .18 3.1 Development Approaches Leading to BDD . .18 3.1.1 Extreme Programming . .18 3.1.2 Test-Driven Development (TDD) . .20 3.2 Behaviour-Driven Development (BDD) . .25 3.2.1 BDD Tooling . .26 3.2.2 Invoking Tooling . .28 3.2.3 Tooling Packages . .29 3.3 Approaches Related to BDD . .32 3.3.1 Specification By Example . .32 3.3.2 Domain-Driven Design (DDD) . .32 3.3.3 Example-Driven Modeling (EDM) . .34 3.3.4 Acceptance Test Driven Development (ATDD) . .35 3.4 Formalisms. .35 3.4.1 B-Method . .35 3.4.2 Event-B. .37 3.4.3 Hoare Logic . .37 3.5 Combining agile and formal methods . .38 3.5.1 Specification-Driven Development . .38 3.5.2 Formal Specification-Driven Development . .40 v Chapter 4 Approach . .42 4.1 The Search for a Third Way. .42 4.2 Theoretical Underpinnings of BHive. .46 4.2.1 Naming. .48 4.2.2 Types and Constants. .48 4.2.3 State . .50 4.2.4 Scenarios . .51 4.2.5 BHive Directives . .53 4.2.6 Guidelines and Practices for Applying BHive . .57 4.3 Joining BHive and Behave. .58 4.3.1 Features . .60 4.3.2 Scenarios . .60 4.3.3 Steps . .62 4.3.4 Step Functions . .62 4.3.5 Implementing with Behave . .68 4.3.6 Integrating BHive. .72 4.3.7 Synthesis of “Start_Machine” . .75 4.3.8 Test Case Generation . .76 4.3.9 Scenario Outlines . .79 4.3.10 Typing in BHive. .79 4.4 Complete Example. .80 Chapter 5 Case Study . .85 5.1 Introducing the IPTV Application . .87 5.1.1 Launching IPTV. .88 5.1.2 Home Screen . .89 5.1.3 Lander Screen. .89 5.1.4 Media Details Screen . .91 5.1.5 Player Screen.
Recommended publications
  • Behat Table of Contents
    behat #behat Table of Contents About 1 Chapter 1: Getting started with behat 2 Remarks 2 Examples 2 Functional testing as user stories 2 Beginning with Behat 2 Extending Behat with Mink 4 Testing JavaScript with Mink and Selenium 6 Setting up test data 7 Capturing emails 8 Installation or Setup 9 Credits 12 About You can share this PDF with anyone you feel could benefit from it, downloaded the latest version from: behat It is an unofficial and free behat ebook created for educational purposes. All the content is extracted from Stack Overflow Documentation, which is written by many hardworking individuals at Stack Overflow. It is neither affiliated with Stack Overflow nor official behat. The content is released under Creative Commons BY-SA, and the list of contributors to each chapter are provided in the credits section at the end of this book. Images may be copyright of their respective owners unless otherwise specified. All trademarks and registered trademarks are the property of their respective company owners. Use the content presented in this book at your own risk; it is not guaranteed to be correct nor accurate, please send your feedback and corrections to [email protected] https://riptutorial.com/ 1 Chapter 1: Getting started with behat Remarks This section provides an overview of what behat is, and why a developer might want to use it. It should also mention any large subjects within behat, and link out to the related topics. Since the Documentation for behat is new, you may need to create initial versions of those related topics.
    [Show full text]
  • Design Patterns in PHP and Laravel — Kelt Dockins Design Patterns in PHP and Laravel
    Design Patterns in PHP and Laravel — Kelt Dockins Design Patterns in PHP and Laravel Kelt Dockins [email protected] Design Patterns in PHP and Laravel Kelt Dockins Dolph, Arkansas USA ISBN-13 (pbk): 978-1-4842-2450-2 ISBN-13 (electronic): 978-1-4842-2451-9 DOI 10.1007/978-1-4842-2451-9 Library of Congress Control Number: 2016961807 Copyright © 2017 by Kelt Dockins This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made.
    [Show full text]
  • Desenvolvimento De Aplicações Web Robustas, Em Contexto Empresarial, De O Desenvolvimento Web, De Sites Dinâmicos, Em Forma Simplificada
    21/10/2014 Desenvolvimento de aplicações Web Desenvolvimento de aplicações Web Sinopse Desenvolvimento de aplicações Web robustas, em contexto empresarial, de O desenvolvimento Web, de sites dinâmicos, em forma simplificada. contexto empresarial, requer a escolha cuidadosa de qual plataforma e de quais ferramentas utilizar; consiste ainda na integração de muitos componentes. Maurício Bordon www.anhanguera.com [email protected] ou @gmail.com www.anhanguera.com [email protected] ou @gmail.com Desenvolvimento de aplicações Web Desenvolvimento de aplicações Web Minibiografia Sinopse Maurício Bordon trabalha na área de TI desde 1989, e com Através da utilização do PHP (uma linguagem muito desenvolvimento Web desde 2000. Atuou na concepção e no desenvolvimento de um ERP (software de Gestão Empresarial), voltado popular para o desenvolvimento Web, utilizada por para a Web, e em diversos outros projetos, e atualmente está envolvido exemplo no site Facebook), e do Framework Symfony na implantação do ERP Protheus da TOTVS e na integração deste com (utilizado, entre muitos outros sites, no Yahoo), pode- uma Extranet. se entregar um produto robusto e de alta qualidade. Leciona a disciplina Gerência de Sistemas de Informação na Anhanguera. www.anhanguera.com [email protected] ou @gmail.com www.anhanguera.com [email protected] ou @gmail.com 1 21/10/2014 Desenvolvimento de aplicações Web Desenvolvimento de aplicações Web Sinopse Componentes Server Client • O que são Web Sites Dinâmicos SO / Web Server / BD SO / Browser •
    [Show full text]
  • Prioritizing Pull Requests
    Prioritizing pull requests Version of June 17, 2015 Erik van der Veen Prioritizing pull requests THESIS submitted in partial fulfillment of the requirements for the degree of MASTER OF SCIENCE in COMPUTER SCIENCE by Erik van der Veen born in Voorburg, the Netherlands Software Engineering Research Group Q42 Department of Software Technology Waldorpstraat 17F Faculty EEMCS, Delft University of Technology 2521 CA Delft, the Netherlands The Hague, the Netherlands www.ewi.tudelft.nl www.q42.com c 2014 Erik van der Veen. Cover picture: Finding the pull request that needs the most attention. Prioritizing pull requests Author: Erik van der Veen Student id: 1509381 Email: [email protected] Abstract Previous work showed that in the pull-based development model integrators face challenges with regard to prioritizing work in the face of multiple concurrent pull requests. We identified the manual prioritization heuristics applied by integrators and ex- tracted features from these heuristics. The features are used to train a machine learning model, which is capable of predicting a pull request’s importance. The importance is then used to create a prioritized order of the pull requests. Our main contribution is the design and initial implementation of a prototype service, called PRioritizer, which automatically prioritizes pull requests. The service works like a priority inbox for pull requests, recommending the top pull requests the project owner should focus on. It keeps the pull request list up-to-date when pull requests are merged or closed. In addition, the service provides functionality that GitHub is currently lacking. We implemented pairwise pull request conflict detection and several new filter and sorting options e.g.
    [Show full text]
  • Symfony Architecture Configurability ORM Admin Generator Functional Tests Debugging Tools Community Plugins Summary Introductionintroduction
    A PHP5 Open-Source Framework By Hanchao Wu OutlineOutline Introduction Why Symfony Architecture Configurability ORM Admin Generator Functional Tests Debugging tools Community Plugins Summary IntroductionIntroduction Sensio(Frech), Oct. 2005 PHP5 Web Framework Open-Source Licence � MIT license MIT � LAMP full Stack Make heavy use of open-source php projects M-V-C DonDon’’tt reinventreinvent thethe wheelwheel Follow best practices MVC Pattern : Model / View / Controller Unit and functional test framework Environment and deployment support Security (XSS protection by default) Extensible (plugin system) PopularPopular PHPPHP frameworksframeworks CakePHP � Documentation is somewhat lacking � Apparently difficult for beginners KiwiPHP � Powerful, but still unstable Symfony � Great documentation and community � Easy to get started Zend � Supported by Zend (official PHP company) � More of a library than complete framework SymfonySymfony MainMain SellingSelling PointsPoints � Configurability � XSS protection Standard � Debugging tools PHP 5 MVC � Functional tests Routing � Extensibility : Plugins Cache � Admin Generator � ORM : Propel or Doctrine � i18n / l10n ArchitectureArchitecture PackagesPackages ConfigurabilityConfigurability cmd YAML ORMORM Doctrine & Propel � PHP Open-Source Project � Object Relation Model Layer � One of Doctrine's key features is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL) inspired by Hibernate's HQL. � YAML --> Database tables DoctrineDoctrine
    [Show full text]
  • Zašto Smo Odabrali Laravel (4)?
    Zašto smo odabrali Laravel (4)? Denis Stančer Prije framework-a • Razvijate web aplikacije od ranih početaka (kraj XX stoljeća) • Perl – CGI • PHP (3.0 - 6/1998, 4.0 - 5/2000, 5.0 - 7/2004, 5.3 - 6/2009 ) • Tijekom vremena sami razvijete elemente frameworka • Prednosti: • Brži razvoj • Neka vrsta standarda • Nedostaci: • Još uvijek velika količina spaghetti kôda • Pojedini developer ima svoj framework • Ne razvijaju se svi jednako brzo • Nama pravovremenih sigurnosnih zakrpi U Srcu • Koji PHP framework koristite ili ste koristili? Zašto framework? • Brži razvoj • Standardizirana organizacija kôda • Pojednostavljeno • Pristupu bazi/bazama • Zaštita od osnovnih sigurnosnih propusta • Modularnost • Razmjena gotovih rješenja među developerima • Copy/paste ili Composer • U MVC framework-u razdvojen HTML/JS od PHP-a • U konačnici - bolja suradnja unutar tima = efikasniji razvoj i održavanje MVC – Model-View-Controller • Programski predložak kojim se komunikacija s korisnikom dijeli na tri dijela: • data model: podaci • najčešće baza • user interface: prikaz stanja u modelu • najčešće templating engine • bussines model: šalje naredbe modelu Koji framework odabrati? • Koji su najpopularniji? • Koji imaju mogućnosti koje nama trebaju? • Popis općih kriterija • Composer • ORM • Testna okruženja • Migracije i seeding • Templating engine • Bootstrap • Git • Kvaliteta dokumentacije • Stanje zajednice: forumi, članci, konferencije,… Koji framework odabrati? (2) • Popis specifičnih kriterija • Mali (rijetko srednje veliki) projekti • simpleSAMLphp: jednostavno
    [Show full text]
  • Stable Enough to Be Used by Aprox 20 Companies to Manage Applications
    YAWIK Documentation Release 0.34.1 CROSS Solution Jun 25, 2020 Contents 1 About YAWIK 3 1.1 Important Links for developers.....................................4 2 Requirements 5 3 Preparations 7 3.1 Ubuntu 18.04...............................................7 3.2 Debian 10.................................................8 3.3 Install mongo Database.........................................8 4 Installation 9 4.1 Installation with composer........................................9 4.2 Install without composer......................................... 10 4.3 Install for Developers.......................................... 10 5 Runtime 13 5.1 Using Apache.............................................. 13 5.2 Using Nginx............................................... 14 5.3 Authentication.............................................. 15 5.4 Debugging................................................ 15 6 Upgrade 17 6.1 0.24 => 0.25............................................... 17 6.2 0.31 => 0.32............................................... 18 7 Configuration 19 7.1 Authentication.............................................. 19 7.2 Example: Setting up Facebook, Xing or LinkedIn Login........................ 20 7.3 Authentication.............................................. 20 7.4 Mail.................................................... 22 7.5 Jobs.................................................... 23 7.6 Sitename................................................. 25 7.7 Apache.................................................. 25 7.8 MongoDB...............................................
    [Show full text]
  • Object Relational Mapping in PHP5
    ! § ! Bachelor thesis Object Relational Mapping in PHP5 ! Author: Michelle Sanver Supervisor: Martin Blomberg Semester: Spring 2011 Course code: 2DV40E Acknowledgements Many thanks to Matthew Weier O'Phinney and Ryan Mauger for taking the time to participate in interviews and sharing information very valuable to this thesis. I would also like to thank my classmates Martin Lindberg, Tobias Åström, Fredrik Johansson and Dennis Sangmo at Linnaeus University who have given their constant support. Abstract Using an object relational mapper, ORM, is a good idea if you have an object relational code base and are following standards. By using an ORM you get a separation between actual objects and data persistence. This also makes it possible for the programmer to fully focus on the application without knowing much about how the database itself works. However, this doesn’t come without drawbacks. Depending what ORM you use and how you use it, it may sacrifice performance. The research in this thesis shows that using an ORM in a very small application does not sacrifice performance. Sammanfattning Det är en bra idé att använda en “Object relational mapper, ORM” om du har en objektorienterad kodbas och följer standarder och objektorienterade regler. Genom att använda en ORM separerar du objekten och hur de förvaras för att enkelt kunna refaktorera i ett senare stadie. Det medför också att programmeraren kan fokusera på sitt uppdrag, applikationen och behöver inte veta något om databaser. Men, detta kommer inte utan nackdelar. Beroende på vilket ORM system du använder och hur du använder det kan det påverka prestandan. Forskningen i den här rapporten pekar på att när man använder en ORM i en väldigt liten applikation berörs inte prestandan.
    [Show full text]
  • Frameworks PHP
    Livre blanc ___________________________ Frameworks PHP Nicolas Richeton – Consultant Version 1.0 Pour plus d’information : www.smile.fr Tél : 01 41 40 11 00 Mailto : [email protected] Page 2 les frameworks PHP PREAMBULE Smile Fondée en 1991, Smile est une société d’ingénieurs experts dans la mise en œuvre de solutions Internet et intranet. Smile compte 150 collaborateurs. Le métier de Smile couvre trois grands domaines : ! La conception et la réalisation de sites Internet haut de gamme. Smile a construit quelques uns des plus grands sites du paysage web français, avec des références telles que Cadremploi ou Explorimmo. ! Les applicatifs Intranet, qui utilisent les technologies du web pour répondre à des besoins métier. Ces applications s’appuient sur des bases de données de grande dimension, et incluent plusieurs centaines de pages de transactions. Elles requièrent une approche très industrielle du développement. ! La mise en œuvre et l’intégration de solutions prêtes à l’emploi, dans les domaines de la gestion de contenus, des portails, du commerce électronique, du CRM et du décisionnel. www.smile.fr © Copyright Smile - Motoristes Internet – 2007 – Toute reproduction interdite sans autorisation Page 3 les frameworks PHP Quelques références de Smile Intranets - Extranets - Société Générale - Caisse d'Épargne - Bureau Veritas - Commissariat à l'Energie Atomique - Visual - Vega Finance - Camif - Lynxial - RATP - AMEC-SPIE - Sonacotra - Faceo - CNRS - AmecSpie - Château de Versailles - Banque PSA Finance - Groupe Moniteur - CIDJ - CIRAD - Bureau
    [Show full text]
  • The PHP Security Checklist INTRODUCTION
    The PHP Security Checklist INTRODUCTION Damn, but security is hard. It’s not always obvious what needs doing, and the payofs of good security are at best obscure. Who is surprised when it falls of our priority lists? We’d like to ofer a little help if you don’t mind. And by « help » we don’t mean « pitch you our product »—we genuinely mean it. Sqreen’s mission is to empower engineers to build secure web applications. We’ve put our security knowledge to work in compiling an actionable list of best practices to help you get a grip on your DevSecOps priorities. It’s all on the following pages. We hope your find if useful. If you do, share it with your network. And if you don’t, please take to Twitter to complain loudly—it’s the best way to get our attention. The Screen Team @SqreenIO [email protected] !1 CODE ✔ Use PHP 7! PHP 7 includes a range of built-in security-specific improvements (such as libsodium in PHP 7.2) and deprecates older, insecure features and functionality. As a result, it is far easier to create more secure applications with PHP 7, than any previous version of PHP. Use it whenever possible. Read more: • Deprecated features in PHP 7.0.x • Deprecated features in PHP 7.1.x • Deprecated features in PHP 7.2.x • Migrating a PHP 5 App to PHP 7 ✔ Use a SAST A SAST is a Static Application Security Tester (or testing service). A SAST scans source code looking for vulnerable code or potentially vulnerable code.
    [Show full text]
  • WEB DEVELOPER » Portfolio » Github SUMMARY I’M a Full-Stack Developer and a Programming Instructor
    LUIS MONTEALEGRE - WEB DEVELOPER » Portfolio » Github SUMMARY I’m a full-stack developer and a programming instructor. I want to be surrounded by people who push me to do the best work of my career as well as people I can nurture and support. I have over 13 years of experience in tech both in Mexico and the United States and I’m looking forward to be part of a team that values work-life balance, TDD, pair programming and code reviews. PROGRAMMING LANGUAGES AND TOOLS PHP 11 years • Laravel, Zend Framework 1, Symfony 1 & 2, Slim 2, Silex, Doctrine 1 & 2, PHPUnit, Behat, phpspec, Codeception • MySQL, PostgreSQL • jQuery, Jasmine, RequireJS, Bower, npm, Webpack, ES6, PhantomJS • Bootstrap, Sass • Vagrant, Docker • Git, SVN C# 4 years • ASP.NET Web Forms, Visual Basic • jQuery, JQuery UI • SQL Server, Oracle PL/SQL • TFS Java 2 years • Spring Boot, JUnit, Hibernate, DBUnit, Servlets, JSP/JSTL, Swing • Maven • MySQL, PostgreSQL CERTIFICATIONS EDUCATION Latinux Certified Linux Operator B. S. and Master in Computer Science. Oracle Certified Java Programmer Emeritus Autonomous University of Puebla. MCTS Microsoft SQL Server & Web [1998-2003, 2003-2005] Applications OPEN SOURCE CONTRIBUTIONS AND COMMUNITY WORK My contributions to open source projects include: Drupal Console, Codeception, Eris and Couscous. I also maintain some libraries: Modules System for Slim 2, Doctrine DBAL Fixtures Generator and a Yelp Fusion API Java Client. I'm the founder an former organizer of the PHP Puebla User Group. I helped organizing dozens of workshops and technical talks. I'm currently particpating with the San Antonio Coding Challenge meetup.
    [Show full text]
  • Bdd, Functional Tests & Selenium (In Drupal!)
    Behat BDD, FUNCTIONAL TESTS & SELENIUM (IN DRUPAL!) ♥’s Hallo! > Lead of the Symfony documentation team > KnpLabs US - Symfony consulting, training & kumbaya > Writer for KnpUniversity.com: PHP & Symfony screencasts packed with puns, unrelated (but entertaining) illustrations and coding challenges! > Husband of the much more talented @leannapelham knpuniversity.com twitter.com/weaverryan Plan, Work, Miscommunicate, Panic, Put out Fires, Repeat! aka Project Work! How the customer explained it http://www.projectcartoon.com How the project leader understood it http://www.projectcartoon.com How the programmer wrote it http://www.projectcartoon.com What the customer really needed http://www.projectcartoon.com What the beta testers received http://www.projectcartoon.com Computer Science? https://www.flickr.com/photos/diueine/3604050776 One Different roles, different languages, miscommunication @weaverryan Tw o Your code and business values may not align @weaverryan I've just dreamt up this cool new feature that we should implement! Why? Because it's cool! Three Over-planning, under-planning, planning...? @weaverryan Getting down with BDD https://www.flickr.com/photos/tambako/4175456498 Evolution of Test-Driven Development @weaverryan “Behaviour” is a more useful word, than “test” - Dan North * * the santa of behavior-driven development Evolution of Test-Driven Development ≈ Unit Tests ≈ Functional Tests @weaverryan Specification BDD http://www.phpspec.net @weaverryan Scenario-oriented BDD (Story BDD) Let’s create a single vocabulary and process
    [Show full text]