Modeling Techniques for Software-Intensive Systems