Η διαδικασία ανάπτυξης λογισμικού εξελίσσεται σε διακριτές φάσεις ή στάδια. Θεωρείται υποσύνολο του κύκλου ζωής ενός συστήματος λογισμικού που ξεκινά από την ανάλυση απαιτήσεων και τελειώνει με την παύση λειτουργίας του. Αρκετές φορές, οι θεωρητικές προσεγγίσεις για την ανάπτυξη λογισμικού έχουν δεχθεί κριτική για την αποτελεσματικότητά τους, καθώς συχνά, στη πράξη, παρουσιάζονται σημαντικές αποκλίσεις από τον αρχικό σχεδιασμό. Παρόλα αυτά είναι ιδιαίτερα χρήσιμο, η ανάπτυξη ενός λογισμικού να ακολουθεί συγκεκριμένα μοντέλα, τα οποία έχουν προταθεί ανάλογα με τα προτερήματα και τις αδυναμίες τους. Μεταξύ των βασικών μεθοδολογιών (μοντέλων) που έχουν προταθεί και ακολουθούνται, θα αναφερθούμε στο μοντέλο του καταρράκτη (waterfall model) και της σπειροειδούς προσέγγισης (spiral model).