软件工程知识体系

本博客记录的是我在大学期间学习软件工程这门课程的大概知识体系,肯定还有其他内容没有涉及到,纯当是对学习过的内容进行一番梳理。

一.软件危机
(1)概念:软件危机是指在计算机软件开发、使用与维护过程中遇到的一系列严重问题和难题。
(2)产生软件危机的原因主要有:
①软件的规模越来越大,结构越来越复杂
②软件开发管理困难而复杂
③软件开发费用不断增加
④软件开发技术落后
⑤生产方式落后
⑥开发工具落后,生产率提高缓慢
(3)软件危机的表现有:
①经费预算经常突破,完成时间一再拖延
②开发的软件不能满足用户需求
③开发的软件可靠性差
④开发的软件可维护性差
二.软件工程
(1)概念
软件工程是指用工程、科学和数学的原则与方法开发、维护计算机软件的有关技术和管理方法。
(2)软件工程的三要素
方法、过程、工具
三.常见的软件开发模型
(1)原型模型
a.适用场合
原型模型适合于那些不能预先确切定义需求的软件系统的开发,更适合于那些项目组成员(包括分析员、设计员、程序员和用户)不能很好交流或通信有困难的情况。
b.特点
及早提供工作软件
(2)瀑布模型
a.定义
将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型,又称为生存周期模型。
b.适用场合
瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。
c.特点
文档驱动、线性
d.缺点
1)在软件开发的初期阶段就要求做出正确、全面、完整的需求分析,这对许多应用软件来说是极其困难的
2)在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整
3)不支持产品的演化,缺乏灵活性,使软件产品难以维护
(3)螺旋模型
a.定义
是一种将瀑布模型和快速原型模型结合起来的软件开发模型
b.适用场合
螺旋模型支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型
c.特点
支持用户需求的动态变化、风险分析
(4)增量模型
a.定义
分成多个子系统进行开发,最后集成起来
(5)喷泉模型
a.定义
喷泉模型是一种以面向对象的软件开发方法为基础,以用户的需求为动力,以对象来驱动的模型
四.结构化分析方法(SA)
(1)概念
结构化分析方法是面向数据流进行需求分析的方法。结构化分析方法使用数据流图DFD与数据字典DD来描述,面向数据流问题的需求分析适合于数据处理类型软件的需求描述。其核心思想是自顶向下、逐层分解。
(2)常见的工具
2.1 数据字典【DD】
a.包括的条目
数据流+数据存储+加工说明+数据项(一般不包含源点与终点)
b.定义
数据字典是系统描述工具中的数据的工具,是对数据定义信息的集合,其所定义的对象都包含于数据流图。
2.2 数据流图【DFD】
a.定义
数据流图是SA方法中用于表示系统逻辑模型的一种工具,以图形的方式描绘数据在系统中流动和处理的过程,反映系统必须完成的逻辑功能,是一种功能模型。
b.四种符号元素

符号 含义
方框 源点与终点
箭头 数据流
圆/椭圆 加工
双杠 数据存储

(3)数据字典+数据流图=系统的逻辑模型
五.结构化设计方法(SD)
(1)定义
结构化设计要解决的任务,就是在需求分析的基础上,将DFD图映射为软件系统的结构。换句话说,这类设计方法允许把用DFD图表示的系统逻辑模型方便地转换成对于软件结构的初始设计描述。
从结构化分析到结构化设计工具的转变:

结构化分析结果 结构化设计结果
数据流图的信息 程序结构的设计描述

(2)一般分为两个阶段
总体设计(概要设计)+详细设计
(3)基本要点
(1)采用自顶向下,逐步求精的程序设计方法。
(2)使用三种基本控制结构构造程序,分别是顺序,选择和循环
(3)采用主程序员制的组织形式。
(4)采用单入口单出口的模块形式。
六.软件生存周期
①软件定义过程:可行性研究+需求分析
②软件开发过程:设计(概要设计、详细设计)+实施(编码+单元测试)+测试(集成测试+确认测试)
③软件使用与维护过程:使用与维护+退役
七.概要设计 VS 详细设计

概要设计 详细设计
又称结构设计(总体设计) 又称过程设计(模块设计)
软件需求——>软件表示 模块功能——>精确的、结构化的过程描述
数据库的”逻辑设计” 数据库的”物理设计”
任务是确定每个模块的功能和接口,数据结构和数据库设计,编写概要设计文档,以及评审 任务是确定每个模块的内部特性(具体执行过程),即模块的算法和数据库的物理设计
采用的工具:图形(程序流程图、盒图,即N-S图、PAD图)、表格(判定表)、语言(过程设计语言,即PDL)

