软件工程知识点整理

文章目录

    • 一、软件危机与软件工程
    • 二、系统工程
    • 三、需求工程
    • 四、软件设计
    • 五、结构化分析与设计
    • 六、面向对象分析与设计
    • 七、软件测试

一、软件危机与软件工程

1、计算机软件:计算机软件指计算机系统中的程序及其文档
1)软件的特点:
??? 软件是一种逻辑实体,而不是有形的系统元件,其开发成本和进度难以准确地估算
??? 软件是被开发的或被设计的,它没有明显的制造过程,一旦开发成功,只需复制即可,但其维护的工作量大
??? 软件的使用没有硬件那样的机械磨损和老化问题
2)软件的分类:
??? 系统软件:属于计算机系统中最靠近硬件的一层,其它软件一般都通过系统软件发挥作用,它与具体的应用领域无关。如操作系统、编译程序等。
??? 支持软件:支持软件的开发和维护的软件。如数据库管理系统、网络软件、软件开发环境等。
??? 应用软件:特定应用领域专用的软件。如实时软件、嵌入式软件、科学和工程计算软件、事务处理软件、人工智能软件等。
3)软件语言:软件语言是用于书写计算机软件的语言。
??它主要包括:需求定义语言,功能性语言,设计性语言,实现性语言(即程序设计语言),文档语言
2、软件危机:
1)表现:
??? 对软件开发成本和进度的估计常常很不正确
??? 用户对“已完成的”软件系统不满意的现象经常发生
??? 软件产品的质量往往靠不住
??? 软件常常是不可维护的
??? 软件通常没有适当的文档资料
??? 软件成本在计算机系统总成本中所占的比例逐年上升
??? 软件开发生产率提高的速度远远跟不上计算机应用迅速普及深入的趋势
2)原因:
??? 软件是逻辑产品,开发进度、成本难以估计
??? 缺乏或不完整、不一致的文档给维护带来困难
??? 用户对软件需求的描述往往不够精确,有遗漏,有二义
??? 软件开发人员对需求的理解与用户的本来愿望有差异
??? 大型软件项目需多人协同完成,缺乏管理经验
??? 开发人员不能有效地、独立自主地处理大型软件的全部关系
??? 缺乏有力的方法学和工具的支持
??? 软件项目的特殊性和人类智力的局限性
3)克服软件危机的途径:
??? 消除错误的概念和做法
??? 推广使用成功的开发技术和方法
??? 使用软件工具和软件工程支持环境
??? 加强软件管理
3、软件工程:软件工程是一种层次化的技术
1)三要素:过程、方法、工具
??过程是工作产品构建时所执行的一系列活动、动作和任务的集合
??方法为构建软件提供技术上的解决方法(“如何做”)
??工具为过程和方法提供自动化或半自动化的支持
2)软件生命周期:问题定义->可行性研究->需求分析->总体设计->详细设计->编码->测试->维护
4、软件过程:软件过程是在工作产品构建过程中,所需完成的工作活动、动作和任务的集合。
1)基本(primary)过程供各当事方在软件生存周期期间使用。包括:
??? 获取(acquisition)过程:确定需方和组织向供方获取系统、软件或软件服务的活动。
??? 供应(supply)过程:确定供方和组织向需方提供系统、软件或软件服务的活动。
??? 开发(development)过程:确定开发者和组织定义并开发软件的活动。
??? 运作(operation)过程:确定操作者和组织在规定的环境中为其用户提供运行计算机系统服务的活动。
??? 维护(maintenance)过程:确定维护者和组织提供维护软件服务的活动。
2)支持(supporting)过程用于支持其他过程,它有助于软件项目的成功和质量提高。包括:
??? 文档编制(documentation)过程: 确定记录生存周期过程产生的信息所需的活动。
??? 配置管理(configuration management)过程: 确定配置管理活动。
??? 质量保证(quality assurance)过程:确定客观地保证软件和过程符合规定的要求以及已建立的计划所需的活动。
??? 验证(verification)过程:根据软件项目要求,按不同深度确定验证软件所需的活动。
??? 确认(validation)过程:确定确认软件所需的活动。
??? 联合评审(joint review)过程:确定评价一项活动的状态和产品所需的活动。
??? 审计(audit)过程:确定为判断符合要求、计划和合同所需的活动。
??? 问题解决(problem resolution)过程:确定一个用于分析和解决问题的过程。
3)能力成熟度模型CMM
??1初始级,有能力的人和个人英雄主义
??2可重复级,基本项目管理
??3已定义级,过程标准化
??4量化管理级,量化管理
??5优化级,持续的过程改进
4)软件过程模型:软件过程模型(软件生命周期模型)是软件开发全部过程、活动和任务的结构框架。
典型的软件过程模型有:
– 瀑布模型(waterfall model)
特征:
?接受上一阶段的结果作为本阶段的输入
?利用这一输入实施本阶段应完成的活动
?对本阶段的工作进行评审
?将本阶段的结果作为输出,传递给下一阶段
缺点:
?缺乏灵活性,难以适应需求不明确或需求经常变化的软件开发
?开发早期存在的问题往往要到交付使用时才发现,维护代价大。
?会产生一些用处不大的文档
使用场合:适用于系统需求明确且稳定,技术成熟,工程管理较严格的场合,如军工、航天、医疗。
– 演化模型(evolutionary model)
– 增量模型(incremental model) :增量模型特别适用于需求经常变化的软件开发
– 原型模型(prototyping model)
– 螺旋模型(spiral model)
– 喷泉模型(water fountain model)
特征:迭代、无缝。
是一种支持面向对象开发的模型
– 基于构件的开发模型(component-based development model)
– 形式方法模型(formal methods model)
【题目】
1)软件产品的开发主要是(研制)。
2)作坊式小团体合作生产方式的时代是(程序系统)时代。
3)软件工程与计算机科学性质不同,软件工程着重于(建造软件系统)。
4)软件开发中分层的基本动机是控制开发的复杂性。(正确 )
5)开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做(软件危机)。
6)软件产品与物质产品有很大的区别,软件产品是一种(逻辑)产品
7)在软件生命周期的哪一个阶段,软件缺陷修复费用最低(需求分析(编制产品说明书))
8)当软件的一个版本被淘汰时,则该软件的生存周期就结束了。 (错误 )
9)按照(软件开发的主体),可以将软件过程分为基本过程,支持过程和组织过程。
10)软件开发模型中,以面向对象的软件开发方法为基础,以用户的需求为动力,以对象来驱动的模型是(喷泉模型)

