复试篇---软件工程

软件:软件由计算机程序、数据、文档组成

什么是软件工程:
把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。

总体设计:把软件需求转化为数据结构和系统结构。对系统进行系统设计和结构设计。

软件危机:软件费用、软件周期、软件可靠性、软件重用性、软件维护、开发文档、用户要求。
产生软件危机的原因:规模大、结构复杂;开发管理困难;开发费用高;开发技术落后

黑盒测试和白盒测试:
黑盒:把测试对象看做是一个黑盒,不考虑程序的逻辑结构和内部特性,检查程序的功能是否符合它的功能说明。
黑盒测试也叫功能性测试。

白盒测试:

文档在软件工程中的作用:

提高开发流程的可见度和效率;可作为阶段性成果和结束标志;便于后期对软件的维护;便于用户使用

试比较结构化软件工程方法和面向对象软件工程方法的优缺点?

结构化方法学又称生命周期方法学。该方法将开发计划划分为若干个阶段(若干个生命周期),采用结构化方法(结构化分析、结构化设计、结构化编程)。优点是每个阶段都可以进行代码审查,方便开发工作的进行,缺点是开发周期较长。

面向对象方法把对象作为统一的软件结构。尽量模拟人的思考行为。方便软件的重用。

思想上:
对于结构化方法,模块由函数实现,完成对输入数据的加工和计算,数据和功能是分离的;而面向对象把数据和功能封装在对象中,形成一个整体。两种方法在数据和功能上的不同处理是其思想上的本质差别。

和模块相比,对象最大的不同是具有“活性”,突出表现在对象具有状态和对象间能够通讯

从设计方面,我们可以比较明显地看出结构化和面向对象的区别。结构化方法的核心是程序,从分析到设计,其实是从抽象到具体,从模糊到清晰地实现程序的过程;而面向对象方法的核心是功能,分析的是对象,设计的是行为,程序设计和系统设计相对分离。

结构化方法的建模工具难以表达交互性强的软件系统,程序设计融入系统的分析和设计中,处理大型系统时会过于复杂,甚至很难控制;面向对象方法的抽象机制提供了自然的建模方法,特别是能很好地把握对象之间复杂的相互关系。

好的程序编码风格

(1)程序内部有很好的文档
(2)数据说明应该易于理解和查阅
(3)语句构造应简单直观
(4)输入输出符合要求
(5)效率

软件生命周期

软件定义、软件开发、软件运行维护
定义阶段:问题定义、可行性研究、需求分析
开发阶段:总体设计、详细设计、编码与单元测试、综合测试

具体任务要解决的问题:
问题定义:要解决的问题是什么
可行性研究:这个问题有没有可以解决的方法
需求分析:为了解决这个问题、系统应该做什么

常见的软件过程模型

瀑布模型:
自上而下,按照文档驱动。优点:方法规范。缺点:缺乏灵活性,适应不了用户需求的变化

快速原型模型:
快速开发出一个原型系统,让用户可以初步使用。得知用户的需求后,后续再改正。优点是可以知道用户的需求。

增量模型:
分批向用户提交产品,整个产品被分为很多个增量构件。
优点:可以在较短的时间向用户提交部分产品,开发人员有充足的时间去学习。
缺点:对体系的设计要求高,软件必须是开放结构,构件必须是可拓展的。

螺旋模型:
相当于在快速原型的基础上加入了风险评估。在软件开发前必须进行风险评估,是风险驱动的过程。

可行性研究

目的:以最小的代价、在尽可能短的时间里确定问题是否可以解决,从经济可行性,技术可行性,法律可行性和操作可行性等方面评价系统是否值得做。

描述系统的基本功能和约束工具:
数据流图和数据字典

数据流图是系统逻辑功能的图形表示,描绘信息流和数据从输入到输出过程中所经受的变换
构造数据流图的步骤:
确定源点和终点;处理;数据流和数据存储

数据字典是对数据流图中包含的所有元素定义的集合。

结构化方法学–需求分析

需求分析包含的任务:需求获取、需求建模、规格说明、需求验证

需求获取:刻画出软件的性能、功能,指出软件与其他系统的接口、建立软件必须满足的约束

传统的软件工程方法学中,结构化分析技术通常建立数据模型、功能模型和行为模型。使用实体-联系图建立数据模型,使用数据流图建立功能模型,使用状态图建立行为模型

结构化方法学–总体设计:

软件设计包括数据设计、体系结构设计、接口设计、过程设计

软件设计分为两步–总体设计和详细设计

总体设计的过程:(1)系统设计:确定系统的具体物理实现方案(2)结构设计:设计软件结构

基本的软件设计原理:
模块化
抽象:过程抽象、数据抽象、控制抽象
逐步求解
信息隐藏和局部化
模块独立

模块的作用域要包含在控制域之内

结构图:是进行软件结构设计的一个有力工具。一个方框代表一个模块,模块内部有名字,方框之间的箭头表示模块间的调用关系。

数据处理类型:变换流和事务流
变换流分为输入、主模块,变换、输出
事务流分为接收,事务控制,分派模块

结构化设计方法是一种面向数据流的设计方法,并基于模块化、自顶向下细化、结构化程序设计等技术,并可与结构化分析方法衔接

结构方法学 --详细设计

详细设计阶段最重要的任务就是过程设计和界面设计(开始编码)

过程设计工具:
图形工具:
程序流程图、
N-S(盒图):优点–功能域明确,很容易实现嵌套和功能域关系
PAD:树形分析图,优点:将这种图翻译成程序代码比较容易

程序复杂性度量
McCabe环路复杂性度量:
(1)V = 区域数 + 最外部
(2)V = 判断节点 +1,判断节点是指有两个输出

平均无故障时间:MTTF = 1/(K[(Et - Ec) / I]),
与单位长度的指令中剩余的错误数成反比

结构化方法学–软件测试

编码风格:
程序内部的文档;数据说明;语句构造;输入输出;效率

软件测试和程序调试有什么区别:
(1)测试是为了发现错误,并没有解决这个错误。而程序调试是排错的过程,具有修正错误的功效。

(2)测试是有计划的,需要进行测试设计;调试是不受时间约束的。

(3)测试经常是由独立的测试组在不了解软件设计的条件下完成的;调试必须由了解详细设计的开发人员完成。

测试的阶段与策略:
单元测试–边界条件、模块接口、出错处理
集成测试–包括回归测试
确认测试–a测试:着重表现对产品功能的测试、b测试:着重表现用户对产品的使用情况,属于确认测试的最后一道测试
系统测试–对计算机系统进行一系列的组装测试和确认测试
验收测试–

白盒测试与黑盒测试
白盒测试和黑盒测试是软件测试的两类基本方法。白盒测试技术主要有逻辑覆盖、基本路径测试和控制结构测试;黑盒测试技术主要有等价划分、边界值分析和错误推测。

软件可靠性:软件可靠性是程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。
估计程序的可靠性方法:
(1)植入错误法
(2)分别错误法

平均无故障时间

语句覆盖:使所有的判断语句都能执行一次的条件案例,例如当判断语句事组合语句的时候,并且用or连接,只满足一个案例即可。通常采用全为真,全为假

路径覆盖:覆盖所有执行路径。

面向对象方法学

面向对象的开发模型将系统开发分为面向对象分析(OOA),面向对象设计(OOD)和面向对象编程(OOP)三个阶段

你可能感兴趣的:(复试)