八.软件测试
(1)概念
软件测试指为了发现软件中的错误而执行软件的过程。它的目标是尽可能多地发现软件中存在的错误,将测试结果作为纠错的依据。
(2)目的
① 软件测试是为了发现错误而执行程序的过程。
② 一个好的测试用例能够发现至今尚未发现的错误。
③ 一个成功的测试是发现了至今尚未发现的错误。
(注:软件调试的目的则是改正错误。)
(3)阶段
【注:由于系统测试实际上超出了软件工程的范畴,故这里没有详细说明。】

阶段顺序 单元测试 集成测试 确认测试 系统测试
测试方法 白盒测试 渐增式测试(包括:自顶向下结合法,自底向上结合法)+非渐增式测试 黑盒测试
发现错误的阶段 编码阶段 设计阶段 需求分析阶段
涉及的文档 编码和详细设计文档 详细设计文档和概要设计文档 需求规格说明书和用户手册

(4)方法
a.黑盒测试——把测试对象看成一个黑盒子,只在软件的接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求,又称为功能测试或数据驱动测试。
测试手段:等价类划分、边界值分析、错误推测法、因果图
b.白盒测试——把测试对象看成一个透明的盒子,对程序中的逻辑路径进行测试,检查内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
测试手段:逻辑覆盖(语句覆盖,判定覆盖,条件覆盖,判定条件覆盖,条件组合覆盖,路径覆盖)、基本路径测试、循环覆盖
九.模块独立性
模块独立性是软件设计的基本原则之一,其他的几个分别是:模块化,抽象,信息隐藏。模块独立指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。衡量模块独立性有两个标准——耦合性和内聚性,模块划分时应做到高内聚,低耦合,从而提高模块的独立性。
①内聚
模块之间联系越紧密,其内聚性越强。
②耦合
模块的耦合性由低到高依次是:
非直接耦合(不传递任何信息),数据耦合(传递数据值),标记耦合(传递数据结构),控制耦合(传递控制变量),外部耦合,公共耦合,内容耦合。
一般来说,在传递信息类型上尽量使用数据耦合,避免控制耦合,慎用或有控制地使用公共耦合。
十.其他知识点
【N-S图】
START
a
IF x1 THEN
REPEAT UNTIL x2
b
END REPEAT
ELSE
BLOCK
C
D
END BLOCK
END IF
STOP
软件工程知识体系_第1张图片

伪码
START
S1
if(x>5);
else S2;
i:=1;
DO S3,i:=i+i;
while i<3
if(y<0) S4;
else S5;
END
软件工程知识体系_第2张图片
【PAD图】
画出下面用PDL写出的程序的PAD图。
WHILE P DO
IF A >O THEN A1 ELSE A2 ENDIF;
S1;
IF B>0 THEN B1;
WHILE C DO S2;S3 ENDWHILE;
ELSE B2
ENDIF;
B3
ENDWHILE;
软件工程知识体系_第3张图片

【数据流图】
用SA方法画出下列问题的顶层和0层数据流图。
某运动会管理系统接受来自运动员的报名单、裁判的比赛项目及项目成绩,产生运动员号码单发送给运动员,项目参加者发送给裁判,单项名次、团体名次发送给发布台。该系统有两部分功能:
(1)登记报名单:接受报名单、比赛项目,产生运动员号码单、项目参加者,形成运动员名单及团体成绩表两种数据存储。
(2)统计成绩:接受项目成绩,查询运动员名单,产生单项名次,填写团体成绩,最后产生团体名次。
软件工程知识体系_第4张图片

【面向对象方法较之结构化方法的优越性】
(1)面向对象方法更符合人的思维方式,更容易抓住问题的主干;
(2)所开发出的软件更符合“高内聚,低耦合”的软件设计原则,因此其模块的独立性更强;
(3)更适合于开发大型的软件,更适合于快速原型法开发方法,使软件生产率大大提高;
(4)使用面向对象技术开发出的软件,其可测试性和可维护性都较强;
(5)面向对象方法和技术能够贯彻软件开发的全过程,从分析、设计、编码到测试维护,采用面向对象的方法不存在语义断层,使人的思维保持连贯,减少各阶段之间的不相融性;
(6)使得软件的可重用性大幅度提高。

你可能感兴趣的:(软件工程知识体系)