二、系统工程

系统工程:关注目标系统各种相关要素的分析、设计,并将其组织成有机的系统。
1、组成基于计算机系统的元素主要有:软件、硬件、人员、数据库(及其它系统软件)、文档和规程。
2、系统工程的任务:识别用户的要求、系统的建模和模拟(硬件系统模型、软件系统模型、人机接口模型、数据模型)、成本估算及进度、可行性分析(经济、法律、技术)、生成系统规格说明。
3、可行性分析:开发一个基于计算机的系统(以及其他系统)通常都受到资源(人力、财力、设备等)和时间上的限制,可行性分析主要从经济、技术、法律等方面分析所给出的解决方案是否可行,能否在规定的资源和时间的约束下完成。
【题目】
1)系统流程图是描述(体系结构)的工具。
2)系统流程图用于可行性分析中的(当前运行系统)的描述。
3)研究开发资源的有效性是进行(技术)可行性研究的一方面。
4)在软件的可行性研究中,可以从不同的角度对软件进行研究,其中从软件的功能可行性考虑的是(技术可行性)。
5)研究软硬件的有效性是进行(经济可行性)研究的一方面。

三、需求工程

1、需求工程概述
1)软件需求的分类
功能需求
非功能需求:性能需求、质量属性、对外接口、约束
2)需求工程的六个阶段:
?需求获取:资料收集
?需求分析与协商:理解分析整理
?系统建模:用模型描述
?需求规约:完善需求文档并定稿
?需求验证:验证确认
?需求管理:整体规划及变更管理
2、需求获取
3、需求分析、协商与建模
1)需求分析原则:
? 必须能够表示和理解问题的信息域(数据) ? 必须能够定义软件将完成的功能
? 必须能够表示软件的行为(作为外部事件的结果)
? 必须划分描述数据、功能和行为的模型(分离描述),从而可以分层次地揭示细节
? 分析过程应该在基本信息基础上不断细化
2)需求协商:
? 协商的过程就是讨论需求冲突,找出每个人都满意的折衷方案
? 协商不是简单的逻辑或技术上的争论
? 通常会议是解决冲突最快的方式
? 参加者应该包括发现冲突、遗漏或重叠的分析员,以及可以解决发现的问题的项目相关人员
? 会议应该讨论那些非正式讨论不能解决的问题
3)需求建模:
? 在软件需求分析阶段,所创建的模型,要着重于描述系统要做什么,而不是如何去做
? 目标软件的模型不应涉及软件实现细节
? 常用的分析方法:
??面向数据流的结构化分析方法 (SA)
??面向数据结构的分析方法
??面向对象的分析方法 (OOA)
4、需求规约与验证
1)需求规约的原则:
?从现实中分离功能,即描述要“做什么”而不是“怎样实现”
? 规约必须包括系统运行环境
? 规约必须是可操作的,以便能够利用它决定对于任意给定的测试用例,已提出的解决方案是否都能满足规约
? 规约必须允许不完备性并允许扩充
? 规约必须局部化和松散耦合
2)需求验证:
? 需求验证目的是要检验需求是否能够反映用户的意愿
5、需求管理
【题目】
1)相比硬件而言,软件更容易被修改,而且更容易被正确地进行修改(错误)
2)任何软件开发过程必须从软件需求入手。(正确)
3)非功能性需求必须依附于功能需求而存在。(正确)
4)下列需求属于性能需求的是(A)
A、并发访问数 B、网络协议 C、异常响应 D、用户友好
5)下列属于外部接口需求的是(A)
A、第三方插件 B、安全隐私 C、编程语言 D、字体字号
6)下列属于设计约束的是(B)
A、响应时间 B、运行平台 C、错误处理 D、可维护
7)质量属性必须要给出量化的测量指标(正确)
8)小组会和交流这两种需求发现方式的区别在于参加人员的多少(错误)
9)需求发现长采用多种方式联合进行,但具体某一项需求常采用某一种具体的方式去捕获。(错误)
10)需求规约是一个软件产品/系统的(概念模型)
11)需求规约是一个软件产品所有需求陈述的正式文档,它是不能够被修改的(错误)
12)需求规约是软件开发组织和用户之间的技术合同书,只有当需求规约完成后才能开始产品的设计(正确)。
13)在需求分析阶段会形成(确认测试)的测试计划

