Upload
marshall-gallagher
View
224
Download
0
Tags:
Embed Size (px)
Citation preview
Pragmatic Projects
Prepared by Doug Glidden
Pragmatic Projects
Pragmatic Teams Ubiquitous Automation Ruthless Testing It’s All Writing Great Expectations Pride and Prejudice
Pragmatic Teams
No Broken Windows Quality is the responsibility of the
whole team No “team quality officers”
Pragmatic Teams
No Broken Windows Boiled Frogs
Don’t assume someone else is handling it
Don’t assume changes have been okayed by leadership
Appoint a “chief water tester” to constantly keep track of scope changes
Pragmatic Teams No Broken Windows Boiled Frogs Communicate
Communicate within the team, of course
Don’t forget the outside world! Generate a brand
Crazy team name Funny team logo
Pragmatic Teams No Broken Windows Boiled Frogs Communicate Don’t Repeat Yourself
Communicate Appoint a “team librarian”
Coordinates documentation and repositories Knows who knows Can spot duplication
Appoint “focal point” persons, each with a complete understanding of one component or aspect
No Broken Windows Boiled Frogs Communicate Don’t Repeat Yourself Orthogonality
Project activities can’t happen in isolation Organize around functionality, not job functions. Organize teams like code: use contracts, decoupling,
and orthogonality Select technical and administrative heads over all
teams on a project
Pragmatic Teams
Pragmatic Teams No Broken Windows Boiled Frogs Communicate Don’t Repeat Yourself Orthogonality Automation
Code formatting Test runs Appoint “tool builders” to create
automation tools
Pragmatic Teams No Broken Windows Boiled Frogs Communicate Don’t Repeat Yourself Orthogonality Automation Know When to Stop Adding Paint
Allow individual innovation Provide supportive, but not overpowering,
structure
Ubiquitous Automation
All on Automatic Don’t use manual procedures. Use scripts or batches Schedule nightly unattended tasks
Ubiquitous Automation All on Automatic Compiling the Project
Use makefiles Generate code Use regression tests Automate builds
Run full build process nightly to ensure all steps continue to operate correctly
Run all tests after each build is complete to identify problems as soon as possible
Automate final build Automate parameter changes Rerun all tests
Ubiquitous Automation All on Automatic Compiling the Project Automatic Administrivia
Use content-driven automation for administrative tasks
Automate web site generation by pulling information from the repository nightly
Automate approval procedure notifications using markers within the source
Ubiquitous Automation
All on Automatic Compiling the Project Automatic Administrivia The Cobbler’s Children
Use the tools available to you!
Ruthless Testing Test early. Test often. Test
automatically.
Coding ain’t done ’til all the tests run.
Ruthless Testing What to Test
Unit testing Integration testing Validation and verification Resource exhaustion, errors, and recovery
Check normal things like memory and disk space
Check unusual things like video modes and bandwidth restrictions
Ensure graceful failures Performance testing Usability testing
Ruthless Testing What to Test How to Test
Regression testing compares test output with previous tests Types of test data
Real-world data Synthetic data
Large quantities of data Boundary conditions Statistical properties
Exercising GUI systems often requires specialized tools Testing tests
Cause bugs to ensure they are caught Use “saboteurs” to test your testing.
Testing thoroughly Use coverage analysis tools, but don’t expect 100% coverage Test state coverage, not code coverage.
Ruthless Testing What to Test How to Test When to Test
Test as soon as any production code exists Test automatically
Running tests Interpreting results
If a test cannot be run automatically, test regularly on a specified schedule
Ruthless Testing
What to Test How to Test When to Test Tightening the Net
Find bugs once.
It’s All Writing Treat English as just another
programming language.
Build documentation in, don’t bolt it on.
It’s All Writing Comments in Code
Comments should explain why something is done, not how
Use meaningful variable names Don’t include unnecessary information
Lists of functions exported Revision history Lists of other files used Filename
It’s All Writing
Comments in Code Executable Documents
Develop a single authoritative document for specifications that require multiple implementations
Automatically extract data from the controlling document when it is needed
It’s All Writing
Comments in Code Executable Documents Technical Writers
Follow pragmatic principles even if someone else is writing the documentation
It’s All Writing Comments in Code Executable Documents Technical Writers Print It or Weave It
Web-based documentation that can be kept up-to-date is preferable to printed documentation
Automatically generate different versions needed from a base document
It’s All Writing
Comments in Code Executable Documents Technical Writers Print It or Weave It Markup Languages
Rich markup languages make production of different documentation forms simple
Great Expectations Gently exceed your users’
expectations.
Great Expectations
Communicating Expectations Don’t ignore unreasonable
expectations Ensure users understand necessary
changes Impossible expectations Unnecessarily conservative expectations
Great Expectations
Communicating Expectations The Extra Mile
Surprise users with extra features, such as tool tips and keyboard shortcuts
Pride and Prejudice
Sign your work.