Software engineering as the design theoretic transformation of software problems