A resposta simples é que depende do sistema. Se você está escrevendo software incorporado para um monitor cardíaco ou ferramentas de monitoramento de segurança para um reator nuclear, o padrão é muito mais alto do que se você estiver escrevendo uma plataforma de blog.
Esta é realmente uma pergunta para um bom testador de sistema (e eu não sou um), mas vou tentar.
Sua medida básica será a cobertura do teste: quanto do aplicativo foi realmente testado (por teste de unidade e funcionalmente).
Você precisa avaliar cada caso de uso em potencial (e parâmetros para esse caso de uso) quanto à probabilidade de ele realmente ser usado (para que você possa descartar casos extremos), complexidade (coisas mais simples são menos propensas a conter bugs ou menos propensas a conter problemas físicos) para encontrar bugs), custo para testar (em termos de tempo) e impacto potencial de um defeito se descoberto nessa área (é aqui que entra a plataforma de reator nuclear vs. blogging).
Com base nessa avaliação, você precisa descobrir quais deles serão testados e em quantos detalhes. Depois de ter uma lista como essa, a equipe (incluindo um gerente de produto / gerente de projeto / representante do usuário) pode passar por essa lista e priorizar com base nas restrições existentes.
Uma técnica útil para se pensar é que você também pode variar os casos de uso que são testados a cada release. Por exemplo, você pode ter uma lista de casos de teste não críticos e testar metade deles com um release e metade com o próximo (depois alternar). Dessa forma, você está aumentando a cobertura total de teste obtida pelo esforço (embora com o risco de erros de regressão sendo introduzidos).
Isso também pode se estender ao teste da plataforma - se você oferecer suporte a dois back-ends do banco de dados (ou vários navegadores), teste metade do aplicativo em um, a outra metade no outro e depois troque a próxima versão.
(Acho que isso é chamado de striping, mas não me cite nisso.)
E a última coisa a se pensar não é o que você testa, mas o que você corrige quando os problemas são descobertos. É comum dizer "corrigir todos os bugs", mas a realidade é que existem pressões no tempo e nem todos os bugs são iguais. Novamente, a limpeza regular de bugs com todas as partes relevantes é o melhor caminho a seguir. Isso é particularmente relevante quando uma correção de bug pode ser particularmente intrusiva, pois o trabalho adicional nos testes de teste e regressão que gera pode compensar os benefícios da correção.