Dividing the software into different kinds of software units