A Reasoning Framework For Dependability In Software Architectures