what is software and its types