看这玩意复习你还会挂科?《软件工程2篇》

第一章:

软件工程定义

1968年10月,Fritz Bauer 首次提出了“软件工程”的概念,并将“软件工程”定义为:为了经济地获得能够在实际机器上有效运行的可靠软件,而建立并使用的一系列工程化原则。

1993年IEEE对软件工程的定义:软件工程是将系统化的、规范化的、可度量的途径应用于软件的开发、运行和维护的过程,即将工程化应用于软件的方法的研究。

软件工程原则:

抽象与自顶向下,逐层细化  信息隐蔽和数据封装 模块化 局部化 确定性 一致性和标准化 完备性和可验证性

瀑布模型:

开发活动的特征:(1)以上一项活动方产生的工作对象为输入(2)利用这一输入,实施本项活动应完成的内容(3)给出该项活动的工作结果,作为输出传给下一项活动(4)对实施该项活动的工作结果进行评审,若其工作得到确认,则继续进行下一项活动,否则返回前项,甚至更前项的活动进行返工

瀑布模型的优点:

(1)可强迫开发人员采用规范化的方法

(2)严格地规定了每个阶段必须提交的文档

瀑布模型的缺点

(1)由于瀑布模型几乎完全依赖于书面的规格说明,很可能导致最终开发出的软件产品不能真正满足用户的需要。如果需求规格说明与用户需求之间有差异,就会发生这种情况(2)瀑布模型只适用于项目开始时需求已确定的情况。总地来说,瀑布模型是一种应付需求变化能力较弱的开发模型,因此,很多在该模型基础上开发出来的软件产品不能够真正满足用户需求

第二章:

可行性研究的过程:

  1. 复查系统规模和目标

复查系统定义,改正含糊或不确切的叙述,清晰地描述对目标系统的一切限制和约束

  1. 研究目前正在使用的系统

现有的系统是信息的重要来源。若一个软件是对旧系统的改造,那开发新系统时,要充分了解老系统存在的问题,需要增加的功能,新系统实际上是老系统的部分功能加上一些新增功能形成的系统

  1. 导出新系统的高层逻辑模型
  2. 重新定义问题

新系统的逻辑模型实质上表达了分析员对系统必须做什么的看法,得到新系统的高层逻辑模型之后,可能会发现前面问题定义的范畴过大,分析员还要和用户一起再复查问题定义,对问题进行重新定义和修正。

  1. 导出和评价供选择的解法

分析员应该从系统逻辑模型出发,研究问题的几个组成部分,细化各功能点,导出若干个较高层次的物理解法供比较和选择

  1. 推荐行动方针
  2. 草拟开发计划

任务分解 进度规划 财务预算 风险分析及对策

  1. 书写文档提交复查

第三章:

一.软件需求的定义:

以清晰、简单、一致且无二义性的方式,描述用户对目标软件系统在功能、行为、性能、设计约束等方面的期望,是在开发过程中对软件系统的约束。

二.需求分析的任务

  1. 业务需求:是客户对于软件系统的高层次目标要求,定义了项目的远景和范围
  2. 用户需求:从用户角度描述软件系统的功能需求与非功能需求,通常只涉及系统的外部行为。
  3. 功能需求:功能需求描述软件系统应该提供的功能或务,通常涉及用户或其他外部系统与目标系统之间的交互,不考虑目标系统内部的实现细节
  4. 非功能需求:非功能需求即性能需求,反映了客户对软件系统质量和性能的额外要求
  5. 约束条件: 约束条件是软件系统设计和实现时必须满足的限制条件
  6. 业务规则: 业务规则是对某些功能的可执行性成内部执行速制的一些限定条件
  7. 外部接口需求:    外部接口需求是描述目标系统与外部环境之间的交互接口
  8. 数据定义:当用户描达一个数据项或一个复杂的业务数据结构的格式或缺省值时,正在进行数据定义

第四章:

启发规则

