Formal Approaches To Software Testing And Runtime Verification by