How to: Design and Develop an Application to Ensure its Quality James Hippolite Senior.NET Developer Telecom New Zealand Limited James Hippolite Senior.NET Developer Telecom New Zealand Limited
Agenda Defining Quality Defining Quality Designing Quality Designing Quality Developing Quality Developing Quality Questions? Questions?
Defining Quality Managing Tradeoffs Managing Tradeoffs –Fixed –Chosen –Adjustable Quality is the fourth dimension Quality is the fourth dimension –Should never be compromised ResourcesSchedule Features
Defining Quality (cont) Bad Bad –Amorphous –Ambiguous Examples Examples –Make it fast –Make it cool –Make it work Good Good –Specific –Early –Consistent –Measurable –Evaluate –Feedback
Designing Quality Scalability Scalability Availability Availability Reliability Reliability Performance Performance Interoperability Interoperability Localisation & Globalisation Localisation & Globalisation
Design for Scalability Common Approaches Common Approaches –Scaling Up –Scaling Out Guidelines Guidelines –Asynchronous –Non-competition of resources –Commutability –Interchangeability –Partition resources and activities
Design for Availability Measurements Measurements –Mean Time Between Failures –Mean Time to Recovery Guidelines Guidelines –Reduce planned downtime –Reduce unplanned downtime –Use network load balancing –Use RAID for data stores –Isolate mission-critical applications –Use queuing
Designing for Reliability The ability of the application to provide accurate results The ability of the application to provide accurate results Tasks Tasks –Putting reliability requirements in the specification –Using a good architectural infrastructure –Including management information in the application –Using redundancy –Using quality development tools –Using reliability checks that are provided by the application –Implementing error handling –Reducing the application’s functionality instead of completely failing the application
Designing for Performance Performance goals and metrics Performance goals and metrics –What is the business goal? –What is the critical functionality of the system? –What are the features required by different sets of users? Designing for performance Designing for performance –Identifying constraints –Determining features –Specifying the load
Design for Interoperability Reasons Reasons –Reduces operational cost and complexity –Enables optimal deployments –Uses existing investments Designing for Interoperability Designing for Interoperability –Network interoperability –Data interoperability –Applications interoperability –Management interoperability
Design for Globalisation and Localisation Definitions Definitions –Making the application capable of operating in multiple cultures and locales –Adapting the application to a specific culture and locale Issues Issues –Language –Formatting –String-related –User interface
Developing Quality Testing Testing Reviewing Reviewing Training Training
Testing Test Often Test Often –Unit, Systems, Integration, Load (Stress), User Acceptance, Regression Test Driven Development Test Driven Development –Design test to fail first –Write code to make test pass –Iterate for each function –Refactor to accommodate changes –Voilà! Instant regression tests
Reviewing Code Code –This happens naturally, esp. when the customer wants a new function six months (or six years!) later –Take time to appraise code. Is it understandable to another developer? Peer Peer –Systemic examination of source code intended to find and fix mistakes overlooked in initial development phase –Improves both the overall quality of software and the developer’s skill Post-Implementation Post-Implementation –Project team’s opportunity to discover what went right/wrong
Training Certification Certification –Maintaining currency with latest technologies Best Practices Best Practices –Adhere to coding standards –Source code version control –Design Patterns
Adhere to coding standards Appropriate use of comments Appropriate use of comments Use expressive variables Use expressive variables Maintain scope Maintain scope
Design Patterns Many, small functions = code reuse Many, small functions = code reuse N-tier development N-tier development Agile development Agile development –RAD –Prototyping –Extreme –TDD MVC MVC
Source code version control Accidents happen, get your code backed up Accidents happen, get your code backed up Not just accidents, go back a version if necessary Not just accidents, go back a version if necessary Pair programming Pair programming Only check in code that compiles! Only check in code that compiles!
Q&A