characteristics of software