【软件工程】软件工程知识点汇总(超详细)

软件工程期末知识点
客首页:才下眉头n.
已完结
如果觉得本篇文章还不错的话,欢迎大家点赞+收藏+评论

文章目录

  • 软件工程
    • 第一章 软件工程学概述
      • 1.软件危机
        • 1.概念
        • *2.软件危机的表现
        • 3.解决途径
      • 2.软件工程
        • 1.概念
        • *2.基本原理
      • 3.软件生命周期
    • 第二章 可行性分析
      • 1.可行性研究
        • 1.目的
        • 2.任务
        • *3.步骤
      • 2.数据流图
        • 1.基本构成符
        • 2.步骤
        • 3.例题
      • 2.数据词典
        • 1.基本内容
        • 2.用途
    • 第三章 需求分析
      • 1.需求分析的意义
      • 2.需求分析的基本任务
      • 3.需求分析图形工具
      • 4.系统分析的过程
    • 第五章 总体设计
      • 1.总体设计的过程
      • 2.设计原理
      • 3.描绘软件结构的图形工具
      • 4.面向数据流的设计方法
        • 1.变换流
        • 2.事务流
    • 第六章 详细设计
      • 1.结构程序设计
        • 1.概念
        • 2.目的
      • 2.人机界面设计
        • 1.人机界面应具有的特性
        • 2.设计问题
      • 3.过程设计的工具
        • 1.程序流程图
        • 2.盒图(N-S图)
        • 3.问题分析图(PAD图)
        • 4.判定表
        • 5.判定树
        • 6.过程设计语言(PDL)
      • 4.面向数据结构的设计方法
        • 1.Jackson图
        • 2.**Jackson方法**
      • 5.程序复杂度的定量度量
        • 1.**定量度量程序复杂度的作用**
        • 2.McCabe方法
        • 3.Halstead方法
    • 第七章 实现 (编码与测试)
      • 1.编码
        • 1.选择程序设计语言
        • 2.编码风格
      • 2.软件测试基础
        • 1.软件测试的目标
        • 2.软件测试准则
        • 3.测试方法
        • 4.测试步骤
        • 5.测试阶段的信息流
      • 3.单元测试
        • 1.模块接口测试
        • 2.局部数据结构测试
        • 3.重要的执行通路测试
        • 4.错误处理测试
        • 5.边界测试
        • 6.代码审查
        • 7.计算机测试
      • 4.集成测试
        • 1.渐增式测试方式
      • 5.确认测试
        • 1.确认测试的范围
        • 2.软件配置复查
        • 3.Alpha和Beta测试
      • 6.白盒测试技术
        • 1.逻辑覆盖
      • 7.黑盒测试技术
        • 1.等价划分(等价类划分)
        • 2.边界值分析
      • 8.调试
        • 1.调试过程
        • 2.调试途径
      • 9.软件可靠性
        • 1.基本概念
    • 第八章 维护
      • 1.软件维护的定义
        • 1.改正性维护
        • 2.适应性维护
        • 3.完善性维护
        • 4.预防性维护
      • 2.软件维护的特点
        • 1.结构化维护与非结构化维护差别悬殊
        • 2.维护的代价高昂
        • 3. 维护的问题很多
      • 3.软件维护过程
        • 1.维护组织
        • 2. 维护 告
        • 3. 维护的事件流
        • 4. 保存维护记录
        • 5. 评价维护活动
      • 4.软件的可维护性
        • 1.决定软件可维护性的因素
        • 2.文档
      • 5.预防性维护

软件工程

第一章 软件工程学概述

1.软件危机

1.概念

  • 计算机软件的开发和维护过程中所遇到的一系列严重的问题。
  • 采用工程的概念、原理、技术和方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好技术方法结合起来,以经济地开发出高质量的软件并有效的维护它。

*2.软件危机的表现

1)对软件开发成本和进度的估计常常很不准确;

2)用户对完成的软件系统不满意的现象经常发生;

3)软件产品的质量往往靠不住;

4)软件常常是不可维护的;

5)软件通常没有适当的文档资料;

6)软件成本在计算机系统总成本中所占的比例逐年上升;

