types of software and systems