Este projeto contém um sistema de gerenciamento de arquivos em C com suporte completo a testes automatizados e desfragmentação de disco.
├── src/ # Código-fonte organizado
│ ├── gerenciador.h # Header com declarações principais
│ ├── gerenciador_core.c # Biblioteca principal com todas as funções
│ ├── main.c # Programa principal (interface do usuário)
│ ├── test_main.c # Testes usando a biblioteca real (RECOMENDADO)
│ ├── test_completo.c # Testes independentes (LEGADO)
│ ├── test_gerenciador.c # Testes modulares (desenvolvimento)
│ └── main_monolitico_backup.c # Backup da versão monolítica original
├── output/ # Diretório para arquivos compilados
│ ├── main.exe # Executável principal
│ ├── test_main.exe # Executável de testes (usa código real)
│ └── test_completo.exe # Executável de testes independentes
├── .vscode/ # Configurações VS Code
│ └── tasks.json # Tasks de build integradas
├── Makefile # Sistema de build automatizado
└── README.md # Este arquivo
O projeto utiliza uma arquitetura modular onde:
gerenciador_core.c: Contém todas as funções de negóciomain.c: Contém apenas a interface do usuário e loop principaltest_main.c: Testa o código real via linking (MELHOR PRÁTICA)test_completo.c: Versão independente para comparação
make windows # Compila para Windows (gera .exe)
make all # Compila versão Unix/Linux
make clean # Remove todos os arquivos compiladosmake run-windows # Executa o programa principal no Windows
make test-windows # Executa os testes (usa biblioteca real) - RECOMENDADO
make test-completo-windows # Executa testes independentes (legado)
make run # Executa versão Unix/Linux
make test # Executa testes Unix/Linux./mainSe preferir compilar manualmente:
# Programa principal (interface + biblioteca)
gcc -Wall -Wextra -std=c99 -o output/main.exe src/main.c src/gerenciador_core.c
# Testes que usam a biblioteca real (RECOMENDADO)
gcc -Wall -Wextra -std=c99 -o output/test_main.exe src/test_main.c src/gerenciador_core.c
# Testes independentes (para comparação)
gcc -Wall -Wextra -std=c99 -o output/test_completo.exe src/test_completo.c- ✅ Modularidade: Separação clara entre lógica de negócio e interface
- ✅ Testabilidade: Testes usam exatamente o mesmo código de produção
- ✅ Manutenibilidade: Mudanças na biblioteca automaticamente afetam testes
- ✅ Reutilização: Biblioteca pode ser usada em outros projetos
- ✅ Consistência: Garante que testes validam o código real, não uma cópia
- Inicialização - Verifica se o sistema inicia corretamente
- Gravar arquivo simples - Testa gravação de um arquivo pequeno
- Gravar múltiplos arquivos - Testa gravação de vários arquivos
- Deletar arquivo - Testa remoção de arquivo existente
- Deletar arquivo inexistente - Testa comportamento com arquivo que não existe
- Verificação nome duplicado - Impede gravação de arquivos com mesmo nome
- Espaço insuficiente - Testa comportamento quando não há espaço suficiente
- Fragmentação e reuso - Testa se o sistema reutiliza espaços liberados
- Arquivo exato um setor - Testa arquivo que ocupa exatamente um setor
- Arquivo múltiplos setores - Testa arquivo que ocupa vários setores
- Sequencial gravar/deletar - Teste de estresse com múltiplas operações
- ✓ PASSOU: O teste foi executado com sucesso
- ✗ FALHOU: O teste encontrou um problema, com descrição do erro
=== TESTE DO GERENCIADOR DE ARQUIVOS ===
Executando testes básicos...
✓ PASSOU: Inicialização - Memória completamente livre
✓ PASSOU: Gravar arquivo simples
✓ PASSOU: Gravar múltiplos arquivos
✓ PASSOU: Deletar arquivo
✓ PASSOU: Deletar arquivo inexistente
Executando testes avançados...
✓ PASSOU: Espaço insuficiente
✓ PASSOU: Fragmentação e reuso
✓ PASSOU: Arquivo exato um setor
✓ PASSOU: Arquivo múltiplos setores
✓ PASSOU: Sequencial gravar/deletar
=== RESUMO DOS TESTES ===
Total de testes executados: 10
Testes que passaram: 10
Testes que falharam: 0
🎉 TODOS OS TESTES PASSARAM! 🎉
O arquivo test_gerenciador.c inclui:
- Funções auxiliares para verificação de estado
- Setup de teste que inicializa o ambiente para cada teste
- Testes modulares que verificam funcionalidades específicas
- Relatório detalhado com estatísticas de sucesso/falha
Para adicionar novos testes:
- Crie uma função
void teste_nova_funcionalidade() - Use
setup_teste()para inicializar o ambiente - Execute as operações que deseja testar
- Use
imprimir_resultado_teste()para reportar o resultado - Adicione a chamada da função na
main()
Se algum teste falhar, você pode:
- Adicionar prints de debug nas funções de teste
- Usar as funções auxiliares como
mostraSetores(),mostraArquivos()emostraMemoria() - Executar testes individuais comentando outros na função
main()
As constantes do sistema são definidas no início dos arquivos:
TAMGRANULO 3- Tamanho de cada setor em caracteresTAMMEMORIA 30- Número total de setores disponíveis
- Flávia Marcella Gonçalves Moreira: 2024.1.08.025
- Larissa Rodrigues de Ávila: 2024.1.08.031
- Vinicius Ribeiro da Silva do Carmo: 2023.2.08.003