Sebastian Bergmann

Sebastian Bergmann is the creator of PHPUnit. He co-founded thePHP.cc and helps PHP teams build better software.

PHPUnit 4.8: Code Coverage Support

PHPUnit 4.8 adds support for code coverage using PHPDBG for PHP 7 [...]

7 August 2015
The Three Dimensions of Testing

The goal of all tests is to discover problems as early as possible. Dependening on the context, the same test can be used to answer different questions about the quality of the software under test. The three dimensions of goal, scope, and notation are one approach to categorize tests. Attendees of this session will learn which aspects of an application should be tested and how to efficiently implement these tests so that they are easy to write and fast to execute while delivering highly reliable results.

26 June 2015

20 Years of PHP

Sebastian Bergmann recollects how he first came into contact with PHP [...]

11 June 2015
At the push of a button, and without a maintenance window!

A web application only generates revenue if it is available to users. This is why changes are traditionally deployed when most users sleep. The distribution and activation of a new software release need to be decoupled to make roll-outs during regular business hours feasible. In this talk we will show how to automate all the steps required to get a new version of a PHP web application into production without downtime.

9 June 2015

PHPUnit 4.7 and Three Shades of Green

PHPUnit 4.7 introduces a couple of small improvements, for instance to the HTML code coverage report [...]

5 June 2015
Code Coverage: Covered in Depth

The analysis of code coverage is a feature that is extended and improved with each release of PHPUnit. In this session we will cover all aspects of PHPUnit's code coverage functionality in depth. You will learn how to leverage this important functionality more effectively to augment and guide your testing efforts.

21 May 2015

PHPUnit 4.6 and Global State

PHPUnit 4.6, which was released last week, adds an optional check for marking a test as risky when global state is manipulated while it's running [...]

7 April 2015
Test-Driven Domains

It has been argued that Test-Driven Development bears the risk of losing the focus on business value. Domain-Driven Design is an approach to software development that puts a strong focus on business value. Combining ideas of Domain-Driven Design and Test-Driven Development leads to a formalized representation of the ubiquitous language through production code and tests. We will show you how this works.

28 March 2015

PHPUnit 4.5 and Prophecy

PHPUnit 4.5 has been released today and features out-of-the-box support for the modern mock object framework Prophecy [...]

6 February 2015

FOSDEM

Last weekend I attended FOSDEM in Brussels, Belgium and talked about the state of PHPUnit in the "PHP and Friends" room [...]

2 February 2015
The State of PHPUnit

Every eight weeks a new version of PHPUnit is released. In this session we discuss features that were added recently to help with writing and running tests. The development of new features is not limited to the PHPUnit core anymore, though. Thanks to Composer there is a thriving ecosystem of plugins available that can be used with ease to make your testing effort more effective. We will have a look at the most commonly used plugins and close with an outlook on the future of PHPUnit.

1 February 2015

PHPUnit: Migration from PEAR to PHAR

In this article I show you how to migrate your PHPUnit installation from PEAR to PHAR (or Composer) [...]

13 January 2015
Moving Fast Without Deploying Broken Things

Most web applications are changed and adapted quite frequently and quickly. What was sufficient yesterday can be insufficient today. Moving fast and breaking things is not a problem if you have a test harness and process in place you can trust to prevent you from deploying broken things into production. Attendees of this session will learn how create tests that are easy to write and fast to execute, require minimal maintenance, and deliver highly reliable results.

22 November 2014
Auf Knopfdruck – und ohne Wartungsfenster!

