A qualidade de software é uma das principais preocupações desde as fases iniciais de desenvolvimento do software. Para isso, o software deve evoluir constantemente para atender as necessidades dos usuários e do ambiente (lei da mudança contínua). Por isso, são realizadas manutenções no software. Mas, se as manutenções forem conduzidas em discordância aos padrões de projeto empregados e às melhores práticas de programação, o software se tornará progressivamente mais acoplado e menos coeso, degradando sua qualidade, pois se torna menos modularizado. Assim, neste artigo, é proposta uma abordagem para reestruturar sistemas de software baseada na movimentação de classes entre pacotes para aprimorar a modularização e a manutenibilidade desses sistemas, melhorando sua qualidade estrutural. A movimentação de classes é determinada por uma heurística de otimização combinatória (Simulated Annealing). O resultado da avaliação indica que essa abordagem aprimora simultaneamente o acoplamento e a coesão do software, movimentando baixo percentual de classes, sem afetar estrutura de pacotes do software.