Design of software testing architecture based on pattern based re-engineering to measure software testing effort