סוגי תוכנות, ניתוח דרישות ופירוק אפיונים