1. 软件生存周期
- 可行性分析
- 需求分析:解决“做什么”的问题。
- 概要设计:根据需求分析的结果,对软件整个系统进行设计,例如系统框架设计、数据库设计等。
- 详细设计:描述每个模块的具体功能,使功能精确、结构化。
- 程序编码:将软件设计的结果装换成可运行的程序代码。
- 软件测试:在软件设计完成后要经过严格的测试,已发现软件在整个设计过程中存在的问题并加以修正。
- 维护:在软件投入使用后,由于需要不断适应新要求,需要对软件进行维护,包括纠错性维护和改进性维护两个方面。
2. 能力成熟度模型(CMN)
分为5个成熟度级别:初始级、可重复级、已定义级、已管理和优化级。成熟度级别越高,软件开发生产精度越高,每单位工程的生产周期越短。
- 初始级:软件过程是无序的,可能也是混乱的。
- 可重复级:建立了基本的项目管理过程,能重复早先类似应用项目取得的成功。
- 已定义级:已将软件管理和工程俩方面的过程文档化、标准化
- 已管理级:收集对软件过程和产品质量的详细度量,对软件过程和产品都有定量的理解和控制。
- 优化级:过程的量化反馈和先进的新思想、新技术促使过程不断改进。
3. 统一过程模型
统一过程(UP):用力和风险驱动,以架构为中心,迭代并且增量的开发过程。
分为4个阶段:
- 初始阶段——生命周期目标
- 精华阶段——生命周期架构
- 构建阶段——初始运作功能
- 移交阶段——产品发布
4. 软件开发模型
- 瀑布模型:迭代模型/迭代开发方法。
- 演化模型:快速应用开发。
在获取用户的一组基本需求后,通过快速分析构造出该软件的一个初始可运行的版本,初始的软件称为原型。
- 增量模型:构建组装模型/基于构建的开发方法。
基于瀑布模型的基本成分和原型实现的迭代特征。
- 螺旋模型:统一过程/统一开发方法。
将瀑布模型和演化模型相结合,4个活动:制定计划、风险分析、实施过程、客户评估。
- 快速原型模型:敏捷开发方法。
- V模型:基于架构的开发方法。(瀑布模型的一种变体)
- 喷泉模型:模型驱动的开发方法。(以用户需求为动力、以对象为驱动,主要采用对象技术的软件开发过程,具有迭代和无间隙特性)
- 基于构件的开发模型:本质上是演化模型,以迭代方式构建软件。
5. 软件开发方法
- 结构化方法
面向数据流的开发方法,结构化分析根据分解与抽象的原则,用数据流图来建立系统的功能模型,完成需求分析工作。自顶向下、逐层分解。
- Jackson方法
,面向数据结构的开发方法,以数据结构为驱动。
- 原型化方法
适用于用户需求不清、业务理论不确定、需求经常变化的情况。
- 面向对象的开发方法
UML统一建模语言。
- 敏捷开发方法
目标是通过尽可能早、持续地对有价值的软件的交付使客户满意。极限编程:轻量级、高效、低风险、柔性、可预测、科学的软件开发方式,由价值观、原则、实践和行为4部分组成。
- 极限编程
5个原则:快速反馈、简单性假设、逐步修改、提倡更改、优质工作。
12个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准。
6. 需求分析
- 功能需求:考虑要做什么
- 性能需求:技术性指标
- 用户或人的因素:用户类型
- 环境需求:未来软件应用的环境,包括软硬件
- 界面需求:对数据格式、数据存储介质的规定
- 文档需求:针对哪些读者
- 数据需求:数据的格式、接收、发送数据的频率
- 资源使用需求:软件运行时所需的数据、内存空间等
- 安全保密要求
- 可靠性要求:考虑系统的可靠性
- 软件成本消耗与开发进度需求
- 其他非功能需求
7. 内聚和耦合
内聚
- 功能内聚:完成单一功能,每个部分协调工作,缺一不可
- 顺序内聚:处理元素相关,必须顺序执行
- 通信内聚:所有处理元素集中在一个数据结构的区域
- 过程内聚:处理元素相关,而且必须按照特定的次序进行
- 瞬时内聚:所包含的任务必须在同一时间段完成
- 逻辑内聚:完成逻辑上的一组任务
- 偶然内聚:完成一组没有关系或松散关系任务
耦合
- 非直接耦合:两个模块之间没有直接关系,之间的联系通过主模块的控制和调用实现
- 数据耦合:一组模块借助参数表传递简单数据
- 标记耦合:通过参数表传递记录信息
- 控制耦合:模块之间的传递的信息包含用用于控制模块内部逻辑的信息
- 外部耦合:一组模块都访问同一全局简单变量,不是通过参数表传递全局变量的信息
- 公共耦合:一组模块都访问同一公共数据环境
- 内容耦合:一个模块直接访问另一个模块的内部数据;一个模块不能通过正常入口转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。