启发规则是软件结构设计优化准则,软件概要设计的任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计原理设计软件,利用启发规则优化软件结构。

1.改进软件结构提高模块独立性2.模块规模适中3.适当控制深度、宽度、扇出、扇入

4.模块的作用域应该在控制域之内5.力争降低模块接口的复杂程度

6.设计单入口单出口的模块7.模块功能可预测

第五章:

详细设计的过程

软作详细设计是软件工程的重要阶段,在详细设计过程中,细化了高层的体系结构设计,将软件结构中的主要部件划分为能独立编码、编译和测试的软件单元,并进行软件单元的设计,同时确定了软件单元和单元之间的外部接口。

一.详细设计的基本任务

  1. 算法设计:用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来
  2. 数据结构设计:对于需求分析,概要设计确定的概念性的数据类型进行确切的定义
  3. 物理设计: 对数据库进行物理设计,即确定数据库的物理结构
  4. 其他设计

a.代码设计:为了提高数据的输入、分类、存储及检索等操作的效率,对数据库中的某些数据项的值要进行代码设计b.输入/输出格式设计c.人机对话设计

  1. 编写详细设计说明书  6 . 评审:对处理过程的算法和数据库的物理结构要进行评审

.详细设计方法:

  1. 自顶向下,逐步求精  2.具有单入、单出的控制结构 3. 五种控制结构:顺序结构,选择,先判断型循环结构,后断型循环结构,多选择分支结构

第七章:

一.测试用例设计:

白盒测试是对软件的过程细节做细致的检查。这一方法把测试对象看作 个打开的盒子,允许测试人员利用程序内部的逻辑结构及有关信息设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序的状态,确定实际的状态是否与期望的状态一致。

覆盖标准

  1. 语句覆盖

含义:就是选择足够多的测试用例,运行被测程序,使得程序中每条语句至少执行一次。

  1. 判定覆盖

含义:又称为分支覆盖,在设计测试用例,针对程序中具有分支结构的部分,为了测试所有的可能结果,需要将每个分支都至少执行一次,查看相应的语句执行情况和结果

(1)a=2,b=0,x=4,覆盖RACBDE

(2)a=3,b=1,x=1覆盖 RABE

  1. 条件覆盖

条件覆盖是指设计测试用例时,除了保证每条语句执行一次,还要使判定表达式的每个条件的各种可能取值都至少执行一次,为了实现条件覆盖,保证各种可能的条件都取值,即保证

第一个判断有以下取值:a>1,a<=1,b=0,b≠0

第二个判断有以下取值:a=2,a≠2,x>1,x<=1

选择两组测试用例:

(1)a=2,b=2,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE

(2)a=1,b=0,x=0(满足a<=1,b=0,a≠2,x<=1的条件),执行路径为RABE

  1. 判定/条件覆盖

单独使用判定覆盖和条件覆盖测试结果都不够全面, 若将两种覆盖结合,就会相互补充,判定/条件覆盖就是设计足够多的测试用例,使得每个判定表达式中的每个条件都取到各种可能的值,并且使每个判断语句的所有判断结果至少出现一次。

(1)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径RACBDE

(2)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径RABE

  1. 条件组合覆盖

条件组合覆盖就是设计足够多的测试用例,使得每个判定表达式中条件取值的各种组合都至少出现一次。根据每个判定表达式情况,列出如下条件组合

(1)a>1,b=0,A表达式为真;(2)a>1,b≠0,A表达式为假;(3)a<=1,b=0,A表达式为假

(4)a<=1,b≠0,A表达式为假;(5)a=2,x>1,B表达式为真(6)a=2,x<=1,B表达式为真;

(7)a≠2,x>1,B表达式为真;(8)a≠2,x<=1,B表达式为假。

选择以下四组测试用例

选择条件a=2,b=0,x=2,(1)、(5)组合,执行路径 RACBDE

选择条件a=2,b=1,x=1,(2)、(6)组合,执行路径 RABDE

