programs that help users solve particular problems or needs
programs that help users solve particular computing problems (ex. registration systems for students to register for classes)
a set of values used by the programmer to test if the program works correctly.