四、软件设计

1、软件设计的任务
1)软件设计是把软件需求变为软件的具体方案
2)软件设计包括两个阶段:概要设计和详细设计
?概要设计根据软件需求所确定的信息流程或信息结构,导出软件的总体表示—-数据结构、软件体系结构、接口
?详细设计是对概要设计的细化,详细设计模块的实现算法、所需的局部软件结构
3)软件设计的任务:
? 数据/类设计:将分析-类模型变换成类的实现和软件实现所需要的数据结构
? 体系结构设计:体系结构设计定义了软件的主要结构元素以及相互之间的关系
? 接口设计:接口设计描述了软件内部、软件和协作系统之间以及软件同人之间如何通信
? 部件级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述
2、软件设计的目标
? 满足用户需求
? 必须实现分析模型中所有的显式需求
? 必须满足用户希望的所有隐式需求
? 可读、可理解:设计必须是可读、可理解的,使得将来易于编程、易于测试、易于维护
? 全面性:应从实现角度出发,给出与数据、功能、行为相关的软件全貌
3、软件设计的原则
?抽象:考虑高层问题时忽略低层细节
?逐步求精:不断接近问题的完整解
?模块化:将系统划分为相对独立但又有所关联的多个部分
?信息隐藏:对其它模块隐藏内部细节
?模块独立:模块功能相对独立—高内聚/低耦合
耦合性排序:内容耦合>公共耦合>控制耦合>标志耦合>数据耦合>无耦合
内聚性排序:功能内聚、顺序内聚>信息内聚>时间内聚、逻辑内聚、偶然内聚
4、软件体系结构设计
软件体系结构关注系统的一个或多个结构,包含软件部件、部件对外可见的属性以及部件间的关系 。
5、部件级设计
部件:模块、类、构件
部件级执行过程的描述方法:图形描述(程序流程图、盒图、问题分析图)、语言描述(设计性的语言)、表格描述(判定表)
6、设计规约与设计评审
评审分正式评审和非正式评审两种
【题目】
1)软件设计一般可分为总体设计和详细设计,他们之间的关系是(全局和局部)
2)结构化设计是一种面向(数据流)的设计方法。
3)软件概要设计结束后得到(优化的软件结构图)
4)模块独立性是软件模块化所提出的要求,衡量模块独立性的度量标准是模块的(内聚性和耦合性)
5)模块的独立性是由内聚性和耦合性来度量的,其中内聚性是(模块的功能强度)
6)模块的(耦合越弱),说明模块的独立性越强
7)一个模块把一个数值量作为参数传送给另一个模块,这两个模块的耦合是(数据耦合)
8)一个模块直接引用另一个模块中的数据,这两个模块之间的耦合是(内容耦合)
9)一个模块把开关量作为参数传送给另一个模块,这两个模块之间的耦合是(控制耦合)
10)为了提高模块的独立性,模块内部最好(功能内聚)
11)将几个逻辑上相似的成分放在一个模块中,该模块的内聚是(逻辑性)的
12)模块内的某成分的输出是另一成分的输入,该模块的内聚是(顺序性)的
13)一组语句在程序中多次出现,为了节省内存空间,把这些语句放在一个模块中,该内聚是(偶然性)
14)模块中所有的成分引用共同的数据,该模块的内聚性是(通信性)的
15)在详细设计阶段,一种二维树型结构并可自动生成程序代码的描述工具是(PAD)
16)结构化程序设计主要强调的是(程序的易读性)
17)(DFD)工具在详细设计阶段不采用
18)结构化程序设计的一种基本方法是(逐步求精法)

