5.1 软件工程
1.软件工程基本概念
是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则和方法,以提高质量、降低成本和改进算法。
2.软件危机
软件开发进度难以预测。
软件开发成本难以控制。
软件功能难以满足用户期望。
软件质量无法保证。
软件难以维护。
缺少文档资料。
3.软件工程过程
P(Plan)——软件规格说明。
D ( Do) ——软件开发。
C(Check)——软件确认。
A(Action)——软件演进。
4.软件设计四个活动
数据设计、架构设计、人机界面设计、过程设计(功能等)。
5.软件生命周期
需求分析、软件设计、软件开发、运行维护、淘汰。
6.软件过程模型(软件生命周期模型)
1)瀑布模型(Waterfall Model)
阶段:需求分析、系统设计、程序设计、编码实现、单元测试、集成测试、系统测试、运行维护。
特点:前一阶段工作输出成果是下一阶段的输入。(是结构化开发方法使用的过程模型)
缺点:需求难以一次确定、变更代价高、结果难以预测、各阶段工作不能并行。
2)原型模型
特点:解决了瀑布模型的问题,根据需求快速开发出原型,用于需求沟通确认,迭代最终实现软件产品。
分为:抛弃型和演化型。(是原型开发方法使用的软件过程模型)
3)螺旋模型
特点:由瀑布模型和原型模型结合而来,将每个阶段都由:目标设定、风险分析、开发和有效性验证、评审4部分组成。
强调“风险分析”。(适合于面向规格说明、面向过程、面向对象开发方法)
4)敏捷模型
极限编程XP:高效、低风险、测试先行(先编测试代码再编写程序)。
水晶系列方法:不同项目采取不同策略。
并列争球法:将开发过程分成短的迭代周期,挑选最高优先级的。
5)特征驱动开发方法:将开发人员分类。
6)软件统一过程模型RUP
特点:用例驱动、以架构为中心、迭代和增量的软件开发过程。使用4+1视图描述架构:用例视图(中心)、逻辑视图(用户)、实现视图(开发视图,程序员)、进程视图(系统集成人员)、部署视图(系统工程师)。
7.软件能力成熟度模型CMM、CMMI
成熟度等级:初始级、已管理级、已定义级、量化管理级、优化级。
5.2 需求工程
1.需求的3个层次:
业务需求:组织机构角度对系统产品高层次的目标要求。
用户需求:用户角度对系统产品的期望。业务需求和用户需求构成用户原始需求文档。
功能需求:从系统操作的角度定义了开发者必须实现的功能。
2.需求工程的5个阶段:
需求获取、需求分析、形成需求规格、需求确认与验证、需求管理
3.需求获取的基本步骤:
开发高层的业务模型、定义项目范围和高层需求、识别用户角色和用户代表、获取具体需求、确定目标系统的业务工作流、需求整理与总结
4.需求获取的方法:
用户面谈、需求专题讨论会、问卷调查、现场观察、原型化方法、头脑风暴法
5.软件需求规格说明书SRS
包括:功能需求、非功能需求和约束,约束包括设计约束和过程约束,是需求开发和需求管理之间的桥梁。
6.需求管理
包括:变更控制、版本控制、需求跟踪等活动。
过程:需求变更、识别问题、问题分析和变更描述、变更分析和成本计算、变更实现
7.变更控制委员会CCB
主要工作:通过评审的手段来决定是否能变更,但不提出变更方案。
操作步骤:制定决策、交流情况、重新协商约定。
8.需求跟踪
目标:建立与维护 “需求—设计—编程—测试” 之间的一致性,确保工作成果符合用户需求。
5.3 系统分析与设计
结构化方法 SASD
又称面向功能或面向数据流的软件开发方法,针对软件不同生命周期可分为:1.结构化分析、2.结构化设计、3.结构化编程。
1.结构化分析
用图形表示用户需求中的功能需求,使用的手段主要有:数据流图DFD、数据字典、结构化语言、判定表、判定树。
结构化分析建模过程:
明确目标、确定系统范围、建立顶层DFD图、构建第一层DFD分解图、开发DFD层次结构图、检查确认DFD图。
数据流图的4个基本元素:
数据流、处理加工、数据存储、外部项。
数据流图需要满足的规则:
1)父图数据流必须在子图中出现。
2)一个处理至少有一个输入流和输出流。
3)一个存储必定有流入和流出。
4)一个数据流至少有一端是处理端。
5)模型表达信息是全面的、完整的、正确的、一致的。
数据字典
2.结构化设计 SD
是一种面向数据流的设计方法,以SRS和SD阶段产生的数据流图和数据字典等文档为基础,是一个自顶向下、逐步求精、模块化的过程。
SD分为:
1)概要设计
主要任务是:确定软件系统的结构,对系统进行模块划分,确定模块的功能、接口和模块之间的调用关系。
概要设计使用系统结构图SC(模块结构图)来反映系统总体结构。
2)详细设计
主要任务是:为每个模块设计实现细节。
详细设计使用图有:业务流图、程序流程图、问题分析图PAD、NS流程图等。
模块
模块是实现功能的基本单位,具有功能、逻辑、状态3个属性。
模块遵循:高内聚、低耦合原则。
3. 结构化编程
通过顺序、分支、循环构造。强调自顶而下逐步,清晰第一、效率第二、书写规范。原则:程序=算法+数据结构,以算法为主。
面向对象的方法 OO
面向对象的分析方法可分为:面向对象分析、面向对象设计、面向对象编程。
面向对象分析方法 OOA