Automating Software Reuse