软件工程备考

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

当你的耐心足够大,你的承载力也就足够大。——剑指天涯软件工程备考1.软件危机:是指在计算机软件开发和维护的过程中所遇到的一系列严重的问题。2.软件危机的表现:①对软件开发成本和进度的估计常常很不准确;②用户对“已完成的”软件系统不满意的现象经常发生;③软件产品的质量往往靠不住;④软件常常是不可维护的;⑤软件通常没有适当的文档资料;⑥软件成本在计算机系统成本中所占的比例逐年上升;⑦软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。3.产生软件危机的原因:①软件的特点;②与软件开发和维护有关的许多错误认识和做法:软件专业人员对软件开发、维护存在糊涂观念,实践过程中不能采用正确的方法、技术。③只重视程序而忽视软件配置的其余成分。④轻视软件维护。4.消除软件危机的途径:①正确认识计算机软件;②充分认识到软件开发是一种组织良好、管理严密、各类人员协同工作的工程项目;推广使用在实践中总结出来的开发软件的成功的技术和方法;③开发和使用更好的软件工具。5.软件工程:指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、方法来开发和维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高指令的软件并有效地维护它。6.软件工程方法学:把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为范型。三要素:①方法:完成软件开发的各项任务的技术方法;②工具:为运用方法而提供的自动或半自动的软件支撑环境;③过程:是为了获得高质量的软件所需完成的一系列任务的框架。7.传统方法学:采用结构化技术;软件生命周期的全过程依次划分为若干阶段;自顶向下顺序完成;优点:便于分工协作,每个阶段采用科学的管理技术和良好的技术方法,提高软件开发的成功率;缺点:只能面向行为或者数据。8.面向对象方法学:是一种以数据为主线,把数据和对数据的操作结合起来的方法。把对象作为融合数据及数据上的操作行为的统一的软件构件;划分类;按照继承关系;通过发送消息互相联系;优点:①降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作;②提高了软件的可重用性。缺点:只能面向对象和行为。9.软件生命周期:由软件定义、软件开发和运行维护三个时期组成。(其中维护时期是耗时最长的)。软件定义时期划分为三个阶段:问题定义、可行性研究和需求分析。10.软件过程:为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。11.瀑布模型:历史悠久、广为人知,它的优势在于它是规范的、文档驱动的方法;这种模型的问题是,最终开发的软件产品可能并不是客户真正需要的。12.快速原型模型:正是为了克服瀑布模型的缺点而提出来的。他通过快速构建起一个可在计算机上运行的原型系统,让用户使用原型并收集用户反馈意见的办法,获取用户的真实需求。13.增量模型:具有可在软件开发的早期阶使投资获得明显回报和交易维护的优点,但是,要求软件具有开放的结构是使用这种模型固有的困难。14.风险驱动的螺旋模型:适用于内开发的大型软件项目,但是只有在开发人员具有风险分析和排除风险的经验及专门知识时,使用这种模型才会成功。15.喷泉模型:较好的体现了面向对象软件开发过程无缝迭代的特性,是典型的饿面向对象的软件过程之一。16.可行性研究:目的是确定问题是否值得去解决,就是用最小的代价在尽可能短的时间内确定问题是否能够解决。任务:①技术可行性:使用现有的技术能实现这个系统吗?②经济可行性:这个系统的经济效益能超过它的开发成本吗?③操作可行性:系统的操作方式在这个用户组织内行得通吗?17.系统流程图是概括地描绘物理系统的传统工具。表达的是系统各部件之间流动的情况。数据流图是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。在流程图中没有任何具体的物理部件,只是描绘早软件中流动和被处理的逻辑过程。18.数据字典:是关于数据信息的集合,也就是对数据流图中包含的所有元素的定义的集合。数据流图和数据字典共同组成系统的逻辑模型。19.需求分析的任务:①确定对系统的综合要求【功能需求、性能需求、可靠性和可用性需求、出错处理需求、接口需求、约束、逆向需求、将来可能提出的要求】;②分析系统的数据要求【采用数据模型的方法】;③导出系统的逻辑模型;④修正系统开发计划。20.建模:为了更好的理解复杂事物,人们常常采用建立事物模型的方法。ER图。描述数据算法。21.总体设计:基本目的就是用比较抽象概括的方式确定系统如何完成预定的任务,也就是确定系统的物理配置方案,并且确定组成系统的每个程序的结构。任务①首先需要进行系统设计,从数据流图出发设想完成系统功能的若干种合理的物理方案,分析员应仔细分析比较这些方案并且和用户共同选定一个最佳方案。②设然后是进行软件结构设计,确定软件由哪些模块组成以及这些模块之间的动态调用关系。22.设计原理:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立。23.模块化:就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。24.耦合性:模块之间的相对独立性的度量;内聚:模块功能强度的度量。(如图从强到弱)25.启发规则:①改进软件结构提高模块独立性;②模块规模应该适中;③深度、宽度、扇出和扇入都应当适当;④模块的作用域应该在控制域之内;⑤力争降低模块接口的复杂度;⑥设计单入口单出口的模块;⑦模块功能应该可以预测。26.描绘软件结构的图形工具:①层次图(用来描绘软件的层次结构,一个矩形代表一个模块,方框间的连线表示调用关系);②HIPO图(层次图+输入/处理/输出图,H图中每一方框(模块)均有一张IPO图对应);③结构图(结构图反映程序中模块之间的层次调用关系和联系:它以特定的符号表示模块、模块间的调用关系和模块间信息的传递)。27.面向数据流的设计方法:目标是给出设计软件结构的一个系统化的途径。系统结构特征可归纳为两种典型形式:变换型结构、事务型结构。数据流图可分为两种类型:变换型数据流、事务型数据流。28.变换分析设计步骤:①复查基本系统模型②复查并精化数据流图③确定数据流图具有变换特性还是事务特性④确定输入流和输出流的边界,划分变换或事务中心⑤完成“第一级分解”⑥进行“第二级”分解。29.面向数据流设计方法的设计步骤:①精化DFD②确定DFD类型③把DFD映射到系统模块结构设计出模块结构的上层④基于DFD逐步分解高层模块设计出下层模块⑤基于DFD逐步分解高层模块设计出下层模块⑥模块接口描述。30.详细设计:根本目标是确定应该怎样具体地实现所要求的系统,也就是为软件结构图(SC)中的每一个模块确定采用的算法和模块内数据结构,用某种选定的表达工具给出清晰的描述。关键任务是确定怎样具体地实现用户需要的软件系统,也就是要设计出程序的蓝图。除了应该保证软件的可靠性之外,是将来编写出的程序可读性好、易理解、容易测试、容易修改和维护,是详细设计阶段最重要的目标。31.过程设计工具(优缺点、转换、示例):①程序流程图,优点:是对控制流程的描绘很直观,便于初学者掌握。缺点:(1)程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构;(2)程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;(3)程序流程图不易表示数据结构。②盒图(N-S图),特点:(1)功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。(2)不可能任意转移控制。(3)很容易确定局部和全程数据的作用域。(4)很容易表现嵌套关系,也可当你的耐心足够大,你的承载力也就足够大。——剑指天涯以表示模块的层次结构。③PAD图,优点:(1)使用PAD符号所设计出来的程序必然是结构化程序。(2)PAD图所描绘的程序结构十分清晰。(3)用PAD图表现程序逻辑,易读、易懂、易记。(4)容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。(5)即可用于表示程序逻辑,也可用于描绘数据结构。(6)PAD图的符号支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入而使用def符号逐步增加细节,直至完成详细设计。④判定表,判定表可以清晰的表示复杂的条件组合与其对应的处理之间的关系。32.面向数据结构的设计方法:前面介绍了面向数据流的设计方法,也就是根据数据流确定软件结构的方法,而面向数据结构的设计方法,也就是根据数据结构设计程序处理工程的方法。33.McCabe方法:掌握把程序流程图映射成流图,然后计算环形复杂度(流图中的区域数等于环形复杂度),路径。34.编码风格:源程序代码的逻辑简明清晰、易读易懂是好程序的一个重要标准。①程序内部的文档:标识符的名字应能反映它所代表的实体,应有一定实际意义;注解是程序员和程序读者通信的重要手段。分为序言性注解和功能性注解;视觉组织:利用空格、空行和换行。②数据说明,数据说明的次序应当规范化;说明语句中变量安排有序化;使用注释说明复杂数据结构。③语句构造,不要为了节省空间而把多个语句写在同一行;尽量避免复杂的条件测试;尽量减少对“非”条件的测试;避免大量使用循环嵌套和条件嵌套;利用括号使逻辑表达式或算术表达式的运算此行清晰直观。④输入输出,对所有输入数据都进行检验;检查输入项重要组合的合法性;保持输入格式简单;使用数据结束标记,不要要求用户指定数据的数目;明确提示交互式输入的请求,详细说明可用的选择或边界值;设计良好的输出报表;给所有输出数据加标志;⑤效率,写程序之前先简化算术的和逻辑表达式;仔细研究嵌套的循环,以确定是否有语句可以从内层往外移;尽量避免使用多维数组;尽量避免使用指针和复杂的表;使用执行时间短的算术运算;不要混合使用不同的数据类型;尽量使用整数运算和布尔表达式。35.软件测试:①软件测试目标(定义),是为了发现程序中的错误而执行程序的过程;好的测试方案是极可能发现迄今为止尚未发现的错误的测试方案;成功的测试是发现了至今为止尚未发现的错误的测试。②测试的目的,想以最少的时间和人力,系统地找出软件中潜在的各种错误和缺陷;测试的附带收获是他能够证明软件功能和性能与需求说明相符合;测试不能表明软件中不存在错误,只能说明软件中存在错误。36.③软件测试准则,所有的测试都应追溯到用户需求;应该远在测试开始之前就制定出测试计划;把Pareto原理应用到软件测试中;应该从“小规模”测试开始,并逐步进行“大规模”测试;穷举测试是不可能的;为了达到最佳的测试效果应该由独立的第三方从事测试工作;37.④测试方法,是否执行程序:静态测试和动态测试。测试内容:黑盒测试:如果已经知道了产品应该具有的功能,可以通过测试来检验是否每个功能正常使用。白盒测试:如果知道产品的内部工作过程,可以通过测试来检验产品内部动作是否按照规格说明书的规定正常进行。⑤测试步骤,模块测试、子系统测试、系统测试、验收测试、平行运行。38.单元测试:测试重点:模块接口、局部数据结构、重要的执行通路、出错处理通路、边界条件。39.集成测试:当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。①自顶向下,优点是可在设计早期实现并验证系统主要功能不需要驱动模块,缺点是需存根模块。②自底向上,优点是设计测试用例容易,缺点是只有到最后程序才能作为一个整体。40.确认测试:①α测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。②β测试是由软件的多个用户在实际使用环境下进行的测试。这些用户返回有关错误信息给开发者。测试时,开发者通常不在测试现场。因而,β测试是在开发者无法控制的环境下进行的软件现场应用。在β测试中,由用户记下遇到的所有问题,包括真实的以及主观认定的,定期向开发者报告。41.白盒测试:例:PROCEDURESAMP

1 / 2
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功