Eine Webanwendung kann nur dann Geschäftswert generieren, wenn sie für Anwender verfügbar ist. Änderungen führt man daher klassisch dann durch, wenn die Anwender schlafen. Um die Softwareverteilung in die reguläre Arbeitszeit verlegen zu können, müssen das Verteilen und die Inbetriebnahme der neuen Version voneinander entkoppelt werden. In diesem Vortrag zeigen die Referenten, wie man sämtliche Schritte automatisiert, um eine neue Version einer PHP-Webanwendung in Produktion zu stellen und dabei weder offline gehen noch vermeintlich inkompatible Versionen fürchten muss. Die vorgestellten Konzepte und Prozesse wurden unter anderem bei brack.ch und globetrotter.de implementiert und sind auch jenseits der PHP-Welt anwendbar.

10 November 2014
Effective Integration Testing

Beyond unit tests, integration tests are crucial. Implemented as end-to-end tests, however, they are cumbersome to write and slow to execute. Edge-to-edge tests are easier to write and faster to execute. More importantly, they require minimal maintenance. Most importantly, they deliver highly reliable results. Developers in the audience will gain expertise in the confident and effective implementation of integration tests with PHPUnit.

29 October 2014
A State of Mind

Domain-Driven Design puts a focus on domain logic, the heart of business software. It is in this layer of the software that business concepts are represented in code together with their respective business rules. The state that reflects the business situation is controlled and used here. Business rules can be represented in code using state machines. These can be implemented effectively and with ease by applying the State design pattern. Join Sebastian Bergmann on a whirlwind journey through areas of software engineering such as design patterns, static code analysis, software visualization, code generation, and test generation.

28 October 2014
Dealing with Legacy Code

It is a fact of life for every developer: you have to deal with code that has been written before your time and does not follow state-of-the-art best practices. The audience will learn in this session how branch-by-abstraction can be applied to "hide" ugly code behind beautiful APIs and how automatically generated characterization tests can be used to safeguard against unintended changes in legacy code while it is modernized. This makes testing in legacy applications possible and enables writing new code that does not suffer from the limitations imposed by the project's history.

28 October 2014

Joomla PHPUnit Code Sprint

This week I travelled to Montabaur, Germany to support a the Joomla project with their testing effort [...]

17 October 2014
Eine kurze Geschichte der Testpraktiken

Soll ich meine Software besser als Ganzes mit End-to-End Tests testen oder doch lieber im Kleinen mit Unit Tests? Und welchen Ansatz soll ich verfolgen? Acceptance Test-Driven (ATDD)? Behavior-Driven Development (BDD)? Test-Driven Development (TDD)? Diese und andere Diskussionen rund um das Testen von Software führen Entwicklerinnen und Entwickler leider allzu oft nur aus der Werkzeugsicht und verlieren dabei den eigentlichen Entwicklungsprozess aus den Augen. Dieser Vortrag erklärt nicht nur die unterschiedlichen Ansätze wie ATDD, BDD und TDD sondern beleuchtet auch wann und in welchem Kontext sie ursprünglich erfunden beziehungsweise wiedergefunden wurden. Die Teilnehmer gewinnen ein Verständnis für die gängigen Prozessbausteine rund um das Testen und können auf dieser Grundlage den für sie passenden Prozess ebenso wählen wie die Werkzeuge, mit dem sie den Prozess umsetzen.

10 October 2014

SoCraTes

Last week I travelled to Soltau, Germany to attend SoCraTes 2014 [...]

11 August 2014

HHVM: The Alternative PHP Runtime

In my presentation at IPC Spring 2014, I provided the audience with an in-depth look at what HHVM is and how it works [...]

29 July 2014

TYPO3 PHPUnit Code Sprint

Last weekend I travelled to Hamburg, Germany to participate in a code sprint for making the PHPUnit TYPO3 extension better [...]

30 June 2014
HHVM: The Alternative PHP Runtime

The PHP language is almost 20 years old, as is its reference implementation that can be downloaded from PHP.net. In the last decade, alternative runtimes for PHP came and went. The HipHop VM (HHVM) that is developed – and used in production – by Facebook, however, is probably not only here to stay but very likely going to influence the future of PHP considerably. High time to have an in-depth look at what HHVM is and how it works.

