Study, design and establishing relationships among software complexity metrics, faults and testability