五、结构化分析与设计

1、结构化方法:一种面向数据流的传统软件开发方法
1)以数据流为中心构建软件的分析模型和设计模型分为:
??– 结构化分析(Structured Analysis 简称SA)
??– 结构化设计(Structuresd Design 简称SD)
??– 结构化程序设计(Structured Programmin 简称SP)
2)结构化分析模型的描述:
??? 数据字典:它包含了软件使用和产生所有数据的描述
??? 数据流图:用于功能建模,描述系统的输入数据流如何经过一系列的加工变换逐步变换成系统的输出数据流
??? 实体—关系图(ER):用于数据建模,描述数据字典中数据之间的关系
??? 状态转换图(ST):用于行为建模,描述系统接收哪些外部事件,以及在外部事件的作用下的状态迁移情况。控制规约用来描述软件控制方面的附加信息。
3)结构化分析方法的分析结果:
??一套分层的数据流图(DFD)
??一本数据字典(包括E-R图)
??一组加工规约
??其他的补充材料(如非功能需求等)
4)数据流图:DFD描述输入数据流到输出数据流的变换(即加工)过程,用于对系统的功能建模。
2、结构化设计SD:
1)概要设计:体系结构设计MSD,接口设计,数据设计
2)详细设计:模块内部设计(算法和数据结构)
3)结构化设计步骤:
??? 建立初始结构图
????– 将整个软件看作一个大的功能模块,通过功能分解不断将其分解成若干个较小的功能模块,直至得到一组不必再分解的模块(结构图中的底层模块)
??? 对结构图进行改进
????– 可根据设计准则和启发式设计策略对初始结构图进行改进
??? 书写设计文档
???? – 书写设计规格说明,特别要为每个模块书写模块的功能、接口、约束和限制等
??? 设计评审
【题目】
1)结构化方法包括了( ACD)
A、结构化分析方法
B、结构化项目管理方法
C、结构化设计方法
D、结构化程序设计方法
2)需求分析的目标不包括(C )
A、解决需求陈述中的歧义
B、作为开发人员和客户间技术契约的基础
C、给出解决问题的具体算法和数据结构
D、给出问题的形式化阔半形式化的描述
3)结构化分析模型中,支持数据抽象的是哪些(AB)A、数据流 B、数据存储 C、数据源 D、数据潭 E、加工
4)结构化分析方法使用DFD描述(系统的功能)
5)在结构化分析方法中,与数据流配合使用的是(数据字典)
6)通过(功能分解)可以完成数据流图的细化
7)以下说法正确的是(ACD)
A、数据流图中的每个数据流和数据存储必须在数据字典中予以定义
B、数据流图中的每个加工必须在加工小说明中予以定义
C、数据流图中的图元个数应当控制在7±2以内
D、加工小说明中,必须指出该加工的输入数据流和输出数据流。
8)模块结构图中,如果两个模块之间有直线连接,表示他们之间存在(调用)关系。
9)所有的数据流图都可以看作变换数据流图。( 正确)
10)对于变换设计的基本步骤,正确的顺序是( 3)1)2)4))。
1)确定输入、变换、输出三部分之间的边界
2)系统模块结构图顶层和第一层的设计
3)复审并精化系统需求模型
4)自顶向下,逐步求精
11)软件概要设计结束后得到(精化的模块结构图)
12)划分模块时,一个模块的( 作用范围应在其控制范围内)
13)设计人机交互的界面时,应该遵循一定的设计原则,不包括(增加复杂的功能)
14)系统日志用文件存储是因为其信息比较松散(正确 )

