软件系统开发和运行基础知识
1 软件工程基础知识
软件工程的知识领域和理论基础
生存周期 | 需求、设计、构建、测试、维护 |
专门领域 | 配置管理、工程管理、工程过程、工程模型和方法、质量 |
理论基础 | 计算基础、数学基础、工程基础 |
软件工程是把系统的、有序的、可量化的方法应用到软件的开发、运营和维护上的过程。
1.1 软件的生存周期
1.2 软件生存周期模型
①瀑布模型
线性顺序(如同瀑布,逐级下落)
使用条件(假设)
系统的需求是完整的、简明的、一致的,可以先于设计和实现完成之前产生
优点
- 容易理解
- 管理成本低
- 强调开发的阶段性早期计划及需求调查和产品测试
缺点
- 在开始的两个或三个阶段中很难评估真正的进度状态
- 当接近项目结束时,出现了大量集成和测试的工作
- 结束前没有演示系统的能力
- 需求或设计中的错误只有到项目后期才能被发现,风险控制能力较弱,导致项目延期、超出预算
②增量模型
融合了瀑布模型的基本成分和原型实现的迭代特征
使用条件(假设)
需求分段为一个系列增量的产品,每一增量可以分别地开发。
优点
- 具有瀑布模型的全部优点+
- 第一个可交付版本所需的成本和时间很少
- 开发增量表示的小系统所承担的风险不大
- 由于很快发布了下一个版本,可减少用户需求的变更
- 可增量投资,在项目开始时仅对1-2个增量投资
缺点
- 如果没有对用户的变更要求进行规划,那么产生的初始增量可能会造成后来增量的不稳定
- 如果需求不像早期思考那样稳定和完整,那么一些增量就可能需要重新开发、发布
- 管理发生的成本、进度和配置的复杂性可能会超出组织的能力
③演化模型
主要针对事先不能完整定义需求的软件开发,是在快速开发一个原型的基础上,根据用户使用的过程中提出的意见和建议对原型进行改进,获得原型的新版本,重复这一过程,最终可得到令用户满意的软件产品
优点
- 任何功能一经开发就可以进入测试,验证是否符合需求,帮助引导出高质量的产品要求;
缺点
- 如果不加控制地让用户接触开发中尚未稳定的功能,可能对开发人员及用户产生负面影响
④螺旋模型
螺旋模型强调风险分析,使得开发人员和用户对每个演化层出现的风险有所了解。适用于大型软件,弥补了瀑布模型和增量演化模型的不足。
每个螺旋周期分为
- 制定计划
- 风险分析
- 实施工程
- 用户评估
使用条件
需要开发人员具有相当丰富的风险评估经验和专门知识
优点
- 相对瀑布模型,支持用户需求的动态变化,为用户参与决策提供了条件,降低了开发风险
缺点
- 过多的迭代次数会增加开发成本,延迟提交时间
⑤喷泉模型
是一种以用户需求为动力、以对象作为驱动的模型,适用于面向对象的开发方法。
使用条件
需要大量的开发人员
优点
- 喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程
缺点
-
由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。此外这种模型要求严格管理文档,使得审核的难度加大,尤其是面对可能随时加入各种信息、需求与资料的情况
1.3 典型的软件开发方法
①结构化开发方法
②原型化开发方法
③面向对象开发方法
④敏捷方法
1.4 软件项目管理
软件开发管理中常犯的一个错误就是在V型模型或是瀑布模型开发的起始阶段,采用了不完善的管理制度,那最终就会引起问题的累积而使局势无法得到控制。这就是使软件开发走向失败的另一种情形。
软件管理的对象是软件项目。需对软件开发的以下内容做到心中有数
- 工作范围
- 风险分析
- 所需资源(人、硬/软件)
- 要实现的任务
- 经历的里程碑
- 花费的工作量
- 进度安排
①成本估算
方法
自顶向下
自底向上
差别估算
其他估算方法(专家、类推、算式)
模型
Putnam模型和COCOMO模型
②风险分析
识别
预测
评估
控制
③进度管理
进度的合理安排是如期完成软件项目的重要保证、合理分配资源的重要依据,是管理工作的一个重要组成部分。
有两种方式:
最终交付时间确定,必须在规定期限内完成
最终交付时间只确定了大致的年限,最后交付日期由软件开发部门确定
gantt图(甘特图)
PERT图
PERT图与关键路径
- PERT图:一种有向图,图中的箭头表示任务,它可以标上完成该任务所需的时间;图中的节点表示流入节点的任务的结束,并开始流出结点的任务。
- 活动(任务):
- 节点(事件、里程碑):它本身不消耗时间和资源,仅表示某个时间点。
- 前驱、后继:如果从节点1到节点2之间有路径,则称1为2的前驱,2为1的后继。
- 最早开始时间:活动或节点最早开始的时间。
- 最晚开始时间:活动或节点最晚必须在这个时间开始,否则就会影响整个工期。
- 最早结束时间:活动或节点最早结束的时间。
- 最晚结束时间:在不影响整个工期的前提下,活动或节点最晚结束的时间。
- 松弛时间(浮动时间):在不影响整个工期的前提下,完成该活动有多少机动余地。 • 总工期:完成整个项目所需要的时间。
- 关键活动:最早开始时间等于最晚开始时间的活动。
- 关键路径:由关键活动串联起来的路径。关键路径可能有多条。
求关键路径的方法
1、找出从开始节点到结束节点之间的所有路径,计算出每条路径所经历的时间总和,总和最长的就 是关键路径,关键路径上的时间总和就是总工期。
2、依次找出每个节点的最早开始时间和最晚开始时间,最早开始时间和最晚开始时间相同的节点串 联起来的路径就是关键路径。
求松弛时间的方法
- 节点的最早开始时间:从起点到该节点所经历的最长时间。
- 节点的最晚开始时间:项目总工期减去项目终点到该节点的最长时间。
- 活动的最早开始时间:活动的最早开始时间就是该活动的起始节点的最早开始时间。
- 活动的最晚开始时间:活动的流入节点的最晚开始时间减去该活动的持续时间。
- 活动/节点的松弛时间 = 活动/节点的最晚开始时间-活动/节点的最早开始
④人员管理
主程序员组
无程序员组
层次式程序员组
2 系统分析基础知识
①系统分析的任务
②系统分析的主要阶段
2.1 系统分析概述
①系统分析的任务
②系统分析的主要阶段
2.2 需求分析
①需求分析的任务
②需求的分类
功能需求
所开发的软件必须具备什么样的功能
非功能需求
指产品必须具备的属性或品质,如可靠性、性能、响应时间、容错性和扩展性等
设计约束
限制条件、补充规约
2.3 结构化分析方法
结构化分析SA方法是一种面向数据流的需求分析方法,适用于分析大型数据处理系统。
基本思想是自顶向下逐层分解
由以下几部分组成:
1、数据流图
①数据流图DFD
是一种便于用户理解、分析系统数据流程的图形工具,它摆脱了系统的物理内容,精确地在逻辑上描述系统的功能、输入、输出和数据存储等。
①DFD的基本成分
数据流
加购
数据存储
外部实体
②分层数据流图的画法
画输入和输出
画系统的内部
画加工的内部
重复画内部的分解
③对图和加工进行编号
④实例
⑤应注意的问题
2、数据字典
数据流图描述了系统的分解,但没有对图中各成分进行说明。数据字典DD就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。其中对加工的描述成为“小说明”
①数据字典的内容
数据流、数据项、数据存储和基本加工
数据词典管理
②加工逻辑的描述
结构化语言
判定表
判定树
2.4 面向对象分析法
1、基本概念
对象
消息
类
继承
封装
多态
动态绑定
绑定是一个把过程调用和响应调用所需要执行的代码加以结合的过程。在一般的程序设计语言中,绑定是在编译时进行的,叫静态绑定;动态绑定则是在运行时进行的,因此,一个给定的过程调用代码的结合到调用发生时才进行。
2、UML统一建模语言
UML2.0有13种图
类图、对象图、用例图、序列图、通信图、状态图、活动图、构件图、部署图、组合结构图、包图、交互概览图和计时图。
3 系统设计基础知识
3.1 系统设计的内容和步骤
1、概要设计的基本任务
①设计软件系统总体结构
②数据结构及数据库设计
③编写概要设计文档
④评审
2、详细设计的基本任务
详细设计阶段的任务不是具体地编写程序,而是设计出程序的“蓝图”,以后根据这个蓝图写出实际的程序代码。
3.2 系统设计的基本原理
抽象
模块化
信息隐蔽
模块独立☆
①耦合
耦合性是指模块之间联系的紧密程度,耦合性越高,模块独立性越差。
无直接耦合
数据耦合
标记耦合
控制耦合
公共耦合
内容耦合
②内聚
内聚是指模块内部各元素之间的紧密程度,内聚度越低,模块独立性越差。
偶然内聚
逻辑内聚
时间内聚
通信内聚
顺序内聚
功能内聚
3.3 结构化设计方法
1、信息流的类型
2、变换分析
3、事物分析
4、SD方法的设计步骤
3.4 面向对象设计方法
OOD是OOA方法的延续
1、软件设计类
实体类
边界类
控制类
2、面向对象设计过程
4 系统测试基础测试
4.1 系统测试的概念
1、系统测试的意义、目的及原则
2、测试过程
4.2 软件测试策略
1、单元测试
2、集成测试
3、确认测试
4、系统测试
4.3 软件测试方法
1、黑盒测试法
2、白盒测试法
5 系统运行和维护基础知识
5.1 系统维护概述
1、系统可维护性概念
2、系统维护的内容及类型
5.2 系统评价
立项评价
中期评价
结束评价