Aula 155: Cobertura de Código e Métricas de Qualidade
Ao desenvolver software, especialmente em Swift, garantir a qualidade do seu código é fundamental. Uma das maneiras mais eficazes de medir a qualidade do seu código é através da cobertura de código e das métricas de qualidade. Nesta aula, vamos explorar o que é a cobertura de código, como medi-la em Swift e discutir métricas adicionais de qualidade que podem ajudar a melhorar seu projeto.
O que é Cobertura de Código?
Cobertura de código é uma medida que descreve o grau em que seu código-fonte é testado por testes automatizados. Ela indica quais partes da sua base de código são executadas e testadas através dos seus testes. Uma alta cobertura de código geralmente implica que você possui um aplicativo bem testado, mas é importante lembrar que isso não garante a ausência de bugs.
Tipos de Cobertura de Código
- Cobertura de Instruções: Mede se cada instrução no código é executada.
- Cobertura de Ramificações: Mede se cada ramificação (por exemplo, cada condição em um comando
if
) é executada. - Cobertura de Funções: Mede se cada função no seu código é chamada.
- Cobertura de Linhas: Mede quais linhas de código foram executadas durante os testes.
Medindo Cobertura de Código em Swift
Para medir cobertura de código em Swift, você geralmente usará as ferramentas de cobertura de código integradas do Xcode. Aqui está como você pode ativar e visualizar a cobertura de código em seu projeto Swift.
Passo 1: Ativar Cobertura de Código
- Abra seu projeto no Xcode.
- Selecione o esquema que você deseja testar.
- Clique em "Editar Esquema."
- Na seção "Teste", marque a caixa que diz "Coletar dados de cobertura."
Passo 2: Execute Seus Testes
Uma vez que você tenha ativado a cobertura, execute seus testes usando Command + U (ou escolha Produto > Teste no menu). O Xcode executará seus testes e coletará dados de cobertura de código.
Passo 3: Visualize o Relatório de Cobertura
Após a execução dos testes, você pode visualizar o relatório de cobertura:
- Abra o Navegador de Relatórios pressionando Command + 9.
- Selecione o relatório de teste mais recente.
- Clique na aba “Cobertura”. Aqui, você verá uma visão geral codificada por cores de quais linhas de código foram cobertas pelos testes.
Exemplo de Código e Testes
Vamos analisar um exemplo simples de uma classe Swift e seus respectivos testes unitários.
// Classe Swift de Exemplo
class Calculadora {
func adicionar(_ a: Int, _ b: Int) -> Int {
return a + b
}
func subtrair(_ a: Int, _ b: Int) -> Int {
return a - b
}
}
// Testes Unitários de Exemplo
import XCTest
class TestesCalculadora: XCTestCase {
var calculadora: Calculadora!
override func setUp() {
super.setUp()
calculadora = Calculadora()
}
func testAdicao() {
XCTAssertEqual(calculadora.adicionar(2, 3), 5)
XCTAssertEqual(calculadora.adicionar(-1, 1), 0)
}
func testSubtracao() {
XCTAssertEqual(calculadora.subtrair(5, 2), 3)
XCTAssertEqual(calculadora.subtrair(0, 0), 0)
}
}
Ao executar esses testes com a cobertura de código ativada, você verá que tanto as funções adicionar
quanto subtrair
estão cobertas, e você obterá um relatório detalhado da porcentagem de cobertura.
Métricas de Qualidade
Embora a cobertura de código seja uma métrica essencial, não é a única que você deve considerar. Aqui estão algumas métricas de qualidade adicionais para ficar de olho:
-
Complexidade Ciclomática: Mede a complexidade de um programa contando o número de caminhos linearmente independentes. Uma complexidade menor geralmente leva a uma manutenção mais fácil e maior legibilidade.
Você pode analisar a complexidade ciclomática usando ferramentas como SwiftLint ou por meio de uma revisão manual de código.
-
Duplicação de Código: Identificar e reduzir a duplicação de código ajuda a tornar sua base de código mais manutenível. Bibliotecas como SwiftLint podem ajudá-lo a detectar código duplicado.
-
Análise Estática: Ferramentas como SwiftLint e SonarQube analisam o código em busca de erros potenciais, convenções de código e problemas de complexidade.
-
Taxa de Aprovação de Testes: Simplesmente rastreie quantos dos seus testes são aprovados em comparação com os que falham. Uma taxa de aprovação mais alta normalmente indica uma boa qualidade de código.
Conclusão
Nesta aula, cobrimos a importância da cobertura de código e a medição de métricas de qualidade no desenvolvimento em Swift. Lembre-se de que, embora buscar uma alta cobertura de código seja uma meta louvável, é igualmente importante considerar outras métricas de qualidade para garantir que sua base de código permaneça limpa, manutenível e livre de bugs. Revisar regularmente essas métricas como parte do seu processo de desenvolvimento pode levar a um software mais robusto e confiável.