Software engineering tools and methods