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
- Understand the realities of software development in teams
- be able to create effective unit tests for classes
- understand the need to design for maintenance
- be able to recognize good code and identify issues with poor code
- know how to use version control effectively
- be able to use short cycle incremental, iterative development
Course Content
- 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
- 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
- Coding Style and Documentation
- Why teams need a consistent coding style
- Documenting systems
- How much documentation is needed?
- Quality Assurance
- Distinguishing Quality Assurance and Quality Control
- Using feedback to improve system quality
- Continuous improvement and professional development
- Software Maintenance
- Why maintenance is important
- Design for maintenance
- Factors that affect the economic life of software
- Incremental and Iterative development in practice
- Big design up front does not work
- Incremental development and requirements capture
- Iteration means planning to do rework
- Version Control Systems
- Concurrent development within a team environment
- Configuration control and repeatable builds
- RCS and associated tools
- Practical Testing techniques
- Designing unit tests
- Designing functional tests from Use Cases
- 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
- Performance tuning
- The hazards of premature optimization
- Make it run, make it right, make it fast
- How fast is fast enough?
- Refactoring to improve design quality
- Rewriting code to improve maintainability
- Common refactoring strategies
- Design patterns and coding idioms
- The realities of multiplatform projects
- The world beyond windows
- The myth of legacy systems
- Working in a multiplatform environment
Recommended texts