Effective Software Development

Effective Software Development is much more than just writing code. Effective software developers must address issues from across the entire spectrum from requirements, design, testing, performance tuning and long term maintenance. This course focuses on the practical, pragmatic techniques that enable developers to work effectively as part of a project team. This includes coding standards, version control, quality assurance, testing frameworks, debugging tools, performance tuning, designing interfaces, Refactoring to improve design quality and more.

Course Format and Style

This course is language neutral. It has been delivered using both C++ and Java.

Duration and intended Audience

4 or 5 Days (tailored versions for companies can also be provided, in-house versions of this course require a minimum of 6 participants)

Course Goals

Course Content

  1. The history of Software Engineering
    • The software crisis is over 30 years old, but is there really a crisis?
    • How systems are developed vs. how books say they should be developed
    • Analysis Paralysis and other diseases of software development
  2. Extreme Programming the values
    • The UML is a Notation, not a Methodology
    • Exploring the Methodology space
    • High Ceremony, Low Ceremony and Minimal Methodologies
    • Extreme Programming, pictures are nice but tested code is better
  3. Coding Style and Documentation
    • Why teams need a consistent coding style
    • Documenting systems
    • How much documentation is needed?
  4. Quality Assurance
    • Distinguishing Quality Assurance and Quality Control
    • Using feedback to improve system quality
    • Continuous improvement and professional development
  5. Software Maintenance
    • Why maintenance is important
    • Design for maintenance
    • Factors that affect the economic life of software
  6. Incremental and Iterative development in practice
    • Big design up front does not work
    • Incremental development and requirements capture
    • Iteration means planning to do rework
  7. Version Control Systems
    • Concurrent development within a team environment
    • Configuration control and repeatable builds
    • RCS and associated tools
  8. Practical Testing techniques
    • Designing unit tests
    • Designing functional tests from Use Cases
  9. Debugging tools, tips and techniques
    • Now that testing has reported an error, how to locate the error
    • Using unit tests as a debugging tool
    • Common bugs and how to avoid them
  10. Performance tuning
    • The hazards of premature optimization
    • Make it run, make it right, make it fast
    • How fast is fast enough?
  11. Refactoring to improve design quality
    • Rewriting code to improve maintainability
    • Common refactoring strategies
    • Design patterns and coding idioms
  12. The realities of multiplatform projects
    • The world beyond windows
    • The myth of legacy systems
    • Working in a multiplatform environment

Recommended texts