1、1.什么是软件危机,为什么会产生软件危机答:软件危机:计算机软件的开发和维护过程中所遇到的一系列严重问题。 (正常、不正常运行软件都具有这种问题)原因:1)软件本身特点造成;2)软件开发与维护的方法不正确。主要表现:(a)忽视软件需求分析;(b)认为软件开发就是写程序并使之运行;(c)轻视软件维护;2.软件工程方法学(传统方法学(结构范型) )答:通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。软件工程方法学的 3 要素:方法、工具和过程。传统方法学也称为生命周期方法学或结构化范型。结构化方法有:1)结构化设计方法;2)结构化分析方法;3)结构化分析与设计技术 4
2、)JACKSON 方法 5)WARNIER 方法3.软件生存周期的定义,包含的阶段。答:软件生命周期:指软件从提出到最终被淘汰的这个存在期。软件生命周期组成:1)软件定义;A.问题定义 B.可行性研究 C.需求分析 2)软件开发;D.总体设计 E.详细设计 F.编码和单元测试 G.综合测试 3)运行维护。软件生命周期各个阶段:1.问题定义;2.可行性研究;3.需求分析;4.总体设计(概要设计) ;5.详细设计;6.编码与单元测试;7.综合测试;8.维护。4 生命周期模型各自的基本思想是什么。答:瀑布模型 1 阶段间具有顺序性和依赖性 2.推迟实现的观点 3 质量保证的观点。优点:采用规范的方法
3、;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证。快速原型模型优点:不带反馈环,基本上是线性顺序进行。增量模型优点:能较短时间内提交可完成部分工作的产品;可以使用户有充裕的时间学习和适应新产品。螺旋模型:可把它看作在每个阶段之前都增加风险分析的快速原型模型。喷泉模型:典型的面向对象软件开发过程模型之一。Rational 统一过程:1. RUP 软件开发经验(1)迭代式开发(2)管理需求(3)使用基于构件的体系结构(4)可视化建模(5)贯穿于开发过程的软件质量验证(6)控制软件变更敏捷过程与极限编程 1.敏捷过程:具有高效、快速响应变化的开发过程。 (1)个体和交互胜过过程和工具
4、;(2)可以工作的软件胜过面面俱到的文档;(3)客户合作胜过合同谈判;(4)响应变化胜过遵循计划。2.极限编程:敏捷过程中最著名的一种,指把好的开发实践运用到极致,多应用于软件需求模糊的场合。微软过程:1.微软过程准则 2.微软软件生命周期( 1)规划阶段(2)设计阶段(3)开发阶段(4)稳定阶段(5)发布阶段 3.微软过程模型1.需求分析的任务是什么答:一.确定对系统的综合要求 1功能需求 2性能需求 3. 可靠性和可用性需求 4. 出错处理需求 5. 接口需求 6. 约束 7. 逆向需求 8. 将来可能提出的要求 二. 分析系统的数据要求通过建立数据模型来分析,如数据字典、层次方框图、Wa
5、rnier 图,并将数据结构规范化。三. 导出系统的逻辑模型包括完善的数据流图、实体联系图、状态转换图、数据字典、主要的处理算法(IPO 图)等。四. 修正系统开发计划修订前期制定的开发进度计划、等。2.需求规格说明书由那些部分构成答:(1) 引言:编写目的、背景说明、术语定义及参考资料等。(2) 概述主要功能、约束条件或特殊需求。(3) 数据流图与数据字典。 (4) 用户接口、硬件接口及软件接口。(5) 性能需求、属性等。(6) 其它需求,如数据库、操作及故障处理等。3.数据字典:数据字典:对数据流图中包含的所有元素的定义的集合;可行性研究阶段,数据流图与数据字典共同构成系统的逻辑模型。数据
6、字典的内容数据字典应该对下列元素进行定义:1)数据流;2)数据元素(数据流分量) ;3)数据存储;4)处理。定义数据的方法 1)数据元素字典定义:其定义的基本内容有:A 数据元素编号、名称及其含义;B数据类型和长度;C合理取值;D 其他内容,如它与其它数据的逻辑关系等。1.设计原理答 1 模块化 2 抽象 3 逐步求精 4 信息隐蔽和局部化 5 模块独立:模块的独立性很重要,因为:1)有效的模块化的软件比较容易开发出来;2 )独立的模块比较容易测试和维护。模块独立程度可以由两个定性标准度量:耦合与内聚。耦合:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。 模块的偶合分四类:1)数据耦
7、合 2)控制耦合 3)公用耦合 4)内容耦合内聚:一个模块内部各个元素彼此结合的紧密程度。它是衡量一个模块内部组成部分间整体统一性的度量。常见的内聚有七类。 1)功能内聚 2)顺序内聚 3)通信内聚 4)过程内聚 5)时间内聚 6)逻辑内聚 7)偶然内聚 软件设计中应该:力求做到高内聚,尽量少用中内聚,不用低内聚。 2.面向数据流的设计方法答:面向数据流设计是与数据流分析对应的结构化软件设计技术。 面向数据流的设计将得到以数据流图为基础的软件模块结构图。 1 变换流与事务流:数据流可以分为两种类型:1)变换型数据流 2)事务型数据流 2 面向数据流设计的步骤:1)复审并精化数据流图;2)确定数
8、据处理流图的类型;3)确定变换中心或事务中心;4)将数据流图映射成软件模块结构图,设计出该数据流图对应的第一层模块结构;5)基于数据流图逐步分解,设计下层模块;6)运用模块设计和优化准则优化软件结构;7)描述模块的接口。3 变换设计:变换设计就是从变换型数据流图映射出软件模块结构的过程,也称以变换为中心的设计。变换设计的基本方法有两步:1)分解第一层模块结构 2)分别设计输入、输出和处理的下层模块结构4 事务设计:事务设计就是从事务型数据流图映射出软件模块结构的过程,也称为以事务为中心的设计。事务设计的基本方法有两步:1)建立主控模块、接收输入类型分析模块和事务调度模块;2)分别设计输入类型分
9、析模块和调度模块的下层模块结构。3.详细过程设计的工具答:1 程序流程图:程序流程图:是一种描述程序的控制结构流程和指令执行情况的有向图。程序流程图的缺点:1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。3)程序流程图不易表示数据结构。2 盒图(N-S 图) 盒图的特点有:1)功能域明确,可以从盒图上一眼就看出来;2)不可能任意转移控制;3)很容易确定局部和全程数据的作用域;4)很容易表现嵌套关系,也可以表示模块的层次结构。 3 PA
10、D 图: PAD(Problem Analysis Diagram)是问题分析图。日立公司发明和推广(1973) 。PAD 图的优点:1)使用表示结构化控制结构的 PAD 符号所设计出来的程序必然是结构化程序;2)PAD 图所描绘的程序结构十分清晰。3)用 PAD 图表现程序,通俗易懂,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点;4)容易将 PAD 图转换成高级语言源程序,这种转换可以用软件工具自动完成;5)可用于表示程序逻辑,也可用于描绘数据结构;6)PAD 图的符号支持自顶向下、逐步求精的方法。4 判定表:判定表由四部分组成:1.左上部列出所有条件 2.
11、左下部是所有可能做的动作 3.右上部表示各种条件组合 4.右下部是和每种条件组合相对应的动作 5 判定树:判定树是判定表的变种。 6 过程设计语言(PDL)PDL 的优点:1)可以作为注释直接插在源程序中间;2)可以使用普通的正文编辑程序或文字处理系统来完成 PDL 的书写和编辑工作;3)现在已经有一些自动处理程序可以自动地把 PDL 生成程序代码。PDL 的缺点:不如图形工具形象直观。4.面向数据结构的设计方法答:1Jackson 图 1)顺序结构 2)选择结构 3)重复结构 2 改进的 Jackson 图 3 Jackson 方法 Jackson 方法的目标是:得出对程序处理过程的详细描述
12、。Jackson 结构程序设计方法由五个步骤组成:1)分析并确定输入数据和输出数据的逻辑结构,并用 Jackson 图描绘这些数据结构;2)找出输入数据结构和输出数据结构中有对应关系的数据单元; 3)用三条规则从描绘数据结构的 Jackson 图导出描绘程序结构的Jackson 图:A 为每对有对应关系的数据单元,按照它们在数据结构图中的层次在程序结构图的相应层次画一个处理框;B根据输入数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;C根据输出数据结构中剩余的每个数据单元所处的层次,在程序结构图的相应层次分别为它们画上对应的处理框;4)列出所有操作和条
13、件(包括分支条件和循环结束条件) ,并且把它们分配到程序结构图的适当位置;5)用伪码表示程序。5.程序复杂程度的定量度量答:定量度量程序复杂度的作用:(1)可估算软件中错误的数量及软件开发工作量;(2)度量的结果可用来比较不同设计或不同算法的优劣;(3)程序的复杂度可作为模块规模的限度。 1 McCabe 方法(1)流图“退化”的程序流程图,仅描绘程序的控制流程,不表现对数据的具体操作及循环、选择的条件。 (2)计算环形复杂度的方法 1)环形复杂度 V(G )等于流图中的区域数;2)环形复杂度 V(G )EN+2,其中 E 是流图中边的条数,N 是结点数;3)环形复杂度 V( G)P1,其中
14、P 为流图中判定结点的数目。(3)环形复杂度的用途:对测试难度的一种定量度量,也能对软件最终的可靠性给出某种预测。实践表明,模块规模以 V(G )10 为宜。2 Halstead 方法:根据程序中运算符和操作数的总数来度量程序复杂度。N = N1 + N2 其中:N 定义为程序长度;N1 为程序中运算符出现的总次数; N2 为操作数出现的总次数。 1.软件测试的目的与任务答:软件测试的目标(1)测试是为了发现程序中的错误而执行程序的过程;(2)好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;(3)成功的测试是发现了至今为止尚未发现的错误的测试。 软件测试准则 1)所有测试都应该能追溯
15、到用户需求;2)应该远在测试前就制定出测试计划;3)把 Pareto 原理应用到软件测试中;4)应该从“小规模”测试开始,并逐步进行“大规模”测试;5)穷举测试是不可能的;6)为了达到最佳测试效果,应该由独立的第三方从事测试工作。2.测试与调试的区别答:软件测试:发现错误;软件调试:诊断并改正错误 1.错误定位 2.纠正错误 3.回归测试3.测试的种类答:1.按是否需要执行被测软件的角度:可分为静态测试和动态测试2、按阶段划分 1 单元测试 2 集成测试 3 系统测试 4 验收测试 5 回归测试 6 Alpha 测试 7 Beta 测试3、按测试方法划分:1 白盒测试 2 黑盒测试 3 ALA
16、C(Act-like-a-customer)测试4.黑盒测试等价类划分(根据具体问题设计测试用例)答:黑盒测试:如果已经知道软件应该具有的功能,可以通过测试来检验是否每个功能都能正常使用,这种测试称黑盒测试。也称功能测试。等价类划分是一种黑盒测试技术。穷尽的黑盒测试需要使用所有可能的输入数据(有效的和无效的)进行测试,通常是不现实的。因此产生了等价类划分。等价类划分的思想:如果将所有可能的输入数据(有效的和无效的)划分为若干个等价类,就可以假定用每一个等价类中的代表值作为测试用例来进行测试时,等价于用该类中所有值进行了测试。用等价类划分设计测试用例时,主要分两步:划分等价类、确定测试用例。1)
17、等价类划分:划分等价类需要经验,以下给出一些规则 A如果某输入条件规定了输入的范围,那么可以划分为一个有效的等价类和两个无效的等价类。B如果某个输入条件规定了一组可能的值,且程序可以对不同的值作出不同的处理,那么可以为每种值确定一个有效的等价类,同时还有一个无效等价类。 2)确定测试用例 A给每个等价类规定一个唯一的编号;B设计一个新的测试用例,使其尽可能多地覆盖未被覆盖过的有效等价类。重复此步,直至所有有效等价类被覆盖;C设计一个新的测试用例,使其覆盖而且只覆盖一个尚未被覆盖的无效等价类。重复此步,直到所有无效等价类被覆盖。通常程序发现一类错误后,就报出错信息,不再检查其它类错误,所以设计测
18、试用例时,一次只覆盖一个无效等价类。5.白盒测试逻辑覆盖(5 种)路经测试(流程图转换为程序图)答;白盒测试:也称结构测试。如果知道软件内部工作过程,可以通过测试来检验软件内部动作是否按照规格说明书的规定正常进行,这种测试称为白盒测试。1.语句覆盖:语句覆盖是指:设计的测试用例能使程序中每条语句至少执行一次。 2.判定覆盖:判定覆盖是指:选取足够的测试用例,使得程序中每个判断的可能结果都至少执行一次,也就是说使程序的每个判断分支至少通过一次。3.条件覆盖:条件覆盖是指:选择足够的测试用例,使得程序中每个判定表达式的每个条件都取到各种可能的结果。 4.判定/条件覆盖:判定/条件覆盖是指:选取足够
19、的测试用例使得同时满足判定覆盖和条件覆盖的要求。 5.条件组合覆盖:条件组合覆盖指:选取足够的测试用例,使得每个判定表达式中条件的各种可能的组合都至少出现一次。 路径测试:6.点覆盖:选取足够多的测试用例,使得程序执行路径至少经过程序图中每个节点一次。 7.边覆盖:选取足够多的测试用例,使得程序执行路径至少经过程序图中每条边一次。 8.路径覆盖:选取足够多的测试用例,使得程序的每条可能路径都至少执行一次。6.单元、集成、确认和系统测试的概念及其先后次序答:单元测试 : 单元测试的一般方法是:首先通过编译系统检查并改正程序中所有的语法错误;然后用详细设计模块说明为指南,对重要的控制路径进行测试,
20、以便发现模块内部的错误。通常,单元测试使用白盒测试方法。 集成测试:集成测试是组装软件的系统化技术,它将经过单元测试的模块联系在一起进行测试。确认测试:也称为验收测试,目标是验证软件的有效性。如果软件的功能和性能符合用户的期待,软件就是有效的。软件规格说明书是进行确认测试的基础。 系统测试:是将已经确认的软件、计算机硬件、外设、网络等其他元素结合在一起,进行信息系统的各种组装测试和确认测试,其目的是通过与系统的需求相比较,发现所开发的系统与用户需求不符或矛盾的地方,从而提出更加完善的方案.1.软件维护的种类答:为了纠正在使用过程中暴露出来的错误而进行的改正性维护;为了适应外部环境的变化而进行的
21、适应性维护;为了改进原有的软件而进行的完善性维护;为了改进将来的可维护性和可靠性而进行的预防性维护。2.什么是软件再工程、软件再工程有哪些活动答预防性维护实质上是软件在工程。软件再工程是指对既存对象系统进行调查,并将其重构为新形式代码的开发过程。最大限度地重用既存系统的各种资源是再工程的最重要特点之一。有六项活动:库存目录分析、文档重构、逆向工程、代码重构、数据重构和正向工程。总体设计一、总体设计过程通常有两个主要阶段组成:1、 系统设计阶段:确定系统的具体实现方案2、 结构设计阶段:确定软件结构总体设计过程首先寻求实现目标系统的各种不同的方案,需求分析阶段得到数据流程图是设想各种方案的基础。
22、然后分析员从这些提供的选择方案中选取若干合理的方案,为每个合理方案都准备一份流程图,列出组成系统的所有的物理元素,进行成本效益分析,并且制定实现这个方案的进度计划, 。分析员应该结合分析比较这些方案,从中选出一个极佳的方案,向用户和使用部门的负责人推荐,如果用户和使用部门负责人接受了这个方案,分析员应该进一步为这个最佳方案设计软件结构,通常,设计出初步的软件结构后还要多方改进,从而得到更合理的结构,进行必要的数据库设计,确定测试要求,并且制定测试计划。二、典型的总体设计包括一下九个步骤:1. 1、设 想 供 选 择 的 方 案 :2. 选 取 合 理 的 方 案 :3. 推 荐 最 佳 方 案
23、 :4. 功 能 分 解 :5. 设 计 软 件 结 构 :6. 设 计 数 据 库 :7. 制 定 测 试 计 划 :8. 书 写 文 档 :9. 审 查 和 复 审 :三 、 设 计 原 理模 块 的 定 义 : 模 块 是 由 边 界 元 素 限 定 的 相 邻 程 序 元 素 的 序 列 , 而 且 有 一 个 总 体 标 识符 代 表 他 。模 块 化 : 就 是 把 程 序 划 分 成 独 立 命 名 且 可 独 立 访 问 的 模 块 , 每 个 模 块 完 成 一 个 子 功能 , 把 这 些 模 块 集 成 起 来 构 成 一 个 整 体 , 可 以 完 成 制 定 功 能
24、的 满 足 用 户 需 求 。模 块 独 立 : 模 块 化 、 抽 象 、 信 息1 软件危机的主要表现:1.对软件的开发成本和进度的估算不准确 2.用户对“已完成的”软件系统不满意的现象经常发生 3.软件产品的质量往往靠不住 4.软件常常是不可维护的。5软件通常没有适当的文档资料 6 软件成本在计算机系统总成本中所占的比例逐年上升 7.跟不上计算机应用迅速普及深入的趋势2 产生软件危机的原因:1 与软件本身的特点有关 2 与软件的开发和维护的不正确有关系3 软件工程:是指导计算机软件开发和维护的一门工程学科把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是吧工程应用于软件
25、4 软件工程方法学:软件工程包括技术和管理两个方面的内容,是技术与管理紧密结合所形成的工程学科。分为传统方法学和面向对象的方法学。5 传统方法学也称为生命周期方法学或结构化范型,它采用结果化的技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的应用。6 面向对象方法学:把对象作为融合了数据及在数据上的操作行为的软件构件 2 把所有对象都划分成类 3 按照父类与子类的关系,把若干个相关类组成一个层次结构的系统。4 对象彼此间仅能通过发送消息互换联系。7 软件生命周期:从软件定义开始到最终被淘汰的全过程即从提出到最终被淘汰的这个存在期。由软件定义,软件开发和运行维护三
26、个阶段。8 软件生命周期的 8 个阶段:1 问题定义 2 可行性研究 3 需求分析 4 总体设计 5 详细设计 6编码和单元测试 7 综合测试 8 软件维护9 软件工程模型:瀑布模型 快速原型模型 增量模型 螺旋模型 喷泉模型10 瀑布模型:必须等前一阶段的工作完成后才能开始后一阶段的工作。2 前一阶段的输出文档正确,后一阶段的工作才能获得争取的结果 快速原型模型:是快速建立起来的可以再计算机上运行的程序,它所能完成的功能往往是最终产品能完成的功能的一个子集。11 微软软件的生命周期:规划阶段 设计阶段 开发阶段 稳定阶段 发布阶段12 可行性研究的目的:用最小的代价在尽可能短的时间内确定问题
27、是否有解13 研究 3 个方面 技术的可行性 经济的可行性 操作的可行性14 可行性研究过程:1 复查系统规模和目标 2 研究目前正在使用的系统 3 导出新系统的高层逻辑模型 4 进一步定义问题 5 导出和评价供选择的解法 6 推荐行动方针 7 草拟开发计划8 书写文档提交审查15 数据流图:数据在系统中流动的逻辑过程。数据元素的类型 顺序 选择 重复16 数据字典的内容:数据流 数据流分量(数据元素) 数据存储 处理17 软件成本=每行代码的平均成本*估计的源代码总行数18 需求分析的任务:确定对系统的综合要求 分析系统的数据要求导出系统的逻辑模型 修正系统开发计划 19 与用户沟通获取需求的方法 访谈 面向数据流自顶向下求精 简易的应用规格说明书技术 快速建立软件原型20 有穷机可以准确的描述一个系统,是表达规格说明书的一种形式化方法21 Petri 网包括 4 中元素:一组位置 P、一组转换 T、输入函数 I 以及输出函数 O。