Software Techniques for Dependable Computer-based Systems