Non è una questione di quale sia il migliore, in larga misura queste attività si uniscono.
Ad esempio, alcune delle minacce banali (ad esempio SQL injection e XSS) possono essere adeguatamente mitigate in anticipo, scegliendo la progettazione appropriata, utilizzando la tecnologia appropriata e definendo le linee guida di codifica rilevanti.
D'altra parte, la maggior parte dei meccanismi di sicurezza e delle mitigazioni sono irrilevanti, finché non comprendi le minacce che stai cercando di mitigare.
E ancora un altro punto da considerare è che qualsiasi meccanismo di sicurezza implementato, deve anche essere modellato sulla minaccia. Sì, a volte un "meccanismo di sicurezza" introduce effettivamente NUOVE minacce e questo deve essere considerato attentamente. (Ad esempio, anti-virus ...)
Quindi, linea di fondo: un approccio iterativo è il migliore, coinvolgendo la modellazione delle minacce come parte della costruzione del progetto.
Così come fai il design del sistema in modo iterativo - prima l'architettura generale, poi la progettazione dettagliata, poi i moduli / le caratteristiche / qualsiasi cosa - per ogni iterazione dovrebbe esserci una TM rilevante. Quindi ad es. post-architettura / pre-progettazione è possibile costruire una banale TM; man mano che approfondisci, TM quei dettagli man mano che vai!