3 June 2014
Why, What, and How: Testing in 2014

One of the most important tasks in software testing is to find the right scope for each test case. What can be covered with unit tests and when are system-level end-to-end tests useful? What are functional tests, integration tests, or edge-to-edge tests? How do you test non-functional aspects such as performance? And where do experiment-driven and test-driven development fit in? Attendees of this session will learn which aspects of an application should be tested and how to efficiently implement these tests so that they are easy to write and fast to execute while delivering highly reliable results.

3 June 2014

J and Beyond

Last week I attended the J and Beyond conference in Königstein im Taunus, Germany [...]

2 June 2014
PHPUnit Best Practices

While PHPUnit is not difficult to set up and writing tests with it is easy, you will get better results and save development time if you know the tips and tricks to leverage PHPUnit more effectively. This session, presented by the creator of PHPUnit, teaches best practices you can use to ensure that your unit testing effort is efficiently implemented.

31 May 2014
The Driven Developer

You can build your software right – with 100% code coverage and high internal quality – and still fail to build the right software, the one the customer wants. How can you test that you are building the right software, and the right way? Developers (should) love unit tests. Other project stakeholders love acceptance tests. But which of these tests should drive the development? This session elucidates what Acceptance Test-Driven Development (ATDD), Behavior-Driven Development (BDD), and Test-Driven Development (TDD) are about, what their strengths and weaknesses are, and how you can find the right test mix for your project.

31 May 2014

Inspiring Conference

Last week I attended the Inspiring Conference, the leading event for all things TYPO3 FLOW and TYPO3 NEOS, in Kolbermoor, Germany [...]

31 March 2014

Disintegration Testing

Sebastian Bergmann uses NASA's Mars Climate Orbiter as a hook to discuss different scopes of testing [...]

20 March 2014

PHPUnit 4.0: Test Proxies

One of the highlights of PHPUnit 4.0 is the improved support for integration testing through test proxies [...]

12 March 2014

PHPUnit 4.0: Code Coverage Improvements

One of the highlights of PHPUnit 4.0 is an improvement of the @covers annotation and the addition of the @uses annotation for better code coverage analysis [...]

10 March 2014

FOSDEM

Last weekend I attended FOSDEM in Brussels, Belgium [...]

3 February 2014
Pride and Prejudice: Testing in the PHP World

Parts of the PHP community take pride in code that is of high quality and well tested. Outside of the PHP community the prejudice against the language and its ecosystem still prevails. Quality Assurance in general and Unit Testing in particular have come a long way since the inception of PHPUnit thirteen years ago: simple PHP programming has evolved into software engineering with PHP. Join Sebastian Bergmann, the creator of PHPUnit, as he shares his experience on how PHPUnit is used in different communities and projects, and what’s been learnt along the way.

2 February 2014

ZendCon Europe

Last week I attended ZendCon Europe in Paris, France [...]

25 November 2013
Test{able|ing} Zend Framework 2 Applications

Zend Framework 2 is a popular framework for developing web applications and services in PHP. But just because you use an off-the-shelf framework as the foundation for your development effort does not mean that you do not need to think about the architecture, design, and testability of the software you're building anymore. This session, presented by the creator of PHPUnit, teaches best practices you can use to ensure that your Zend Framework 2 application is easy to test and explains how to test it with PHPUnit.

20 November 2013
Testing on the Edge

Beyond Unit Tests, Acceptance and Integration Tests are crucial. Implemented as End-to-End tests, however, they are cumbersome to write and slow to execute. Edge-to-Edge Tests are easier to write and maintain, faster to execute, and deliver more reliable results. The audience will learn how to effectively implement these tests with PHPUnit.

28 October 2013
More Tests or Better Code?

