Digital Systems Testing and Testable Design