软件工程四个阶段
软件工程是什么
瀑布模型
优点
缺点
特点
适用于
快速原型模型
优点
减少设计中的错误和开发中的风险,也减少了对用户培训的时间
缩短了开发周期,加快了工程进度 降低成本
缺点
原型被建造仅仅是用户用来定义需求,之后便部分或全部抛弃,
最终的软件是要充分考虑了质量和可维护性等方面之后才被开发
特点
可视化,强化沟通,降低风险,节省后期变更成本,提高项目成功率
适用于
用户不能给出完整、准确的需求说明
不能预先确切定义需求
增量模型
优点
缺点
特点
适用于
喷泉模型
优点
缺点
特点
适用于
螺旋模型
简化的螺旋模型
完整的数据模型
优点
缺点
特点
适用于
rup模型
优点
缺点
特点
适用于
软件生存期
软件定义、软件开发、软件维护
软件危机
软件开发和维护过程中所中遇到的这一系列严重问题为软件危机.
它的表现是什么
绘画数据流图【大题】
数据流图的四要素
数据流图的概念
数据字典
设计五大准则
耦合和内聚
七种耦合七种内聚的优先顺序重要顺序
非直接耦合:如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强
数据耦合 (Data Coupling):如果一个模块访问另一个模块时,彼此之间是通过简单数据参数 (不是控制参数、公共数据结构或外部变量) 来交换输入、输出信息的,则称这种耦合为数据耦合。
标记耦合 (Stamp Coupling):如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。
控制耦合:如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
外部耦合(External Coupling):一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
公共耦合(Common Coupling):若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
内容耦合 (Content Coupling):如果发生下列情形,两个模块之间就发生了内容耦合
信息内聚 (Informational Cohesion)
这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。
通信内聚 (Communication Cohesion)
如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。
过程内聚(Procedural Cohesion) 使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。
时间内聚(Temporal Cohesion)时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。
逻辑内聚这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。
巧合内聚 巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。
软件结构图【大题】
扇入扇出:
模块作用域控制域
启发式规则:
面向对象的需求分析:
什么是UML
“统一建模语言”,是一种面向对象的建模语言
20世纪70年代中期产生了面向对象的软件开发方法,面向对象的分析(OOA)和面向对象的设计(OOD)方法已逐渐取代了传统的方法,成为我国当前计算机软件工程学中的主流方法。
特点
组成:
4种元素:
结构元素:类、接口、协作、用例、活动类(也称主动类)、组件(也称构件)和节点。
行为元素:交互作用和状态机
交互作用:一组对象之间为完成某一任务(如实现某个操作)而进行的一系列消息交换的行为. 在UML图中,交互的消息通常画成带箭头的直线。
状态机:对象为响应事件而经历的一系列状态以及对事件作出响应的行为。包括状态、跃迁 、事件等。
分组元素:在UML中的作用是组织其他元素。
注释元素:是UML模型的解释部分。这些注释元素用来描述、说明和标注模型中的任何元素。只有一种注释元素,称为注解 。
用例图【大题】:
从用户角度描述系统功能,并指出各功能的操作者
参与者与用例之间
关联关系:描述参与者与使用用例之间的关系。在UML中,关系用实线表示,实线可以有箭头,也可以没有箭头。
用例与用例之间
包含关系 (include)
包含关系中一个用例总是使用另一个用例的功能
如果两个以上用例有大量一致的功能,则可以将这个功能分解到另一个用例中。
一个用例的功能太多时,可以用包含关系建模两个小用例。
包含关系中基用例本身是不完整的。
扩展关系 (extend)
扩展关系允许一个用例(可选)扩展另一个用例的功能。
当某个新用例在原来的用例基础上增加了新的步骤序列,则原用例被称作基用例,这种关系被称为扩展关系。
基用例可以单独存在,但在一定的条件下,他的行为可以被另一个用例的行为延伸。扩展只能发生在基用例的序列中某个特定的点上,这个点叫扩展点。
泛化关系 (generalization):
泛化关系其实是子类与父类的关系。象类之间的泛化关系一样,用例和参与者也可以继承另一个用例和参与者。
参与者与参与者之间
泛化关系 (generalization)
用例命名:动词 + 宾语
事件流:
事件流是通过文字描述一个用例的行为,说明用例的逻辑流程。发起用例的参与者是谁,用例的前置条件是什么,主事件流,其他事件流和完成后的后置条件是什么,从用例中获益的参与者是谁。
事件流包括:简要说明、前置条件、主事件流、其他事件流和后置条件
时序图【大题】:
协作图【大题】:
类图【大题】:
类图用于定义系统中的类。包括描述类之间的关系(如:关联、依赖、泛化、聚合等)以及类的内部结构(即类的属性和操作)。类图描述的是系统中类的静态结构,在系统的整个生命周期都是有效的。
依赖关系:
指一个元素的变化将影响另一个元素或向接收者提供信息。
例如,对于两个对象X、Y,如果对象X发生变化,可能会引起对另一个对象Y的变化,则称Y依赖于X。通常,X在Y的方法的参数中。
泛化关系:
UML中的泛化关系(也称类属关系)定义了一般元素和特殊元素之间的分类关系,与C++及Java中的继承关系有些类似。
泛化是一般事物(称为超类或父类)和该事物的较为特殊的种类(称为子类)之间的关系,子类继承父类的属性和操作,除此之外通常子类还添加新的属性和操作,或者修改了父类的某些操作。
关联关系
聚合关系
组合关系:
类的三种类型:
实体类(entity)
边界类(boundary)
控制类(control)
能设计类的属性和方法(可见性,数据类型,返回值要写全)
类的设计:
UML中类属性的语法为:
[可见性] 属性名[:类型][=初值]
可见性的表示形式:
UML中类操作的语法为:
[可见性] 操作名 [(参数列表)] [:返回类型]
PAD图
流程图(计算环形复杂度,写出测试路径,测试用例)
NS图
(1)测试是为了发现程序中的错误而执行程序的过程;
(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;
(3)成功的测试是发现了至今为止尚未发现的错误的测试
黑盒测试技术(边界值分析】等价类划分】错误推测法基本思想)
思路:将程序输入域划分成若干个部分,即子集,然后从每个子集中选取具有代表性的数据作为测试用例。
等价类的划分在很大程度上依靠的是测试人员的经验,下面给出几条基本原则:
(1)输入条件的取值范围 (2)输入数据的个数限定
(3)相同处理的一组输入 (4)无效的等价类
(5)空值检查
例:输入条件说明学历可为:专科、本科、硕士、博士四种之一,则分别取这四种这四个值作为四个有效等价类,另外把四种学历之外的任何学历作为无效等价类。
(1)为每个等价类编号。
(2)设计新的测试用例,使它能包含尽可能多的尚未被覆盖的“有效”等价类。重复这一过程,直到所有的有效等价类都被覆盖。
(3)设计新的测试用例,使它包含一个尚未被覆盖的“无效”等价类。重复这一过程,直到所有的无效等价类都被覆盖。
边界值分析
错误推测法
白盒测试技术(写测试用例、逻辑覆盖法、基本路径测试等测试方法)
将程序看作是一个透明的盒子,也就是说测试人员完全了解程序的内部结构和处理过程。所以测试时按照程序内部的逻辑测试程序、检验程序中的每条通路是否都能按预定的要求正确工作。白盒测试又称为结构测试
利用白盒测试设计测试用例时,应包括以下三类测试:
(1)语句测试:要求程序中的每个语句至少测试一次
(2)分支测试:要求程序中的每个分支至少测试一次
(3)路径测试:要求程序中的每条路径至少测试一次
逻辑覆盖法
基本路径测试法
维护是什么:软件维护就是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
四种维护:
五个步骤:
Step 1. 建立维护组织
Step 2. 填写维护申请报告: 是由软件组织外部提交的文档,它是计划维护活动的基础。软件组织内部应依此制定相应的软件修改报告,这个报告包括以下内容:
(1)为满足某个维护申请要求所需的工作量;
(2)所需修改变动的性质;
(3)申请修改的优先级;
(4)与修改有关的事后数据。
软件修改报告应提交修改负责人进行审核批准,以便进行下一步工作。
Step 3.维护的工作流程
Step 4. 软件维护记录:维护记录中的内容有下述的项目表:
(1)程序名称;
(2)源程序语句条数; (3)机器代码指令条数;
(4)使用的程序设计语言;(5)程序的安装日期;
(6)程序安装后的运行次数;
(7)与程序安装后运行次数有关的处理故障的次数;
Step 5. 维护评价
(1)每次程序运行时的平均出错次数;
(2)用于每一类维护活动的总“人时”数;
(3)每个程序、每种语言、每种维护类型所做的平均修改数;
功能点技术(输入信息】数据输入越多工作量越大)
Step 1. 确定信息域:
(1) 输入项数(Inp) :用户向软件输入的项数
(2) 输出项数(Out) :软件向用户输出的项数
(3) 查询数(Inq) :查询即是一次联机输入,它导致软件以联机输出方式产生某种即时响应。
(4) 主文件数(Maf) :逻辑主文件(即数据的一个逻辑组合,它可能是大型数据库的一部分或是一个独立的文件)的数目。
(5) 外部接口数(Inf) :机器可读的全部接口(例如,磁盘或磁带上的数据文件)的数量,用这些接口把信息传送给另一个系统。
Step 2. 估算功能点数(即软件规模)
用下述3个步骤,可估算出一个软件的功能点数(即软件规模)
(1)计算未调整的功能点数UFP
UFP=a1×Inp+a2×Out+a3×Inq+a4×Maf+a5×Inf
其中,ai(1≤i≤5)是信息域特性系数
(2)计算技术复杂性因子TCF.
TCF=0.65+0.01×DI 其中,DI是技术因素对软件规模的综合影响程度
(3)计算功能点数FP
FP = UFP × TCF
面向FP的估算模型
(1)Albrecht & Gaffney模型:E=-13.39+0.0545FP
(2) Maston,Barnett & Mellichamp模型:E=585.7+15.12FP
成本核算(cocomo2,三个层次都是什么,工作原理工作思路)
构造性成本模型
(1) 应用系统组成模型。这个模型主要用于估算构建原型的工作量,模型名字暗示在构建原型时大量使用已有的构件。
(2) 早期设计模型。这个模型适用于体系结构设计阶段。
(3) 后期体系结构模型。这个模型适用于完成体系结构设计之后的软件开发阶段。
软件质量保证
人员组成形式(民主形式】主程序员组形式等)
软件配置管理是什么(5个任务4个活动是什么)
cmm能力成熟度模型的5个级别(分别叫什么】描述分别是什么)
软件过程的特征是无序的,有时甚至是混乱的。几乎没有什么过程是经过定义的(即没有一个定型的过程模型),项目能否成功完全取决于开发人员的个人能力。
可重复级(又称为2级):
软件机构建立了基本的项目管理过程(过程模型),可跟踪成本、进度、功能和质量。
已经建立起必要的过程规范,对新项目的策划和管理过程是基于以前类似项目的实践经验,使得有类似应用经验的软件项目能够再次取得成功。
达到2级的一个目标是使项目管理过程稳定,从而使得软件机构能重复以前在成功项目中所进行过的软件项目工程实践。
已定义级(又称为3级):
软件机构已经定义了完整的软件过程(过程模型),软件过程已经文档化和标准化。所有项目组都使用文档化的、经过批准的过程来开发和维护软件。这一级包含了第2级的全部特征。
已管理级(又称为4级)
软件机构对软件过程(过程模型和过程实例)和软件产品都建立了定量的质量目标,所有项目的重要的过程活动都是可度量的。
该软件机构收集了过程度量和产品度量的方法并加以运用,可以定量地了解和控制软件过程和软件产品,并为评定项目的过程质量和产品质量奠定了基础。- 这一级包含了第3级的全部特征。
优化级(又称为5级)
软件机构集中精力持续不断地改进软件过程。这一级的软件机构是一个以防止出现缺陷为目标的机构,它有能力识别软件过程要素的薄弱环节,并有足够的手段改进它们。
在这样的机构中,可以获得关于软件过程有效性的统计数据,利用这些数据可以对新技术进行成本/效益分析,并可以优化出在软件工程实践中能够采用的最佳新技术。
这一级包含了第4级的全部特征。
rationalrose可以画哪些图(比方用例图)基本功能是什么