Design for Trustworthy Software: Tools, Techniques, and Methodology of Developing Robust Software