7)软件开发生产率提高的速度跟不上计算机应用的发展趋势。

3.解决途径

1)使用在实践中总结出来的开发软件的成功技术和方法

2)开发和使用更好的软件工具;

3)良好的组织管理措施。

2.软件工程

1.概念

指导计算机软件开发和维护的一门工程学科。是一门交叉学科

*2.基本原理

  • 用分阶段的生命周期计划严格管理

  • 坚持进行阶段评审

  • 实行严格的产品控制

  • 采用现代程序设计技术

  • 结果应能清楚地审查

  • 开发小组的人员应该少而精

  • 承认不断改进软件工程实践的必要性

3.软件生命周期

软件定义、软件开发、运行维护

  • *:表示数据流之间的“与关系”,实际使用时*常可省略

  • +:表示数据流之间的“或关系”

  • ○+:表示数据流之间的“异或关系”

    2.步骤

    自顶向下,逐层细化

    1)先找外部实体(可以是人、物或其他软件系统),找到了外部实体,则系统与外部世界的界面就得以确定,系统的源点和终点也就确定了;

    2)找出外部实体的输入和输出数据流;

    3)在图的边上画出系统的外部实体;

    3.例题

    2.数据词典

    对数据流图中包含的所有元素的定义的集合;

    1.基本内容

    • 数据元素编 、名称及其含义;
    • 数据类型和长度;
    • 合理取值;
    • 其他内容,如它与其它数据的逻辑关系等。

    2.用途

    1)作为分析阶段的重要工具;

    2)数据元素的控制信息非常有用;

    3)有助于开发数据库。

    第三章 需求分析

    1.需求分析是软件定义的最后一个阶段,它的基本任务是准确的回答“系统必须做什么”这个问题。

    2.需求分析的结果是可行性研究 告

    1.需求分析的意义

    软件需求分析是软件开发获得成功的前提条件,必须了解用户需求,才能开发出符合用户要求的软件。

    2.需求分析的基本任务

    确定对系统的综合需求

    分析系统的数据要求

    导出系统的逻辑模型

    修正系统开发计划

    3.需求分析图形工具

    1)实体-联系图(ER 图)

    数据模型中包含3种相互关联的信息 —- 数据对象(实体)、数据对象的属性,及数据对象彼此间相互连接的关系

    a. 一对一联系(1∶1) 如:一个部门有一个经理,每个经理只在一个部门任职

    b. 一对多联系(1∶N) 如:某校教师与课程之间存在一对多的联系“教”

    c. 多对多联系(M∶N) 如:学生与课程间的联系(“学”)是多对多的

    3)层次方框图

    2.设计原理

    模块化、抽象、逐步求精、信息隐藏和局部化、模块独立

    3.描绘软件结构的图形工具

    层次图、HIPO图、结构图

    1)层次图

    层次图作用:描述软件的层次结构

    层次图:一个方框代表一个模块,方框间的连线表示调用关系。(不是组成关系)

    2)HIPO图

    HIPO 图: HIPO 图=层次图+ IPO 图

    在HIPO图里,除了最顶层的方框之外,每个方框都加了编 ,方便追踪该模块在软件结构中的作用。

    3)结构图

    结构图是进行软件结构设计的另一个有力工具。

    2.事务流

    当数据流图的数据流是“以事务为中心的”,数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。

    2.程序流程图基本结构

    顺序型:几个连续的处理步骤依次排列构成

    先判定(while)型循环:在循环控制条件成立时,重复执行特定的处理

    多情况(case)型选择:列举多种处理情况,根据控制变量的取值,选择执行其一

    2.盒图(N-S图)

    1.盒图的特点
    1)功能域明确,可以从盒图上一眼就看出来;
    2)不可能任意转移控制;
    3)很容易确定局部和全程数据的作用域; 4)很容易表现嵌套关系,也可以表示模块的层次结构。

    2.盒图基本符

    2.优点

    1)使用表示结构化控制结构的PAD符 所设计出来的程序必然是结构化程序;
    2)PAD图所描绘的程序结构十分清晰。

    • 图中最左面的竖线是程序的主线,即第一层结构。
    • 随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线
    • PAD图中竖线的总条数就是程序的层次数

    4.判定表

    1.能够清晰地表示复杂的条件组合与应做的动作之间的对应关系。

    2.如果数据流处理时需要依赖多个逻辑条件的取值,用判定表来描述比较合适

    1.组成

    • 左上部列出所有条件
    • 左下部是所有可能做的动作
    • 右上部表示各种条件组合
    • 右下部是和每种条件组合相对应的动作

    5.判定树

    判定树是判定表的变种,能清晰表示复杂的条件组合与操作之间的关系,形式简单,不需要做任何说明,是常见的系统分析工具。

    6.过程设计语言(PDL)

    也称伪码( pseudo code ) ,是一种介于自然语言和程序设计语言之间的语言
    用于描述功能模块的算法设计和处理细节的语言。

    1.特点

    易编写,易理解,容易转换成源程序。

    2.PDL的优点

    不如图形工具形象直观。

    4.面向数据结构的设计方法

    • 数据结构既影响程序的结构又影响程序的处理过程

    • 面向数据结构的设计方法根据数据结构设计程序处理过程

      程序中实际使用的数据结构种类很多,但数据元素彼此间的逻辑关系却只有顺序 选择和重复3类,因此,数据结构也只有这三类数据结构。数据元素彼此间的逻辑关系:

      • 重复出现的数据通常由具有循环控制结构的程序来处理
      • 选择数据要用带有分支控制结构的程序来处理
      • 层次的数据组织通常和使用这些数据的程序的层次结构十分相似。
    • 面向数据结构的设计方法的最终目标是得出对程序处理过程的描述。

    1.Jackson图

    使用面向数据结构的设计方法,首先需要分析确定数据结构,并用适当的工具清晰地描绘数据结构

    数据元素彼此间的逻辑关系却只有顺序 选择和重复3类

    • 顺序结构:顺序结构的数据由一个或多个数据元素组成,每个元素按确定次序出现一次。
    • 选择结构:选择结构的数据包含两个或多个数据元素,每次使用这个数据时按一定条件从这些数据元素中选择一个。
    • 重复结构:重复结构的数据,根据使用时的条件由一个数据元素出现零次或多次构成。

    • 多次验证都表明,程序的预测长度H和实际程序长度N非常接近。
      • 编码和测试统称为实现。

      • 编码:把软件设计结果翻译成程序代码。

      • 测试和调试:检测程序并改正错误的过程。

      • 程序的质量主要取决于软件设计的质量。

      • 所选用的程序设计语言的特点及编码风格也将对程序的可靠性、可读性、可测试性和可维护
        性产生深远的影响。

      • 测试的目的就是在软件投入生产性运行之前,尽可能多地发现软件中的错误。

      • 目前软件测试仍然是保证软件质量的关键步骤,它是对软件规格说明、设计和编码的最后复审。

      • 软件测试

      • 单元测试:通常在编写出每个模块之后就对它做必要的测试

      • 综合测试:在单元测试结束之后,对软件系统进行的各种综合测试 通过测试发现错误之后还必须诊断并改正错误,这就是调试的目的。调试是测试阶段最困难的工作。

      1.编码

      编码就是把软件设计结果翻译成用某种程序设计语言书写的程序。

      1.选择程序设计语言

      程序设计语言是人和计算机通信的最基本的工具, 它的特点必然会影响人和计算机通信的方式和质量,也会影响其他人阅读和理解程序的难易程度。因此,编码之前的一项重要工作就是选择一种适当的程序设计语言

      1.主要实用标准
      (1) 系统用户的要求。
      (2) 可以使用的编译程序。
      (3) 可以得到的软件工具。
      (4) 工程规模。
      (5) 程序员的知识。
      (6) 软件可移植性要求。
      (7) 软件的应用领域

      2.编码风格

      程序实际上也是一种供人阅读的文章,有一个文章的风格问题。应该使程序具有良好的风格,应遵守以下规则:
      – 源程序文档化
      – 数据说明
      – 语句构造
      – 输入/输出方法
      – 效率

      1.源程序文档化—-符 名的命名

      • 符 名即标识符,包括模块名、变量名、常量名、标 名、子程序名、数据区名以及缓冲区名等。

      • 这些名字应能反映它所代表的实际东西,应有一定实际意义。例如,表示次数的量用Times,表示总量的用Total,表示平均值的用Average,表示和的量用Sum等。

      • 名字不是越长越好,应当选择精炼的意义明确的名字。必要时可使用缩写名字,但这时要注意缩写规则要一致,并且要给每一个名字加注释。同时,在一个程序中,一个变量只应用于一种用途。

      1.源程序文档化—-程序的注释

      • 夹在程序中的注释是程序员与日后的程序读者之间通信的重要手段。

      • 注释绝不是可有可无的。

      • 一些正规的程序文本中,注释行的数量占到整个源程序的1/3到1/2,甚至更多。

      • 注释分为序言性注释和功能性注释。

      • 序言性注释:通常置于每个程序模块的开头部分,它应当给出程序的整体说明,对于理解程序本身具有引导作用。

      • 序言性注释包括:
        – 程序标题:有关本模块功能和目的的说明; – 主要算法: – 接口说明:包括调用形式,参数描述,子程序清单;
        – 有关数据描述:重要的变量及其用途,以及其它有关信息;
        – 模块位置:在哪一个源文件中,或隶属于哪一个软件包;
        – 开发简历:模块设计者,复审者,复审日期,修改日期及有关说明等。

      1.源程序文档化—-程序的视觉组织

      • 恰当地利用空格,可以突出运算的优先性,避免发生运算的错误。例如 ,将表达式(A<-17)ANDNOT(B<=49)ORC写成 (A<-17) AND NOT (B<=49) ORC
      • 自然的程序段之间可用空行隔开;
      • 移行也叫做向右缩格。它是指程序中的各行不必都在左端对齐,都从第一格起排列。这样做使程序完全分不清层次关系。
      • 对于选择语句和循环语句,把其中的程序段语句向右做阶梯式移行。使程序的逻辑结构更加清晰

      2.数据说明

      • 在设计阶段已经确定了数据结构的组织及其复杂性。在编写程序时,则需要注意数据说明的风格。

      • 为了使程序中数据说明更易于理解和维护,必须注意以下几点:

        • 数据说明的次序应该标准化。有次序易查阅,能加速测试、调试和维护的过程。
        • 当多个变量名在一个语句中说明时,应该按字母顺序排列这些变量。
        • 如果设计时使用了一个复杂的数据结构,则应该用注解说明用程序设计语言实现这个数据结
          构的方法和特点

      3.语句构造
      构造语句时应该遵循的原则是,每个语句都应该简单而直接,不能为了提高效率而使程序变得过分复杂;
      也不要刻意追求技巧性,使程序编写得过于紧凑。

      4.输入输出
      在设计和编写程序时应该考虑下述有关输入输出风格的规则:

      • 对所有的输入数据都要进行检验,识别错误的输入,以保证每个数据的有效性;

      • 检查输入项的各种重要组合的合法性,必要时 告输入状态信息;

      • 使得输入的步骤和操作尽可能简单,并保持简单的输入格式;

      • 输入数据时,应允许使用自由格式输入;

      • 应允许缺省值;

      5.程序效率

      程序的效率是指程序的执行速度及程 序所需占用的内存的存储空间。程序编码是最后提高运行速度和节省存储的机会,因此在此阶段不能不考虑程序的效率。

      (1)程序运行时间

      • 源程序的效率直接由详细设计阶段确定的算法的效率决定,但是,写程序的风格也能对程序的执行速度和存储
        器要求产生影响。

      • 在把详细设计结果翻译成程序时,总可以应用下述规则:

        • 写程序之前先简化算术的和逻辑的表达式;

        • 仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;

        • 尽量避免使用多维数组;

        • 尽量避免使用指针和复杂的表;

        • 使用执行时间短的算术运算;

        • 不要混合使用不同的数据类型;

        • 尽量使用整数运算和布尔表达式。

          在效率是决定性因素的应用领域,尽量使用有良好优化特性的编译程序,以自动生成高效目标代码。

      (2)存储器效率

      • 在大中型计算机系统中,存储限制不再是主要问题。在这种环境下,对内存采取基于操作系统的分页功能的虚拟存储管理。存储效率与操作系统的分页功能直接有关。
      • 采用结构化程序设计,将程序功能合理分块,使每个模块或一组密切相关模块的程序体积大小与每页的容量相匹配,可减少页面调度,减少内外存交换,提高存储效率。
      • 在微型计算机系统中,存储器的容量对软件设计和编码的制约很大。因此要选择可生成较短目标代码且存储压缩性能优良的编译程序,有时需采用汇编程序。
      • 提高存储器效率的关键是程序的简单性。

      (3) 输入输出的效率

      • 输入/输出可分为两种类型:

        • 面向人(操作员)的输入/输出

        • 面向设备的输入/输出

      • 如果操作员能够十分方便、简单地录入输入数据,或者能够十分直观、一目了然地了解输出信息,则可以说面向人的输入/输出是高效的。

      (4)设备输入/输出效率

      • 关于提高设备输入/输出效率的指导原则:
        • 输入/输出的请求应当最小化;
        • 对于所有的输入/输出操作,安排适当的缓冲区,以减少频繁的信息交换。
        • 对辅助存储(例如磁盘),选择尽可能简单的,可接受的存取方法;
        • 对辅助存储的输入/输出,应当成块传送; – 对终端或打印机的输入/输出,应考虑设备特性,尽可能改善输入/输出的质量和速度;
        • 任何不易理解的,对改善输入/输出效果关系不大的措施都是不可取的;
        • 任何不易理解的所谓“超高效”的输入/输出是毫无价值的;

      2.软件测试基础

      什么是软件测试br> 是为了发现错误而执行程序的过程。
      发现错误是为了更正错误,最终得到一个高质量的软件系统。
      软件测试的对象:整个软件定义、开发周期的产品
      暴露问题并不是软件测试的最终目的,发现问题是为了解决问
      题,测试阶段的根本目标是尽可能多地发现并排除软件中潜藏
      的错误,最终把一个高质量的软件系统交给用户使用。
      测试工作量约占开发总工作量的40%以上

      1.软件测试的目标

      G.Myers给出了关于测试的一些规则,这些规则也可以看作是测试的
      目标或定义。
      (1) 测试是为了发现程序中的错误而执行程序的过程;
      (2) 好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
      (3) 成功的测试是发现了至今为止尚未发现的错误的测试。

      2.软件测试准则

      1 )所有测试都能追溯到用户需求
      2 )应该远在测试开始之前就制定出测试计划
      3 )应该把 Pareto原理应用到软件测试中
      群集现象: 80 %的错误可能是由 20 %的模块造成的
      4 )从“小规模”测试开始,逐步过渡到“大规模”测试
      5 )穷举测试是不可能的
      测试只能证明程序有错,不能证明程序没有错误
      6 )应由独立的第三方从事测试工作(专业的测试技术及方法)

      3.测试方法

      • 黑盒测试

        又称功能测试、数据驱动测试或基于规格说明的测试。它是一种从用户观点出发的测试。用这种方法进行测试时,把被测程序当作一个黑盒,不考虑程序内部结构和特性,测试者只考虑程序输入输出和程序功能,根据需求规格说明书来设计测试用例,推断测试结果的正确性。

        已知产品应该具有的功能,可以通过测试来检验每个功能是否符合设计要求。(不考虑内部结构和处理过程)

      • 白盒测试:

        又称结构测试、逻辑驱动测试或基于程序的测试。它依赖于对程序内部细节的严密检验,针对特定条件设计测试用例,对软件的逻辑路径进行测试。因此采用白盒测试技术时,必须有设计规约及程序清单。

        已知产品的内部工作过程,可以通过白盒测试来检验每种内部操作是否按要求的规定正常进行。(测试者需知道程序的逻辑和处理算法,检验程序中的执行通路)


        3.单元测试

        单元测试的一般方法:
        1.首先通过编译系统检查并改正程序

        声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月21日
下一篇 2022年4月21日

相关推荐