Evolving Ispell: A Case Study of Program Understanding for Reuse