选择条件a=1,b=0,x=2,(3)、(7)组合,执行路径 RABDE

选择条件a=1,b=1,x=1,(4)、(8)组合,执行路径 RABE

  1. 路径覆盖

就是选取足够多的用例,保证程序的所有路径都至少执行一次,如果存在环形结构,也要保证此环的所有路径都至少执行一次。

(1)a=1,b=1,x=1(满足a<=1,b≠0,a≠2,x<=1的条件),执行路径为RABE

(2)a=2,b=0,x=2(满足a>1,b=0,a=2,x>1的条件),执行路径为 RACBDE

(3)a=2,b=1,x=2(满足a>1,b≠0,a=2,x>1的条件),执行路径为 RABDE;

(4)a=3,b=0,x=1(满足a>1,b=0,a≠2,x<=1的条件),执行路径为 RACBE

二.测试的步骤:

  1. 单元测试

a.单元测试的主要任务

单元测试针对每个模块,主要解决五个方面的问题:(1)模块接口(2)局部数据结构(3)路径测试 (4)过界条件 (5)出错处理

b.单元测试的执行过程

  1. 集成测试

a.非增式集成测试方法 b. 增式集成测试方法

  1. 确认测试

确认测试的标准  配置审查的内容  Alpha Beta 测试  

  1. 系统测试

方法:恢复测试方法   安全测试方法  强度  性能

第八章:

一.软件维护的概念

软件维护是指在软件运行或维护阶段对软件产品所进行的修改,这些修改可能是改

正软件中的错误,也可能是增加新的功能以适应新的需求,但是一般不包括软件系统结

构上的重大改变。根据软件维护的不同原因,软件维护可以分成四种类型

(1)改正性维护

在软件交付使用后,由于开发时测试得不彻底或不完全,在运行阶段会暴露一些开

发时未能测试出来的错误,为了识别和纠正软件错误,改正软件性能上的缺陷,避免实

施中的错误使用,应当进行的诊断和改正错误的过程,这就是改正性维护

(2)适应性维护

随着计算机技术的飞速发展和更新换代,软件系统所需的外部环境或数据环境可能

会更新和升级,如操作系统或数据库系统的更换等。为了使软件系统适应这种变化,需

要对软件进行相应的修改,这种维护活动称为适应性维护

(3)完善性维护

在软件的使用过程中,用户往往会对软件提出新的功能与性能要求,为了满足这些

要求,需要修改或再开发软件,以扩充软件功能、增强软件性能、改进加工效率、提高软件

的可维护性,这种情况下进行的维护活动叫作完善性维护,完善性维护不一定是救火

式的紧急维修,而可以是有计划的一种再开发活动

4)预防性地护

这类维护是为了提高软件的可维护性,可靠性等,为以后进一步改进软件打下良好

的基础的维护活动,具体来讲,就是采用先进的软件工程方法对需要维护的软件或软件中的某一部分重新设计、编码和测试的活动。

二.软件维护的特点

1.软件维护受开发过程影响大

2.软件维护困难多

3.软件维护成本高

三.软件维护的步骤

软件维护工作包括建立维护组织、报告与评估维护申请、实施维护流程等步骤。

在影响分析和版本规划的过程中,不同的维护类型需要采用不同的维护策略

(1)改正性维护:首先应该评价软件错误的严重程度,对于十分严重的错误,维护

员应该立即实施维护对于一般性的错误,维护人员可以将有关的维护工作与其他开发

任务一起进行现划。在有些情况下,有的错误非常严重,以致不得不临时放弃正常的维

护控制工作程序,既不对修改可能带来的副作用作出评价,也不对文档作相应的更新,而

是立即进行代码的修改。这是一种救火式的改正性维护,只有在非常紧急的情况下才使

用,这种维护在全部维护中只占很小的比例。应当说明的是,救火式不是取消,只是推迟

了维护所需要的控制和评价。一旦危机取消,这些控制和评价活动必须进行,以确保当

前的修改不会增加更为重要的问题

