导图社区 软件工程学习总结
软件工程考试复习总体大纲,软件工程是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及程序设计语言、数据库、软件开发工具、系统平台、标准、设计模式等方面。在现代社会中,软件应用于多个方面。
编辑于2020-12-27 10:29:34软件工程
概论
计算机软件
软件的发展
第一阶段
第二阶段(软件危机)
指软件生产和维护过程中出现一系列严重问题 如不能满足用户要求,超出预算和时间安排, 出现了人们难以控制的局面
第三阶段
软件的特点
软件是一种逻辑实体
一旦开发成功,维护量巨大
软件维护需要修改程序,修改会引起副作用,从而使故障率升高
软件的分类
系统软件
最靠近硬件层,系统软件与应用层领域无关如编译程序,操作系统
支撑软件
支持软件开发维护与运行的软件。如数据库管理系统,网络软件,软件工具
应用软件
特定应用领域的软件。如嵌入式应用软件
软件语言
需求定义软件
功能性语言
设计性语言
程序设计语言
文档语言
软件工程
软件工程定义
软件工程是应用计算机科学理论和技术及工程管理和方法按预算满足 和进度满足用户要求的软件产品工程或为此研究的工程
软件工程框架
软件生存周期
软件⽣存周期是指软件产品或软件系统从⽣产、 投⼊使⽤到被淘汰的全过程。
计算机系统工程
确定待开发软件的总体要求和范围,以及该软件与其他计算机系统元素之间的关系,进⾏成本估算,作出进度安排,并进⾏可⾏性分析,即从经济、技术、法律等⽅⾯分析待开发的软件是否有可⾏的解决⽅案,并在若⼲个可⾏的解决⽅案中作出选择。
需求分析
主要解决待开发软件要“做什么”的问题,确定软件的功能、性能、数据、界⾯等要求,⽣成软件需求规约。
设计
主要解决待开发软件“怎么做”的问题。包括系统设计和详细设计(系统设计的任务是设计软件系统的体系结构,包括软件系统的组成成分、各成分的功能和接⼝、成分间的连接和通信,同时设计全局数据结构。详细设计的任务是设计各个组成成分的实现细节,包括局部数据结构和算法等。
编码
⽤某种程序设计语⾔,将设计的结果转换为可执⾏的程序代码。
测试
发现并纠正软件中的错误和缺陷。
运行和维护
当发现软件中潜藏的错误或需要增加新的功能或使软件适应外界的变化等情况出现时,对软件进⾏修改。
软件过程
软件过程是⽣产⼀个最终满⾜需求且达到⼯程⽬标的软件产品所需的步骤。
软件生存周期过程
能力成熟度模型
能力成熟度模型集成
软件过程模型
瀑布模型
原理:它给出了软件生存周期活动的固定顺序,上一阶段的活动完成后向下一阶段的活动过渡,最终得到所开发的软件产品。
特征: ●接收上一阶段活动的结果作为本阶段活动的输入。 ●依据上一阶段活动的结果实施本阶段应完成的活动。 ●对本阶段的活动进行评审。 ●将本阶段活动的结果作为输出,传递给下一阶段
演化模型
增量模型
特征: 增量模型是一种非整体开发的模型。根据增量的方式和形式的不同,分为基于瀑布模型的渐增模型和基于原型的快速原型模型。该模型具有较大的灵活性,适合于软件需求不明确、设计方案有一定风险的软件项目
原型模型
特征: ●快速原型是用来获取用户需求的,或是用来试探设计是否有效的。一旦需求或设计确定下来了,原型就将被抛弃。因此,快速原型要求快速构件、容易修改,以节约原型创建的成本、加快开发速度; ●快速原型是暂时适用使用的,因此并不要求完整。它往往针对某个局部问题建立专门原型,如界面原型、工作流原型等; ●快速原型不能贯穿软件的整个生命周期,它需要和其他的过程模型相结合才能产生作用。例如,在瀑布模型中应用快速原型,以解决瀑布模型在需求分析时期存在的不足
螺旋模型
特征: ●与瀑布模型相比,螺旋模型支持用户需求的动态变化,为用户参与软件开发的所有关键决策提供了方便; ●使用螺旋模型进行软件开发,需要开发人员具有相当丰富的风险评估经验和专门知识
喷泉模型
特征: ● 喷泉模型是一种以用户需求为动力,以对象作为驱动的模型,适合于面向对象的开发方法; ● 喷泉模型使开发过程具有迭代性和无间隙性,迭代意味着模型中的开发活动常常需要重复多次,在迭代过程中不断地完善软件系统,无间隙是指在开发活动(如分析、设计、编码)之间不存在明显的边界
基于构件开发的模型
基于构件的开发方法是指利用预先包装的构件来构造应用系统。构件可以是组织内部开发的构件,也可以是商品化成品构件。基于构件的开发模型具有许多螺旋模型的特点,它本质上是演化模型,需要以迭代方式构件软件。其不同之处在于,基于构件的开发模型采用预先打包的软件构件开发应用领域
形式演化方法模型
是建立在严格数学基础上的一种软件开发方法。软件开发的全过程中,从需求分析、规约、设计编程、系统集成、测试、文档生成,直至维护等各个阶段,凡是采用严格的数学语言,具有精确的数学语义的方法,都称为形式化方法
CASE工具与环境
软件工具
计算机辅助软件软件⼯程(CASE)是指使⽤计算机及相关的软件⼯具辅助软件开发、维护、管理等过程中各项活动的实施,以确保这些活动能⾼效、⾼质量地进⾏
软件开发环境
软件开发环境是支持软件产品开发的软件系统。它是由软件工具集和环境集成机制构成,前者用于支持软件开发的相关过程、活动和任务;后者为工具集成和软件开发、维护和管理提供统一的支持。
系统工程
基于计算机的系统
p28
系统工程的任务
识别⽤户的要求、系统建模和模拟、成本估算及进度安排、可⾏性分析、⽣成系统规格说明。
系统工程的任务
经济可行性
技术可行性
法律可行性
方案的选择和折衷
需求工程
需求的过程 需求的 需求扩展
需求工程概述
需求获取
软件需求
(1)功能需求 (2)性能需求 (3)用户或人的因素 (4)环境需求 (5)界面需求 (6)文档需求 (7)数据需求 (8)资源使用需求 (9)安全保密需求 (10)可靠性需求 (11)软件成本消耗与开发进度需求 (12)其他非功能性需求
需求获取的方法和策略
获取需求前首先要建立需求获取人员与用户的顺畅的通信途径,与用户交流,向用户提问题,通过访谈与会议、参观用户的工作流程,观察用户操作、建立联合小组和实例分析来获取需求
需求分析协商与建模
需求分析原则
信息域
需求协商
需求建模
需求违约与验证
需求违约原则
需求违约
需求验证
需求管理
需求管理是一组用于帮助项目组在项目进展中的任何时候去标识、控制和跟踪需求的活动。
设计工程
软件设计的基本任务 软件设计,模块化的优点 p51,类聚,耦合 p53。软件体系结构有哪些 p57,部件级设计,结构程序设计的基本原理 详细图形表示法
软件设计工程概述
软件设计原则
抽象与逐步求精
模块化
把软件按照规定规则,划分为一个个较小的、相互独立的但又相互关联的部件
1.使程序错误通常局限在有关的模块及它们之间的接口中,模块化使软件容易调试和测试,有助提高软件的可靠性; 2.同时变动往往只涉及少数几个模块,从而模块化能够提高软件的可修改性 3.使软件结构清晰,这样每个模块的内容不仅容易设计,而且容易阅读和理解
信息隐藏
功能独立
内聚
内聚:是一个模块内部各个元素彼此结合的紧密程度的度量。 内聚的种类:巧合内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。(按内聚性降序排列,内聚性越低,功能独立性越弱
耦合
耦合:是模块之间的相对独立性(互相连接的紧密程度)的度量。 耦合的种类:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。(按耦合性降序排列,耦合性越低,功能独立性越强
软件体系结构设计
体系结构发展过程
软件体系结构的风格
数据为中心的体系结构、数据流风格的体系结构、调用和返回风格的体系结构、面向对象风格的体系结构、层次式风格的体系结构
评估可选择的体系结构
部件级设计技术
结构化程序设计方法
图形表示法
程序流程图、N-S图(盒图)、PAD(问题分析图)
判定法
设计性语言PDL
设计规约与设计审评
设计规约
设计审评
结构化分析与设计
结构化分析方法的基本原理 数据流图的基本作用 数据字典 88,描述基本加工的小说明 结构化设计步骤96 映射的步骤
结构化分析方法概述
结构化分析方法采用自顶向下逐层分解(将大而复杂的问题分解成若干个较小的问题,每个较小的问题又可分解成若干更小的问题)的思想进行分析建模的,自顶向下逐层分解充分体现了分解和抽象(忽略一个问题中与当前目标无关的那些方面,以便充分地关注与当前目标有关的方面)的原则。随着分解层次的增加,抽象的级别也越来越低,及越来越接近问题的解。并运用数据流图、加工说明和数据字典作为表达工具对问题进行分析。
数据流图
数据流图的基本元素是:数据流、加工、文件、源或宿。 数据流图的作用:用于软件系统的功能建模,描述系统的输入数据流如何经过一系列的加工,逐步变换成系统的输出数据流,这些对数据流的加工实际上反映了系统的某种功能或子功能。
数据流图的图形表示
分层数据流图的画法
分层数据流图的审查
分层数据流图的一致性和完整性
构造分层DFD时需要注意的问题
分解的程度
数据字典
数据字典包含哪些基本条目:数据流、文件、数据项、加工、源或宿。 数据字典的作用:(数据字典是指对数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明,使用数据字典为简单的建模项目。简而言之,数据字典是描述数据的信息集合,是对系统中使用的所有数据元素的定义的集合。)是模型的核心,用于描述系统软件使用和产生的所有数据
数据字典的条目的种类及描述符号
字典条目
字典条目实例
数据字典的实现
描述基本加工的小说明
结构化语言
结构化语言:介于自然语言和形武语言(如谓词逻街)之间的的一种半形式语言,它是自然语言的一个受限制的子集。是在自然语言的基础上加上些约束,一般分为两层结构:外层语法较具体,为控制结构(顺序、选择、循坏);内层较灵活,表达"做什么”。 常用结构化英语或结构化汉语表示,精确、简明扼要、文体灵活。结构化语言特点:简单,易学,少三义性,但不好处理组合条件
判定表
判定表:适用于表述比较复杂的加工逻辑,如具有多项选择条件的操作。判定表是种二维的表格,常用于较复杂的组合条件。对用结构化语言不易处理的较复杂的组合条件问题,可使用判定表
判定树
判定树:本质上与判定表相同,图形表示更易于理解。描述般组合条件较清晰,但不易输入计算机
结构化设计概述
结构图
启发式设计策略
结构化设计的步骤
① 建立初始结构图; ②对结构图的改进; ③书写设计文档; ④ 设计评审
数据流图到软件体系结构的映射
信息流
数据流图映射到软件体系结构的步骤
(1)复审和精化数据流图 首先应复审DFD的顶层图,确保系统的输入、输出数据流符合系统规格说 明的要求。然后复审分层DFD,以确保它符合软件的功能需求。必要时DFD进行精化 (2)确定数据流图的类型 根据DFD的信息流特征,确定DFD是变换型的还是事务型的。 (3)将DFD映射成初始结构图 采用变换分析或事务分析技术,将DFD映射成初始结构图。 (4)改进初始结构图 根据软件设计准则,采用启发式设计策略,对初始结构图进行改进,以改 善软件质量。
变换分析
事务分析
分层DFD的映射
初始结构图的改进
结构图改进实例
结构图改进技巧
面向数据结构的分析与设计
JSP方法
数据结构与程序结构的表示
JSP方法的分析与设计步骤
① 分析并确定输入和输出数据结构的逻辑结构,并用Jackson图画出; ② 找出输入数据结构与输出数据结构中有对应关系的数据元素; ③ 从描述数据结构的Jackson图导出描述程序结构的Jackson图; ④ 列出所有操作和条件,并将它们分配到程序结构图的适当位置; ⑤ 用伪码表示
JSP方法简介
面向对象方法基础
面向对象的要素和特点 面向对象建立哪些模型,作用是什么 面相对性,系统设计,对象设计的作用
面向对象的基本概念
(1)要素:对象、类、继承 (2)特点: ①抽象性:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。 ②封装性:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。信息隐藏是用户对封装性的认识,封装则为信息隐藏提供支持。 ③继承性:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。继承性很好的解决了软件的可重用性问题。 ④多态性:多态性是指允许不同类的对象对同一消息作出响应。
面向对象分析和设计步骤
面向对象要建立对象模型、动态模型、功能模型。 (1)对象模型:对象模型表示静态的、结构化的系统的“数据”性质。它是对模拟客观世界实体的对象以及对象彼此之间的关系的映射,描述了系统的静态结构。面向对象方法中,常用类图(核心工具)和对象图构建系统的对象模型。 (2)动态模型:描述系统的动态结构和对象之间的交互,表示瞬时的、行为化的系统的“控制”特性。面向对象方法中,常用状态图、顺序图、合作图、活动图构建系统的动态模型。 (3)功能模型:指明了系统应该“做什么”,更直接地反映了用户对目标系统的要求。由一组用况模型和数据流图组成。
面向对象分析过程
面向对象设计过程
设计模式
UML概述
UML的发展历史
UML简介
视图
图
面向对象建模
用况建模
用况建模步骤
确定执行者
确定用况
用况描述
用况图中的关系
案例说明
用况建模实例
静态建模
类图和对象图
CRC技术
类之间的关系
静态建模实例
动态建模
状态机图
活动图
顺序图
通信图
动态建模实例
物理体系结构建模
构件图
部署图
基于构件的软件开发
基于构件的软件开发概述
构件
基于构件的软件开发过程
CBSD对质量,生产率和成本的影响
建造可复用构件
对可复用构件要求
构件的鉴定,特化和组装
创建领域构件的设计框架
可变性分析
可变性机制
应用系统工程
基于CBSD的应用系统分析和设计
构件的鉴定,特化和组装
构件的管理
构件的分类描述
构件库管理系统
敏捷软件开发
敏捷软件开发概论
敏捷宣言
精益思想
敏捷方法概述
Scrum方法
Scrum简介
Scrum团队
需求管理
基于时间盒的迭代
回顾会议
极限编程方法
极限编程简介
价值观和原则
实践
看板方法
看板方法简介
看板方法的规则
看板方法和Scrum的比较
人机界面设计
人的因素
人对感知过程的认识
用户技能和行为方式
人体测量学肚饿设计的影响
人机界面风格
人机界面分析与建模
人机界面的设计过程
人机界面设计中涉及的模型
任务分析的途径与方法
界面设计活动
子主题
程序设计语言和编码
1、源程序文档化: (1)标识符的命名:标识符用于标识程序中的模块、变量、常量、子程序、函数等元素的名字。 命名标识符的注意事项: a.名字应该能反映它所代表的实体,应有一定的实际意义。 b.名字不是越长越好,太长会增加打字量,且易出错,给修改带来困难。所以应当选择精炼的意义明确的名字。 c.必要时可以使用缩写名字,但是缩写规则要一致,并且要给每一个缩写名字加注释。 d.不用关键字做标识符 e.同一个名字不要有多个含义 f.不用相似的名字,相似的名字容易混淆,不易发现错误。 g.名字中避免使用易混淆的字符。 (2)程序的注释 序言性注释(每个程序模块的开头部分)的内容 a.模块的功能 b.模块的接口,包括调用格式、参数的解释、该模块需要调用的其他子模块名。 c.重要的局部变量,包括用途、约束和限制条件。 d.开发历史,包括模块的设计者、评审者、评审日期、修改日期以及对修改的描述。 功能性注释(嵌于源程序体内,主要描述程序段的功能),应注意的问题: a.注释要正确,错误的注释比没有注释更坏。 b.为程序段做注释,而不是为每一个语句做注释。 c.用缩进和空行,使程序与注释容易区分。 d.注释应提供一些从程序本身难以得到的信息,而不是语句的重复。 (3)视觉组织:通常在程序中使用空格、空行和缩进等技巧,帮助人们从视觉上看清楚程序的结构。常用的规则和技巧如下。 a.通过缩进技巧可以清晰地观察到程序的嵌套层次,同时还容易发现“遗漏end”这样的错误。 b.自然的程序段之间可以用空行分开。 c.可通过添加空格使语句成分清晰。 d.可以通过添加括号突出运算的优先级,避免发生运算的错误。 e.放置大括号。一般首选的方法是K&R方法:把左括号放在行尾,右括号放在行首。(定义函数时应当把左右括号都放在行首),右括号所在的行不应该有其他语句,除非跟随着一个条件判断。 2、数据说明:为了使程序中数据说明更易于理解和维护,可采用以下风格: (1)现实说明一切变量 (2)数据说明的次序规范化 (3)说明语句中变量安排有序化 (4)使用注释说明复杂的数据结构 3、语句结构(常用规则如下) (1)一行内只写一条语句 (2)首先考虑清晰性 (3)直截了当说明程序员的用意 (4)其他常用规则 a.让编译程序做简单的优化 b.尽可能使用库函数 c.避免不必要的转移 d.尽量只采用3种基本的控制结构䣂编写程序。出顺序结构外,使用if-then-else来实现选择结构;使用do-until或do-while来实现循环结构。 4、输入和输出(设计和编码是应该考虑的原则) (1)对所有的输入数据都进行检验,从而识别错误的输入,以保证每个输入数据的有效性。 (2)检查输入项的各种重要组合的合理性,必要时报告输入状态信息。 (3)使得输入的步骤尽可能简单,并保持简单的输入格式。 (4)输入数据时,应允许使用自由格式输入。 (5)应允许默认值。 (6)输入一批数据时,最好使用输入结束标志,而不要由用户指定输入数据数目。 (7)在以交互式输入输出方式进行输入时,要在屏幕上使用提示符明确提示交互输入的请求,指明可使用选择项的种类和取值范围。同时,在数据输入的过程中和输入结束时,也要在屏幕上给出状态信息。 (8)当程序设计语言对输入输出格式有严格要求时,应保持输入输出格式与输入输出语句的一致性。 (9)给所有的输出加注解,并设计良好的输出报表格式。输入输出风格还与输入输出设备,用户的熟练程度以及通信环境等有关
软件测试
软件测试的概念 在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 软件测试的目的: 测试是程序的执行过程,目的在于发现错误 一个成功的测试用例在于发现至今未发现的错误 一个成功的测试是发现了至今未发现的错误的测试 确保产品完成了它所承诺或公布的功能,并且用户可以访问到的功能都有明确的书面说明。 确保产品满足性能和效率的要求确保产品是健壮的和适应用户环境的
Web工程
软件维护与在工程
1. 软件维护性的类型 软件维护活动类型总起来大概有四种: (1)纠错性维护(校正性维护):为了改正软件系统中的错误,使软件能够满足预期的正常运行状态的要求而进行的维护。 (2)适应性维护:为了使软件适应内部或外部环境变化而去修改软件的过程。 (3)改善性维护或增强:满足使用过程中用户提出增加新功能或修改已有功能的建议维护。 (4)预防性维护或再工程:为了提高软件的可维护性、可靠性等,为以后进一步改进软件打下良好基础而修改软件的活动。 除此四类维护活动外,还有一些其它类型的维护活动,如:支援性维护(如用户的培训等)。 2.影响软件可维护性的因素 可维护性(maintainability)是指理解、改正、调整和改进软件的难易程度。对软件可维护性影响的主要因素有:可理解性、可测试性、可修改性和可移植性。 (1)可理解性(understandability)指理解软件的结构、接口、功能和内部过程的难易程度。 (2)可测试性(testability)指测试和诊断软件(主要指程序)中错误的难易程度。 (3)可修改性(modifiability)指修改软件(主要指程序)的难易程度。可移植性(portability)指程序转移到一个新的计算环境的难易程度
软件项目管理
系统设计的基本任务是什么?对象设计的基本任务是什么?
(1)系统设计的基本任务是: ①将分析模型划分为子系统; ②标识问题本身的并发性,并为子系统分配处理器; ③任务管理设计; ④数据管理设计; ⑤资源管理设计; ⑥人机界面设计; ⑦子系统间的通信。 (2)对象设计的基本任务是: ① 对象描述(协议描述和实现描述); ② 设计数据结构和算法。
结构图的元素类型有哪些
①顺序元素:由一个或多从左到右的元素组成,其中每个组成的元素只出现一次。 ②选择元素:包括两个及两个以上的子元素,使用选择元素时根据指定的条件从这些子元素中选择一个子元素。 ③重复元素:仅由一个子元素构成,表示重复元素由子元素重复0次或多次组成。
结构化程序设计的基本原理是什么
如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行联结,并且每个代码块只有一个人口和一个出口,则称这个程序是结构的。 ①结构化程序设计的实质并不是无goto语句的编程方法,而是一种使程序代码容易阅读、容易理解的编程方法。 ②通常结构化程序设计也采用自顶向下、逐步求精的设计方法,这种方法符合抽象和分解的原则,是人们解决复杂问题的常用方法。 ③采用这种先整体后局部、先抽象后具体的步骤开发的软件一般都具有较清晰的层次结构。 ④单入口单出口的控制结构使程序具有良好的结构特征,结构化程序设计方法能提高程序的可读性、可维护性和可验证性,从而提高软件的生产率。 ⑤采用结构化程序设计方法可能要多占用一定的时间和空间资源,这是反对从高级语言中剔除goto语句的主要原因,但是随着硬件技术的发展,这点时间和空间的消耗与软件维护带来的成本相比已经显得微不足道了
软件设计的基本任务是什么
①数据/类设计:将分析类模型变换成类的实现和软件实现所需要的数据结构。 ②体系结构设计:定义了软件的整体结构,有软件部件、外部可见的属性和它们之间的关系。 ③接口设计:描述了软件内部、软件和协作系统之间以及软件同人之间的通信方式 ④部件级设计:将软件体系结构的结构性元素变换为软件不见得过程性描述
需求工程可划分为哪几个阶段?
需求获取:系统分析人员通过与用户的交流、对现有系统的观察以及对任务进行分析,确定系统或产品范围的限制性描述、与系统或产品有关的人员及特征列表、系统的技术环境的描述、系统功能的列表及应用于每个需求的领域限制、描述不同运行条件下系统或产品使用状况的应用场景等
需求分析与协商:需求获取结束后,分析活动对需求进行分类组织,分析每个需求与其他需求的关系以检查需求的一致性、重叠和遗漏的情况,并根据用户的需要对需求进行排序
系统建模:建模技术可以通过合适的工具和符号系统地描述需求。建模工具的使用在用户和系统分析人员之间建立了统一的语言和理解的桥梁,同时系统分析人员借助建模技术对获取的需求信息进行分析,排除错误和弥补不足,确保需求文档正确反映用户的真实意图
需求规约:分析任务的最终产物,通过建立完整的信息描述、详细的功能和行为描述、性能需求和设计的说明、合适的验收标准,给出对目标软件的各种需求
需求验证:对功能的正确性、完整性和清晰性,以及其他需求予以评价
需求管理:对需求工程所有相关活动的规划和控制
从哪些⽅⾯进⾏可⾏性分析?
成本、效益、货币的时间价值、投资回收期、纯收⼊
①⻛险分析:主要分析在给定的约束条件下设计和实现系统的风险。 ②资源分析:主要论证是否具备系统开发所需的各类人员、软件、硬件 等资源和相应的工作环境。 ③技术分析:主要分析当前的科学技术是否支持系统开发的各项活动