Once upon a time, in a kingdom far, far away there was a wizard. Each day the king laid out a new scenario in which foes of the realm would test his fortress' defenses. And every day the wizard would come up with new measures to keep the fortress safe. One day a knight appeared at the king's court. For each of the contraptions the wizard had implemented the knight made the case that it was superfluous because the scenario it was built to counter could be prevented. When a dragon named Legacy appeared and threatened the realm, the king turned to knight and wizard for counsel. In this Tech Talk, Sebastian Bergmann, creator of PHPUnit, will open his bag of tricks while Stefan Priebsch, a proven expert on software architecture and design, will talk about avoiding these tricks.

9 October 2013

Man Is What He Eats

Sebastian Bergmann uses the staff of a professional kitchen as a metaphor for a development team that wants to deliver high-quality software [...]

5 October 2013

DrupalCon Europe

Yesterday I attended DrupalCon Europe in Prague [...]

27 September 2013
Leveraging 12 Years of PHPUnit

This session covers how PHPUnit is used in different communities and projects, and what’s been learnt along the way, what’s new and state of the art in unit testing, and how PHPUnit is integrating state-of-the-art paradigms, how PHPUnit compares to other testing technologies and methodologies.

26 September 2013
Agility and Quality

When you continuously develop new features and deploy new code to production frequently, quality must not be an afterthought. This keynote will elucidate how agility and quality are connected and what this should mean for the architecture of your software.

18 September 2013
Automated Deployment: From Jenkins to Production

All your tests are green and you are ready to deploy the latest version of your software into production. Again. If only you had an automated way of doing that to avoid the manual hassle! In this hands-on session you will learn how to make Jenkins and friends push your deployment into the next level, easily maintaining any set of servers.

17 September 2013

ZEDGE TechTalks

Yesterday I attended the first edition of the ZEDGE TechTalks in Trondheim, Norway [...]

11 September 2013
High Quality PHP: Past, Present and Future

Quality Assurance in general and Unit Testing in particular have come a long way since the inception of PHPUnit twelve years ago: simple PHP programming has evolved into software engineering with PHP. Join Sebastian Bergmann, the creator of PHPUnit, as he shares his experience on overcoming both the technological challenges of testing PHP code and common organizational issues when introducing software development teams to testing. He will reflect on the lessons learned in the first decade of PHPUnit and will give a look into the tool's future.

10 September 2013

eZ Publish Summer Camp

Last week I attended the eZ Publish Summer Camp on the island of Brač in Croatia [...]

9 September 2013
Test{able|ing} Symfony2 Applications

Symfony2 is a popular framework for developing web applications in PHP. But just because you use an off-the-shelf framework as the foundation for your development effort does not mean that you do not need to think about the architecture, design, and testability of the software you're building anymore. This workshop, presented by the creator of PHPUnit, teaches best practices you can use to ensure that your Symfony2 application is easy to test and explains how to test it with PHPUnit.

6 September 2013
Test Proxies, oder: Wie aus Problemen Features werden

Integrationstests schließen die Lücke zwischen Unit Tests und Systemtests, indem sie auf die Schnittstellen zwischen Komponenten fokussieren und sicherstellen, dass ihr Zusammenspiel wie erwartet funktioniert. In diesem Vortrag machen Arne Blankerts und Sebastian Bergmann anschaulich, wie aus einem konkreten Problem bei der Arbeit an Integrationstests in einem Kundenprojekt das Feature "Test Proxies" für PHPUnit entstand. Sie diskutieren das Problem, stellen die Lösung vor, erklären die Implementierung von Mock-Objekten in PHPUnit und zeigen, wie das Feature umgesetzt wurde.

25 August 2013

PHP 5.5: Generators

Last month, the first stable version of PHP 5.5 was released. It introduced the "yield" keyword that allows the implementation of generators and coroutines [...]

10 July 2013
Optimaler Einsatz von PHPUnit