六、面向对象分析与设计

1、面向对象的基本概念:一种特定的软件开发方法学
2、UML:是一种可视化语言,也是一种半形式化语言,类似一个工具包
1)需求获取层表达模型的工具:usecase图
??需求分析层表达模型的工具:类图、交互图等
??设计层表达模型的工具:类图、交互图等
2)用况图:描述参与者与用况(参与者使用系统以实现某一特定目标的情形)之间的关联关系,以及用况之间的扩展、继承等关系。
??用况建模的步骤:定义系统->确定执行者->确定用况->描述用况->定义用况间的关系->确定模型
确定用况之间的关系:
??参与者与用例之间——关联关系(执行者与他所参与的一个用况之间的通信途径。),实线表示
??参与者与参与者之间——泛化关系(在某种情况下,一个用例可能有几种不同的分支。泛化可以用来将一个复杂的用例分成几个可管理的小块),实线+空心箭头
??用例与用例之间——泛化关系、包含关系(指一个用例永远地包含在另一个用例中。由一个基本用例指向扩展用例的带箭头的虚线来表示)、扩展关系(允许一个用例可选地包含或者基于另一个用例。由一个扩展用例指向基本用例的带箭头的虚线来表示。)
3)类图:展现一组类、接口以及它们相互之间的关系
4)对象图:展现一组对象以及相互之间的关系,是依照类图所建立的一组事物(实例)的静态快照
5)构件图:描述构件、接口以及构件间的组装关系的静态视图,复合构件本身可以由内部的子构件图描述
6)组合结构图:展示了类或协作的内部结构,与构件差别不大,经常认为与构件图等同
7)顺序图:描述特定场景下交互各方消息发送和接收的顺序
8)通信图:另一种交互图,强调交互上下文:参与交互的对象或角色的结构组织
9)状态机图:以状态机的形式描述目标对象在各种事件作用下的行为
10)活动图:描述一系列活动之间的控制流和数据流
活动图中的基本要素:活动、转移、分支、分叉和汇合、泳道、对象流等
11)部署图:描述系统运行时各相关处理单元结点、各结点上部署的构件、以及相互间的通信协议
12)包图:描述包(一种模型分解单位)以及包之间的关系
3、面向对象的分析与设计(OOAD)
1)“面向对象”思考方式的核心特征
??封装:封装(encapsulation)是一种信息隐蔽技术,用户只能看见对象封装界面上的信息,对象的内部实现对用户是隐蔽的。封装的目的是使对象的使用者和生产者分离,使对象的定义和实现分开。一个对象通常可由对象名、属性和操作三部分组成。
??继承:继承是类间的基本关系,它是基于层次关系的不同类共享数据和操作的一种机制。父类中定义了其所有子类的公共属性和操作,在子类中除了定义自己特有的属性和操作外,可以继承其父类(或祖先类)的属性和操作,还可以对父类(或祖先类)中的操作重新定义其实现方法
??多态:多态性是指同一个操作作用于不同的对象上可以有不同的解释,并产生不同的执行结果。例如“画”操作,作用在“矩形”对象上,则在屏幕上画一个矩形,作用在“圆”对象上,则在屏幕上画一个圆。也就是说,相同操作的消息发送给不同的对象时,每个对象将根据自己所属类中定义的这个操作去执行,从而产生不同的结果
2)聚合/组合:
聚合is a
组合has a
3)面向对象分析OOA
??最终目的是产生一个符合用户需求,并能够直接反映问题与和系统责任的OOA模型及其规约。
4)面向对象设计OOD
??OOD按实现条件对OOA模型进行调整,并补充几个新的组成部分(人机交互部分、驱动控制部分、数据管理部分)
5)CRC(Classes,Responsibilities,Collaborations)方法标识概念类
【题目】
1)在面向对象方法的描述中,对于客观事物的描述,其静态特征用对象的(属性)来表示。
2)面向对象就是一种使用面向对象程序设计语言的程序开发方法。(错误)
3)以下说法正确的是(ACD)
A、采用面向对象方法开发软件的主要优点是通过重用提高软件的生产率
B、在面向对象程序中,对象是属性和方法的封装体
C、在面向对象程序中,对象彼此间通过继承和多态性启动相应的操作
D、继承和多态机制是面向对象程序中实现重用的主要手段。
4)UML不具备以下哪个结构(D)
A、静态对象结构 B、系统部署 C、动态行为 D、功能结构
5)首次提出“面向对象”概念的计算机科学家是(艾伦.凯)
6)在对象分类过程中,对于属性及操作相似的类需要考虑能够抽象出一个一般类或部分类(正确)
7)实现条件对OOD模型问题域部分影响最大的是(编程语言)
8)数据管理部分主要目的是为系统中的(长久存储的对象)提供数据存储和恢复功能。

七、软件测试

1、软件测试基础
1)软件测试的目的:用尽可能少的测试用例,来发现尽可能多的软件错误
2、白盒测试:把测试对象看作一个透明的盒子,测试人员根据程序内部的逻辑结构及有关信息设计测试用例,检查程序中所有逻辑路径是否都按预定的要求正确地工作。
1)测试方法:逻辑覆盖测试(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖)、基本路径覆盖测试(程序的控制流图)、数据流测试、循环测试
3、黑盒测试:把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能需求
1)主要的黑盒测试方法有:等价类划分,边界值分析,比较测试,错误猜测,因果图。
4、测试策略:把软件测试用例的设计方法集成到一系列经周密计划的步骤中去,从而使软件的测试得以成功的完成。

来源:是木槿花啊

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年2月21日
下一篇 2021年2月21日

相关推荐