1 Code Quality in an Agile World
Traditional Methods of Software Development
Agile Methods of Software Development
Scrum
extreme Programming
Test-Driven Development
Moving Quality Upstream
Inside Microsoft: Windows Live Hotmail Engineering
Engineering Principles
Key Success Factors
Tactics for Writing Solid Code
Focus on Design
Defend and Debug
Analyze and Test
Improve Processes and Attitudes
Summary
Key Points
2 Class Design and Prototyping
Collaboration in Visual Studio
Think First, Code Later
Software Modeling
Unified Modeling Language
Prototyping
Summary
Key Points
3 Metaprograrnrning
What Is Metadata?
Metadata in Managed Applications
Application Configuration Files
Metadata in Your Applications
Inside Microsoft: Configuration Management in Windows Live Spaces.
Summary
Key Points
4 Performance Is a Feature
Common Performance Challenges
Network Latency
Payload Size and Network Round Trips
Limited TCP Connections
Poorly Optimized Code
Analyzing Application Performance
Analyzing the Performance of Live Search
Tactics for Improving Web Application Performance
Reduce Payload Size
Cache Effectively
Optimize Network Traffic
Organize and Write Code for Better Performance
Incorporating Performance Best Practices
Establish a Performance Excellence Program
Inside Microsoft: Tackling Live Search Performance
Web Performance Principles
Key Success Factors
Summary
Key Points
5 Designing for Scale
Understanding Application Scalability
Approaches to Scalability
Database Scalability
Tactics for Scaling Web Applications
Inside Microsoft: Managing the Windows Live Messenger Service
Infrastructure
Engineering Principles
Summary
Key Points
6 Security Design and Implementation
Common Application Security Threats
Principles for Designing Secure Applications
Security Design Principles
SD3+C Strategy and Practices for Secure Applications
Secure by Design
Secure by Default
Secure in Deployment and Communication
Understanding .NET Framework Security Principles
Additional Security Best Practices
Summary
Key Points
7 Managed Memory Model
Managed Heap
Garbage Collection
Managed Wrappers for Native Objects
GC Class
Large Object Heap
Finalization
Non-Deterministic Garbage Collection
Disposable Objects
Dispose Pattern
Weak References
Pinning
Tips for the Managed Heap
CLR Profiler
CLR Profiler Walkthrough
Summary
Key Points
8 Defensive Programming
Defensive Programming and C#
Warnings
Code Review
Software Testing
Test-Driven Development
Code Coverage
Self-Documenting Code
Naming Conventions
Pseudo Code
Comments
Defensive Programming with Classes
Modifiers
Interfaces
Defensive Programming Without Examples
Defensive Programming with Examples
Design Patterns
Summary
Key Points
9 Debugging
Overflow Bug
Pentium FDIV Bug
Symbols
Symbol Server
Source Servers
Preemptive Debugging
Proactive Debugging
Managed Debugging Assistants
MDA Example
Code Analysis
Performance Monitoring
Debugging
Debugging Tools
Visual Studio
.NET Framework Tools
Debugging Tools for Windows
CLR Profiler
Sysinternals
Tracing
Web Application Tracing
Exception Handling
Production Debugging
ADPlus
Summary
Key Points
10 Code Analysis
Invest in the Test Process
Define a Test Rhythm
Establish Test Work Item Tracking
Incorporate Automated Code Analysis
Use Static Code Analysis Tools
Write Application Test Code
Testing with Visual Studio
Use Metrics to Understand Quality
Measuring Complexity and Maintainability of Code
Using Perspectives to Understand Quality
Inside Microsoft: Managing Quality for the Microsoft.com Web Analytics Platform
The Importance of Code Quality
The Test Investment
Managing Quality
Summary
Key Points
11 Improving Engineering Processes
Tactics for Engineering Process Improvement
Establish a Quality-Focused Project Rhythm
Implement Source Control and Check-in Processes
Release and Test Code Daily
Automate Daily Builds
Using MSBuild
Create and Enforce Quality Criteria
Summary
Key Points
12 Attitude Is Everything
Passion
Linear versus Iterative
Sales Are Good
Features
Flexibility
Solve Real Problems
You Are Responsible
Port Code as New Code
Refactoring
Priorities
Be Realistic
Paradigm Shift
Expand Your Perspective
A Agile Development Resources
B Web Performance Resources
Index