(2)适应性维护:首先确定软件维护的优先顺序,再与其他开发任务一起进行规划

(3)定善性维护,根据商业的需求和软件的发展,有些完善性维护可能不会被接受。对于被接受的维护中请,应该确定其优先次序井现划其开发工作

第九章

质量保证

产品的生命,不论生产何种产品,质量都是极端重要的。软件产品开发周期长,耗费巨大的人力和物力,更必须特别注意保证质量。

软件质量:概括地说,软件质量就是“软件与明确地和隐含地定义的需求相一致的程度”。更具体地说,软件质量是软件与明确地叙述的功能和性能需求、文档中明确描述的开发标准以及任何专业开发的软件产品都应该具有的隐含特征相一致的程度。

软件质量因素的定义:

正确性:系统满足规格说明和用户目标的程度,即,在预定环境下能正确地完成预期功能的程度

建壮性:在硬件发生故障、输人的数据无效或操作错误等意外环境下,系统能做出适当响应的程度

完整性(安全性):对未经授权的人使用软件或数据的企图,系统能够控制(禁止)的程度

效率:为了完成预定的功能,系统需要的计算资源的多少

可用性:系统在完成预定应该完成的功能时令人满意的程度

风险:按预定的成本和进度把系统开发出来,并且为用户所满意的概率

可理解性:理解和使用该系统的容易程度

可维修性:诊断和改正在运行现场发现的错误所需要的工作量的大小

灵活性(适应性):修改或改进正在运行的系统需要的工作量的多少

可测试性:软件容易测试的程度

可移植性:把程序从一种硬件配置和(或)软件系统环境转移到另一种配置和环境时,需要的工作量多少,有一种定量度量的方法是:用原来程序设计和调试的成本除移植时需用的费用

可再用性:在其他应用中该程序可以被再次使用的程度(或范围)

互运行性:把该系统和另一个系统结合起来需要的工作量的多少

软件质量保证的措施主要有:基于非执行的测试(也称为复审或评审),基于执行的测试(即以前讲过的软件测试)和程序正确性证明。

复审主要用来保证在编码之前各阶段产生的文档的质量;基于执行的测试需要在程序编写出来之后进行,它是保证软件质量的最后一道防线;程序正确性证明使用数学方法严格验证程序是否与对它的说明完全一致

技术复审的必要性:

正式技术复审的显著优点是,能够较早发现软件错误,从而可防止错误被传播到软件过程的后续阶段。

正式技术复审是软件质量保证措施的一种,包括走查和审查等具体方法。走查的步骤比审查少,而且没有审查正规。

走查主要有下述两种方式。

(1) 参与者驱动法。参与者按照事先准备好的列表,提出他们不理解的术语和认为不正确的术语。文档编写组的代表必须回答每个质疑,要么承认确实有错误,要么对质疑做出解释。

(2) 文档驱动法。文档编写者向走查组成员仔细解释文档。走查组成员在此过程中不时针对事先准备好的问题或解释过程中发现的问题提出质疑。这种方法可能比第一种方法更有效,往往能检测出更多错误。经验表明,使用文档驱动法时许多错误是由文档讲解者自己发现的。

审查步骤:

(1) 综述。由负责编写文档的一名成员向审查组综述该文档。在综述会结束时把文档分发给每位与会者。

(2) 准备。评审员仔细阅读文档。最好列出在审查中发现的错误的类型,并按发生频率把错误类型分级,以辅助审查工作。这些列表有助于评审员们把注意力集中到最常发生错误的区域。

(3) 审查。评审组仔细走查整个文档。和走查一样,这一步的目的也是发现文档中的错误,而不是改正它们。通常每次审查会不超过90分钟。审查组组长应该在一天之内写出一份关于审查的报告。

(4) 返工。文档的作者负责解决在审查报告中列出的所有错误及问题。

