A modular environment for software development and re-engineering