目录
软件工程
1.软件工程的基本概念
-
软件的定义
1.计算机软件是与计算机操作系统有关的程序,规程,规则及任何与之有关的文档和数据。
2.软件由两部分组成:一是机器可执行的程序及有关数据;二是机器不可执行的,与软件开发,运行,维护,使用和培训有关的文档
-
软件工程
1.软件工程是应用于计算机软件的定义,开发和维护的一整套方法,工具,文档,实践标准和工序。
2.软件工程三要素是:方法,工具和过程。
-
软件的特点
-
软件的特点主要包含以下几点:
-
软件是一种逻辑实体,具有抽象性;
-
软件的生产与硬件不同,他没有明显的制作过程;
-
软件在运行,使用期间不存在磨损,老化问题;
-
软件的开发,运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题
-
软件复杂性高,成本昂贵;
-
软件开发涉及诸多的社会因素
-
-
-
软件危机
-
软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。其中软件危机主要表现为:
-
软件开发进度难以预测
-
软件开发成本难以控制
-
软件需求的增长得不到满足
-
软件产品质量难以保证
-
软件产品难以维护
-
软件开发生产率的提高赶不上硬件的发展和应用需求的增长等。
-
-
-
软件生命周期
-
软件产品从考虑其概念开始,到该软件产品不能使用为止的整个时期都属于软件生命周期。所以软件生命周期是指软件产品从提出,实现,使用维护到停止使用退役的过程
-
软件生命周期分为3个阶段:
-
软件定义阶段,通常包括可行性研究初步项目计划和需求分析;
-
软件开发阶段,通常包括总体设计,详细设计,编码和测试;
-
软件维护阶段,任务是使软件在运行中持久地满足用户的需要。
-
-
2.结构化分析方法![39e7a134ac9449d995a84810511ebe63.jpeg](https://i-blog.csdnimg.cn/blog_migrate/0fcba613c6b2423a2c2b30c6ddce95a1.jpeg)
1.需求分析
-
需求分析是软件生命周期中的一个重要环节,目的是了解用户对软件在功能,性能和设计等方面的期望。对这些需求进行整理和分析,确定软件需要实现的功能,以及性能和设计等其他方面。
-
软件的需求分析阶段的工作,可以概括为四个方面:需求获取,需求分析,编写需求规格说明书和需求评审。
2.常用工具
-
常用工具包括数据流图(DFD图),数据字典(DD),判断数和判断表。
3.需求规格说明书
-
需求规格说明书是程序设计的基础和依据,主要的标准有:完整性,正确性,无歧义性,可验证性,一致性,可理解性,可修改性和可追踪性。
3.结构化设计方法
1.软件设计
-
软件设计是根据需求分析阶段确定的功能设计软件系统的整体结构,划分功能模块等,即确定系统的物理模型。
-
从工程角度看,软件设计主要分为概要设计和详细设计。
从技术角度看,软件设计主要分为结构设计,数据设计,接口设计和过程设计
2.软件设计的原理
-
软件设计的4个基本原理包括:抽象,模块化,信息隐藏和模块独立性。
3.概要设计
-
概要设计的基本任务:设计软件系统结构,数据结构及数据库设计,编写概要设计文档和概要设计文档评审。
-
概要设计的常见术语:
-
深度:表示控制的层数。
-
宽度:整体控制跨度(最大模块数的层)的表示。
-
扇入:直接调用一个给定模块的模块个数。
-
扇出:由一个模块直接调用的其他模块数。
-
-
4.详细设计
-
详细设计的基本任务:详细设计每个模块的实现算法和所需的局部数据结构。
-
详细设计的常用工具:程序流程图,盒图(N-S图),PAD图,HIPO图,判定表和PDL(伪码)。
4.软件测试与程序调试
-
软件测试是一种实际输出和预期输出之间的比较过程,目的就是为了尽可能多的发现软件中的问题
-
1.软件测试的方法
-
根据被测软件是否需要被执行分为静态测试和动态测试。按照功能划分,可以分为黑盒测试和白盒测试。
1.白盒测试
白盒测试是根据程序的内部逻辑来设计测试用例,主要方法包括逻辑覆盖测试和基本路径测试。
-
-
2.黑盒测试
黑盒测试是根据规格说明书的功能来设计测试用例,检查程序的功能是否符合要求。黑盒测试不需要考虑程序的内部逻辑结构,主要方法包括等价类划分法,边界值分析法和错误推测法等。
3.软件测试的实施
软件测试的实施过程主要包含4个步骤:单元测试,集成测试,确认测试和系统测试
程序调试是在测试发现错误之后排除错误的过程,主要任务是诊断错误和排除错误
程序调试的方法:主要分为静态调试和动态调试。
栈与队列
1.1栈的基本概念
-
栈:只允许在一段进行插入或删除操作的线性表。栈是一种线性表,但是限定这种线性表只能在一端进行插入和删除操作(操作受限)。
-
栈顶:线性表允许进行插入和删除的那一端
-
栈底:固定的,不允许进行插入和删除的另一段。
-
空栈:不包含任何元素的空表
1.2栈的基本操作![b15c60ba18f74fdab1c80bf949f6b929.jpeg](https://i-blog.csdnimg.cn/blog_migrate/3e60c823c25cbca0ccf8a099f4741f32.jpeg)
1.3栈的存储结构
-
栈的存储结构可以分为顺序存储和链式存储。顺序存储的栈称为顺序栈,链式存储的栈称为链栈。
(1)顺序栈
-
顺序栈:利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶位置
-
栈空条件:顺序栈的数组下标如果从0开始,栈空的条件是top=-1。
-
栈满条件:顺序栈的数组下标如果从0开始,栈满的条件是top = maxsize-1
-
顺序栈的计算方法:如果bottom>=1,栈内的元素个数为|top-bottom|+1,如果bottom=top=0时,则表示栈空。(top表示栈顶指针,bottom表示栈底指针)
-
上溢:若顺序栈满栈时,再进入入栈操作,就会产生上溢
-
下溢:若顺序栈栈空时,再进入出栈操作,就会产生下溢
-
-
(2)链栈
链栈:采用链式存储的栈称为链栈。链栈的优点是便于多个栈共享存储空间和提高其效率,并且链栈不存在栈满上溢的情况。
2.1队列的基本概念
队列:队列是一种特殊的线性表,只允许在表的一端进行插入,在表的另一端进行删除。
队头:队列中指定了用来删除数据的一端,用头指针(front)指向队头元素的前一个位置
队尾:队列中指定了用来插入数据的一端,用尾指针(rear)指向队尾元素。
空对列:对列中没有元素时,称为空队列
2.2对列的基本操作
对列的基本操作包括入队和出队,在进行入队和出队操作时,应注意队列是先进先出的线性表
(1)入队:在队尾插入一个新元素(rear更新新队尾位置)
(2)出队:在队头退出一个元素(front更新新队头位置前一个)
2.3队列的存储结构
队列的存储结构可以分为顺序结构和链式存储。队列的顺序存储结构一般采用循环队列的形式,队列的链式存储称为链式队列。
(1)循环队列
循环队列:将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,即把存储队列元素的表从逻辑上看成一个环,称为循环队列
循环队列的运算:元素个数=rear(尾指针) - front(头指针)
-
rear-front为正数时,便是循环队列的元素个数
-
rear-fornt为负数时,需要加上循环队列的容量
-
rear-front为零时,队列可能队满或者对空
(2)链式队列
链式队列:队列的链表存储称为链式队列,它实际上是一个同时带有队头指针和队尾指针的单链表。头指针指向队头结点,尾指针指向队尾结点,即单链表的最后一个结点
队空条件:front=NULL 且rear=NULL
注:单链表表示的链式队列特别适合数据元素变动比较大的情形,且不存在队列满和产生溢出的问题