(5) 跟踪。组长必须确保所提出的每个问题都得到了圆满的解决(要么修正了文档,要么澄清了被误认为是错误的条目)。必须仔细检查对文档所做的每个修正,以确保没有引入新的错误。如果在审查过程中返工量超过5%,则应该由审查组再对文档全面地审查一遍。

程序正确性证明:

测试可以暴露程序中的错误,因此是保证软件可靠性的重要手段;但是,测试只能证明程序中有错误,并不能证明程序中没有错误。因此,对于保证软件可靠性来说,测试是一种不完善的技术,人们自然希望研究出完善的正确性证明技术。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/444533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:05---命名空间

一、概念: ①类似于仓库,空间内存储代码,需要用到时调用②也为防止名字冲突提供了更加可控的机制二、命名空间的定义 定义的基本格式如下:namespace 命名空间名 { //一系列声明与定义 };三、命名空间的注意事项 命名空间定义时最后的分号可有可无只要出现在全局作用域中的…

C++:04---内联函数

1.概念: 内联类似于宏定义,当程序执行到内联函数时,相当于复制了一份函数代码。牺牲代码空间,赢得了时间 内联说明只是向编译器发出一个请求,编译器可以选择忽略这个请求 2.关键字:inline 声明时写了inline,定义时可省略。建议声明和定义都加上inlineinline int add(int…

leetcode86. 分隔链表

给定一个链表和一个特定值 x&#xff0c;对链表进行分隔&#xff0c;使得所有小于 x 的节点都在大于或等于 x 的节点之前。 你应当保留两个分区中每个节点的初始相对位置。 示例: 输入: head 1->4->3->2->5->2, x 3 输出: 1->2->2->4->3->5…

(十三)nodejs循序渐进-高性能游戏服务器框架pomelo之扩展聊天服务器为机器人自动聊天

聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了&#xff0c;那么我们在上一篇文章的代码基础上继续扩展&#xff0c;丰富系统&#xff0c;另外也熟悉下他的更多的用法&#xff0c;这一节我将扩展它&#xff1a;增加一个机器人自动聊天的功能。 目的…

C++:09---类静态成员、类常量成员

一、类静态成员(static) 先介绍一下什么是静态变量、静态函数 静态局部变量:存在域(全局数据区),作用域(块作用域)静态全局变量:存在域(全局数据区),作用域(整个文件)静态函数:存在域(全局数据区),作用域(整个文件)static int a=10;//全局静态变量 static vo…

C++:08---成员变量初始化方式

成员变量初始化有三种方式: 在构造函数体内赋值初始化在自定义的公有函数体中赋值初始化(一般用于成员变量的初始化)在构造函数的成员初始化列表初始化一、构造函数体内初始化 说明:在构造函数体内的初始化方式,本质是是为成员变量赋值,而不是真正意义上的初始化,这点要…

leetcode1290. 二进制链表转整数 刷新认知,最简单算法题

给你一个单链表的引用结点 head。链表中每个结点的值不是 0 就是 1。已知此链表是一个整数数字的二进制表示形式。 请你返回该链表所表示数字的 十进制值 。 示例 1&#xff1a; 输入&#xff1a;head [1,0,1] 输出&#xff1a;5 解释&#xff1a;二进制数 (101) 转化为十进…

Redis:02---安装Redis(Linux+Windows+Docker)

Linux安装&#xff1a;一、安装方式1&#xff08;下载源码编译安装&#xff09;第一步&#xff1a;从下面的网址中下载Redis最新稳定版本的源代码sudo wget http://download.redis.io/redis-stable.tar.gz第二步&#xff1a;下载完之后解压&#xff0c;建立一个软链接指向于red…

C++:10---再议拷贝构造函数

一、概念 使用一个已经存在的对象,去构造(初始化)另一个对象二、格式 参数加上const&,因为拷贝构造函数在几种情况下都会被隐式地使用,因此拷贝构造函数不应该是explict的const:防止函数内部修改值&:防止无限循环拷贝类名(类名 const& 参数名) { 函数体 }三、…

人的思维谬误与心理学效应

启发法 用一个容易的问题代替难以回答的真正问题。这个容易的问题的答案就是对真正问题的启发&#xff0c;但启发经常和真正的答案差得很远&#xff0c;而人却往往把启发当成了真正问题的答案。 接下来介绍和启发法相关的心理效应和谬误。每一个谬误都会注明真正的问题是什么…

C++:07---this指针

一、this指针介绍 概念:this指针是成员函数的一个隐式参数,在类中本质上就是对象的指针(常量指针)特点:在成员函数中可通过this指针区别成员变量与形参变量this可以显式调用示例代码:class Cperson { private: int age; float height; public: void InitPerson(int age,flo…

Redis :01---Redis简介和安装

一、Redis简介 Redis官网&#xff1a;https://redis.io/ Redis是一种基于键值对&#xff08;key-value&#xff09;的NoSQL数据库 与很多键值对数据库不同的是&#xff0c;Redis中的值可以是由string&#xff08;字符串&#xff09;、hash&#xff08;哈希&#xff09;、 list&…

215. 数组中的第K个最大元素 BFPRT最牛解法

在未排序的数组中找到第 k 个最大的元素。请注意&#xff0c;你需要找的是数组排序后的第 k 个最大的元素&#xff0c;而不是第 k 个不同的元素。 示例 1: 输入: [3,2,1,5,6,4] 和 k 2 输出: 5 示例 2: 输入: [3,2,3,1,2,4,5,5,6] 和 k 4 输出: 4 说明: 你可以假设 k 总是…

C++: 06---构造函数析构函数

拷贝构造函数: 用一个已经存在的对象来生成一个相同类型的新对象。(浅拷贝)默认的拷贝构造函数: 如果自定义了拷贝构造函数,编译器就不在生成默认的拷贝构造函数。 如果没有自定义拷贝构造函数,但在代码中用到了拷贝构造函数,编译器会生成默认…

leetcode371. 两整数之和 不用+号做加法

不使用运算符 和 - &#xff0c;计算两整数 ​​​​​​​a 、b ​​​​​​​之和。 示例 1: 输入: a 1, b 2 输出: 3 示例 2: 输入: a -2, b 3 输出: 1 思路&#xff1a;模拟加法器 二进制不考虑进位&#xff1a;000&#xff0c;010&#xff0c;110&#xff0c;是…

C++:05---class和struct

C++被称为“C with class”,可见在C++中class是多么重要,与class类似的一个结构就是struct了,struct最早是在C语言中出现的,在C++中对struct的功能也进行了扩展。 class : public(公有):在类内外、派生类中都可被访问protected(保护):希望与派生类共享但是不想被公共…

leetcode34. 在排序数组中查找元素的第一个和最后一个位置

给定一个按照升序排列的整数数组 nums&#xff0c;和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O(log n) 级别。 如果数组中不存在目标值&#xff0c;返回 [-1, -1]。 示例 1: 输入: nums [5,7,7,8,8,10], target 8 输…

C++:11---友元函数、友元类

一、友元(friend) 概念:通过友元,打破了类的封装性,可以访问类内的所有成员分类:友元函数、友元类二、友元函数 概念:友元函数是一个普通函数,不属于类,但需要在类内表明友元关系 友元函数可访问类内所有成员,但类不可以访问友元函数…

leetcode75. 颜色分类

给定一个包含红色、白色和蓝色&#xff0c;一共 n 个元素的数组&#xff0c;原地对它们进行排序&#xff0c;使得相同颜色的元素相邻&#xff0c;并按照红色、白色、蓝色顺序排列。 此题中&#xff0c;我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码…

C++:12---运算符重载

一、概念 对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型重载的运算符是具有特殊名字的函数,该函数也有返回值、参数列表、函数体二、运算符重载的3种实现方式 成员函数:私有、公有、保护都可以友元函数:同上全局函数:只能访问公有的三、运算符重载的…