一个软件项目主要分为哪些阶段?各个阶段主要做哪些工作?