软件工程基础知识

一.软件危机 
(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 

IF x1 THEN 
REPEAT UNTIL x2 

END REPEAT 
ELSE 
BLOCK 


END BLOCK 
END IF 
STOP 
解答

伪码 
START 
S1 
if(x>5); 
else S2; 
i:=1; 
DO S3,i:=i+i; 
while i<3 
if(y<0) S4; 
else S5; 
END 
解答 
【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; 
解答

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

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

猜你喜欢

转载自blog.csdn.net/duliu1314/article/details/81355839