Papers & Presentations
Atoms frequently share what they know in journals, at conferences, and in classrooms.
Presenter First Resources
MVP Graphical User Interface Testing
Open Source
Fair is fair. We use others’ good stuff and contribute our own software tools in return.
Active Projects
Retired Projects
Ruby DevOps - Lightweight Configuration Management
Macros! (Creating Lisp Macros with Clojure)
Nurturing Top-Notch Tech Teams
Time-based Estimates Are for Suckers; Size-based Is the Way To Go
Using Types to Write Your Code for You
Data Structures: The Code That Isn’t There
Detecting Behavioral Zones in Local and Global Camera Views
Node.js and Asynchronous Programming with Promises
Big Visible Charts
Building Ruby Applications – A Walkthrough
Four Atoms: Four Different Web Development Frameworks
Growing Your Embedded Application Organically with Ceedling and Friends
Lightweight Project Tracking with Burn Charts
Between Freelance and Corporate America: Sustainable Companies for Smart and Creative People
Ruby for Desktop Applications? Yes we can.
Embedded Test-Driven Development in C with Ruby
Extreme Design: The Secrets to Successful Design Pairing
Trash Your RFP: How to Select the Best Vendor
Way Better Error Handling in C Using CException
Integrating Design and Development to Make Great Software
30-50% of You Are Lousy Estimators – Here’s How to Get Better
Sustainability = f(idea, execution, culture)
Running a Ruby Application with jruby-complete
Agile: It’s More Than Just Makeup
Delivering Software Certainty
Agile Project Management for Embedded (or Burning Your Gantt Charts)
Feature-Driven Design Using TDD and Mocks
Refactoring Your Rails Application
An Automated Mock Object Generator for C++
Convincing the Executive: Economic Arguments for Agile Software Development
Enhancing Embedded Development with Ruby
Evolving into Embedded Development
Improving the Embedded Development Process
Mocking the Embedded World: Practical TDD, Continuous Integration, and Design Patterns
Mocking the Embedded World: Test-Driven Development, Continuous Integration, and Design Patterns
Presenter First – Big, Complex, and Tested? Just Say "When"
Fostering Excellence in IT Services through Quality and Innovation
Perils and Pitfalls of Agile Adoption
Presenter First: Organizing Complex GUI Applications for Test-Driven Development
Effective Test-Driven Development for Embedded Software
Agile Intro + Story-Driven Development
Acceptance Test Automation to Support Story-Driven Development: From Customer Stories to Greenbar
Agile Project Management in Extreme Programming Projects
Make Haste, Not Waste: Automated System Testing
Better Living Through Extreme Programming
OO Testing: From Academia to the Real World
Interaction-Based Testing: Beyond Classical Unit Testing
The Mock Object Approach to Test-Driven Development
What is Presenter First?
Presenter First (PF) is a technique for organizing source code and development activities to produce fully tested applications from customer stories using Test-Driven Development. Though it can be applied in a variety of settings, it is most often used in GUI applications.
History
The core idea of Presenter First came when Mike Marsiglia and Brian Harleton were working on an application team at X-Rite. The pain they felt on adapting a large GUI application suite to the needs of a major customer drove them to create what later developed into and became known as Presenter First. David Crosby worked with Mike and Brian, wrestled with the problems of triad composition and instantiation, and refined the process and motivations for building Presenter First style. The "Burke Porter Dyno Host project was the first large project done in Presenter First style from inception.
Papers
"BIG, COMPLEX, AND TESTED? JUST SAY 'WHEN'"
Appeared in Better Software, February 2007
Better Software Magazine reprint (PDF)
"PRESENTER FIRST: ORGANIZING COMPLEX GUI APPLICATIONS FOR TEST-DRIVEN DEVELOPMENT"
The definitive technical description of Presenter First from the Agile International Conference, 2006.
Agile 2006 Conference paper (PDF)
Examples
- Simple Java example of Presenter First (PDF) that illustrates the structure of a simple triad; uses jmock and junit for testing.
- C# Presenter First example (ZIP); VS2003 project for a sliding puzzle game
- Objective C/Cocoa Presenter First example (ZIP); Simple contact manager application
- Java Presenter First + Adapter example – Java (ant-only and/or IntelliJ) Swing application that demonstrates the Adapter pattern extension to Presenter First, including how we can use an Adapter to encapsulate the usage of rich GUI library components via their built-in data bindings.
- Source and build files (ZIP)
- Compiled executable jar of the example (JAR) – "java -jar AdapterExample.jar" to run.
- Presenter First in the context of GTK+ and C
- Find the code at pf_gtk on GitHub
- Companion articles describing the project can be found here: original article and updated for 2012
Resources
The original paper on Presenter First (PDF) was not formally published. It describes the core idea and many of the advantages of using this technique.
MVP/Presenter First Video Example by Brian Marick
Video Podcast series with Ron Jacobs of ARCast: Part 1, Part 2, & Part 3
Mocking tools such as NMock, OCMock, JMock, and HardMock are helpful in speeding Presenter First unit testing.
Visual Studio VB macros (TXT) for MVP navigation in C# projects (includes a Test file creator).
Christopher Atkins' approach to PF in ASP.NET: " Presenter First with POA"
Presenter First (MVP) Android Examples – Examples of how to implement the Presenter First pattern in Android based on the code from the book Android Programming: The Big Nerd Ranch Guide (2nd Edition).
Contributed Tools
" A Modeling Tool for the Presenter First Pattern" by Brooke Hamilton of FM Global
"Creating a DSL for Presenter First" – Brooke also provides an interesting write-up on his extension of Presenter First and how to describe the pieces using a succinct DSL