Automating Software Testing: A Life-Cycle Methodology