Die Installation von PHPUnit ist nicht schwer und das Schreiben von Tests ist einfach. Sie können aber bessere Ergebnisse erzielen und Entwicklungszeit sparen, wenn Sie die Kniffe kennen, mit denen man PHPUnit effektiver einsetzen kann. In diesem Vortrag erklärt der Entwickler von PHPUnit die besten Praktiken, um Ihre Tests effizient zu implementieren.

26 June 2013

PHP 5.5: New Class Constant

Last week, the first stable version of PHP 5.5 was released. It introduced a class-level constant that is automatically available on all classes and holds the fully-qualified name of that class [...]

26 June 2013

PHP 5.5: Out-of-the-Box Bytecode Cache

Last week, the first stable version of PHP 5.5 was released. This is the first version of PHP to ship with an out-of-the-box bytecode cache. [...]

25 June 2013

Selling Test-Driven Projects

"How do I convince my manager that I should write unit tests for my code?" and "How can we sell test-driven development to our customer?" are questions I get asked frequently. These questions cannot be answered with technology or tools but instead require an understanding of economics as well as communication skills [...]

24 June 2013
Agilität und Qualität: Zwei Seiten einer Medaille

Wenn man kontinuierlich neue Features entwickelt und neuen Code häufig live stellt, dann darf Qualität nicht nachträglich passieren. Dieser Vortrag erklärt, wie Agilität und Qualität in Einklang gebracht werden können und was dies für die Architektur Ihrer Software bedeutet.

14 June 2013
The Wrong End of the Stick

Unit Testing does not work for you? You are not alone. Every developer who starts with unit testing faces the same issues. Issues that will not go away by learning more about unit testing or PHPUnit. You are likely looking at the wrong end of the stick. You will learn how to get over the hump quickly when starting with PHPUnit.

3 June 2013

Trust

Sebastian Bergmann uses a car driver's blind trust in a navigation unit as a metaphor to discuss how quality goals define the architecture of an application [...]

17 April 2013

AtlantaPHP

Today I attended the AtlantaPHP user group in Atlanta, GA [...]

25 March 2013

Software Development Fluxx

Sebastian Bergmann uses the card game Star Fluxx as a metaphor to discuss agile software development, object-oriented design, and quality assurance. [...]

14 February 2013

SunshinePHP

This week I attended the SunshinePHP conference in Miami, FL [...]

9 February 2013
Living with Legacy

It is a fact of life for every developer: you have to deal with code that has been written before your time, that does not follow state-of-the-art best practices, and that — worst of all — is not tested so you cannot safely change or extend it. In this session, the audience will witness the step-by-step refactoring of fictitious legacy code towards a state that is easy to comprehend, extend, test, and maintain.

23 October 2012
Alternative PHP Runtimes

When you say "PHP" you mean the programming language PHP. This implicitly refers to the PHP Interpreter that is developed by the PHP project and that can be downloaded from PHP.net. Aside from this reference implementation of PHP there are alternative runtime environments for PHP, such as Facebook's HipHop. This session presents an overview of these alternatives and provides an insight into their feasability for production use.

25 August 2012
Integrating PHP Projects with Jenkins

Today’s web applications require frequent updates, not just by adding or upgrading features, but by maintaining and improving the software’s existing code base as well. This tutorial teaches PHP developers how to use Jenkins, the popular continuous integration server, to monitor various aspects of software quality throughout a project’s lifecycle. Attendees of this tutorial will learn how to implement continuous integration to automate processes for building and deploying regular software releases. They will also learn how to use Jenkins to monitor and improve their applications through continuous inspection and static code analysis.

16 July 2012
The PHP Tester's Toolbox

Various testing tools exist to test the different aspects and layers of PHP applications. There is PHPUnit for Unit Testing (and Test-Driven Development), Behat for Acceptance Testing (and Behaviour-Driven Development), Selenium for System Testing, and a plethora of tools for testing non-functional aspects such as performance and security. This presentation provides an overview of the goals of each of these tools and shows the first steps to leveraging them in your daily routine.

2 March 2012