To ensure software application reliability and project success Software Testing plays a very crucial role. Everything can and should be tested. Few steps below (as far as i know base on theory and implementation in my company) to make Software Testing Effective:
Requirement Phase
Involve Testers from the beginning
Verify the Requirements
Design Test Procedures as soon as Requirements are available
Ensure that Requirement changes are communicated
Beware of Developing and Testing based on an Existing System
Test Planning
Understand the task at hand and The Related Testing Goal
Consider The Risks
Base Testing efforts on a Prioritized feature schedule
Keep Software issues in mind
Acquire Effective Test Data
Plan The Test Environment
Estimate Test Preparation and Execution Time
The Testing Team
Define Roles and Responsibilities
Require a Mixture of Testing skills, subject-matters expertise, and experience
Evaluate The Testers effectiveness
The System Architecture
Understand the Architecture and Underlaying Components
Verify that the System Supports Testability
Use Logging to Increase System Testability
Verify that the System Supports Debug and Release Execution Modes
Test Design and Documentation
Divide and Conquer
Mandate the use of Test Procedure Template and other Test Design standards
Derive Effective Test Cases from Requirements
Treat Test Procedures as 'Living' Documents
Utilize System Design and Prototypes
Use proven Testing Techniques when designing Test Cases scenarios
Avoid including constraints and detailed data elements within Test Procedures
Apply Exploratory Testing
Unit Testing
Structure the Development Approach to support Effective Unit Testing
Develop Unit Test in paralel or before the Implementation
Make Uni-Test Execution Part of the Build Process
Automated Testing Tools
Know the different types of Testing Support Tools
Consider building a Tool instead of buying one
Know the impact of Automated Tools on The Testing Effort
Focus on the needs of your organization
Test the Tools on an Application Prototype
Automated Testing
Do not rely solely on capture/playback
Develop Test Harness when necessary
Use proven Test Script Development techniques
Automate Regression Tests when feasible
Implement Automated Builds and Smoke Tests
Non Functional Testing
Do not make Non Functional Testing an Afterthought
Conduct Performance Testing with Production-Sized Databases
Tailor usability Test to the intended audience
Consider all aspects of Security for specific requirements and system-wide
Investigate the System's Implementation to plan for concurrency Tests
Set up an efficient environment for Compatibility Testing
Managing Test Execution
Clearly define the beginning and end of The Test Execution Cycle
Isolate the Test Environment from the Development Environment
Implement a Defect Tracking Life Cycle
Track the execution of The Testing Program