软件生命周期之需求分析和软件设计
1. 什么是软件生命周期
软件生命周期又称为软件生存周期或系统开发生命周期,是指从软件的产生直到报废的整个过程,它包括问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段。每一个阶段都有确定的任务,并产生一定规格的文档(资料),提交给下一个周期作为继续工作的依据。
2. 软件生命周期过程包括哪些方面
- 问题定义:用户需要计算机解决的问题是什么?
- 可行性分析:用户需要计算机解决的问题是否可行?
- 市场可行性分析,是否有市场价值。
- 技术可行性分析,使用什么技术解决用户提出的问题。
- 需求分析(重点):将用户提出的问题进行细化,先确定大模块,对每一个大模块进行细化,直到细化到不能细化为止。
- 设计(次重点):确定细化问题的实现方法(比如:要设计什么接口,设计功能什么技术实现……)
- 编码:去解决问题,依据需求和设计文档进行开发
- 测试:验证是否已经解决用户提出的问题。
- 单元测试(通过在开发阶段由开发人员进行测试)
- 集成测试(测试业务整体流程)
- 功能用例测试(对每个细化的功能点进行测试)
- 性能测试(使用专业工具进行压力和稳定性测试)
- 维护(占整个软件生命周期很大的比重)
- 修改性维护:前期没有测试出的问题,正式上线运行后 bug 显示出来了,对这些 bug 进行修复。
- 完善性维护:在现有功能的基础上增加或完善功能。
- 预防性维护:后期根据正式运行的情况对系统进行优化。
3. 常用的开发模型
3.1 瀑布模型
瀑布模型是软件开发的各个阶段是顺序执行,从系统需求分析开始知道产品发布和维护,每个阶段都会产生循环反馈,因此,如果有信息未被覆盖或者发现了问题,那么最好“返回”上一个阶段并进行适当的修改,项目开发进程从一个阶段“流动”到下一个阶段,这也是瀑布模型名称的由来。
适用场合:需求明确,解决方案明确,常在一些中小型项目中使用。
|
|
3.2 原型模型
原型模型即样品模型,先借用已有系统作为原型模型,通过“样品”不断改进,使得最后的产品就是用户所需要的。
原型模型采用逐步求精的方法完善原型,使得原型能够“快速”开发,避免了像瀑布模型一样在冗长的开发过程中难以对用户的反馈做出快速的响应。
强调:逐步求精(每一次修改对上次原型的完善)对原型进行修改优化,开发阶段围绕着原型(当成样品)进行实施。
适用场合:前期需求不确定,采用原型方法方便搜集需求。
3.3 增量模型
增量模型:瀑布模型+原型模型,增量模型融合了瀑布模型的基本成分(重复应用)和原型实现的迭代特征。
每一次增量经过了开发的每一个阶段(瀑布模型经过的所有阶段)。
每一次增量对功能进行完善(原型模型的逐步求精)。
适用场合:大型项目,需求不明确。
4. 需求分析
4.1 什么是需求分析
需求分析是在问题定义以及可行性分析完成后细化用户对软件的功能和性能的要求,即用户希望软件做什么事情,完成什么样的功能,达到什么性能。
重要性:需求分析是软件工程的开端,我们设计的软件产品存在不完整性、不正确性大部分原因是需求分析错误导致的,因此,需求分析是软件生命周期中最重要的过程。
需求分析包括需求调研、需求描述、需求评审。
4.2 需求调研
目标:挖掘用户的需求。
过程:首先确定目标用户,开发人员和目标用户确定一个问题领域,并定义一个描述问题的系统,用户在这个问题领域和系统下提出需求,需求类型包括:功能需求、质量需求、用户体验需求等。
需求调研方法:根据不同的项目、不同的用户群体采用不同的方法。
- 与客户交谈,向用户提问题
- 参观用户工作流程,观察用户操作
- 向用户发调查问卷(通常是以选择题和是非题为主)
- 与同行、专家交谈,听取他们的意见
- 分析已经存在的软件产品,提取需求
- 从行业标准、规划中提取需求
- 上网搜索相关资料
成果物:需求调研报告.doc
4.3 需求描述
通过需求调研对收集到的资料进行分析、鉴别、综合和建模,清除用户需求的模糊性、歧义性和不一致性,分析系统的数据要求,为原始问题及目标软件建立逻辑模型。分析人员需要编写“软件需求说明书”并与用户交流确认。
成果物:“软件需求说明书”或“软件需求规格说明书”。
重要性:软件开发人员需要根据“软件需求规格说明书”进行设计和编码。
软件需求规格说明书的内容也是根据公司的项目管理水平而定。
内容基本包括:系统概述、运行环境、功能模块图、功能用例、性能需求、接口需求、其他需求等。
4.4 需求评审
由架构师、技术经理、需求分析人员、设计人员、开发人员对“软件需求规格说明书”进行审核。
审核内容:
- 看软件需求规格说明书是否符合文档规范
- 需求描述是否详细(设计人员可以依据需求说明书进行设计)
5. 设计
软件设计是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写核心代码,形成软件的具体设计方案。软件设计一般分为总体设计(概要设计)和详细设计。
5.1 概要设计
根据软件需求说明,建立目标系统的总体结构和模块间的关系;系统网络部署结构;核心业务流程;定义系统的外部接口、以及模块间的接口;编写概要文档;概要设计审查。
概要设计内容:
- 总体结构和模块间的关系;
- 系统架构包括:技术架构和功能架构(就是需求描述的功能框图)
- 系统网络部署结构
- 业务流程图
- 定义系统的外部接口、以及模块间的接口
- 接口数据描述(重点)
5.2 详细设计
详细设计内容:详细设计的主要任务是设计每个模块的类接口、所需的局部数据结构、物理数据模型、页面原型等。
注意:一般情况下根据公司人力现状不写详细设计文档的,可以在需求分析阶段和概要设计阶段对详细设计的内容进行描述。
每个模块的类接口:通过伪代码实现,描述接口参数、接口功能。
局部数据结构:需要自定义什么数据类型。
物理数据模型(重点):使用 powerDesigner 设计物理数据模型(根据公司要求可能在需求分析阶段或概要设计阶段实现)。