I. Introduction
Software engineers face a constantly growing pressure to build secure software by design [9], where systems have to be designed from the ground up to be secure and resistant to attacks. To achieve this goal, software architects work with various stakeholders to identify security requirements and adopt appropriate architectural solutions to address these requirements. These architectural solutions are often based on security tactics [10]. Bass et al. [5] provide a comprehensive list of such tactics and define security tactics as reusable solutions to satisfy security quality attributes regarding resisting attacks (e.g., tactic “Authenticate Actors”), detecting attacks (e.g., tactic “Detect Intrusion”), reacting to attacks (e.g., tactic “Revoke Access”), and recovering from attacks (e.g., tactic “Audit”). As argued by Cervantes et al. [8], strategic, system-wide architectural approaches result in the highest security and lowest maintenance costs.