《软件工程导论复习资料(汇总).pdf》由会员分享,可在线阅读,更多相关《软件工程导论复习资料(汇总).pdf(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1 第一章第一章 概述概述 1.IEEE 为软件下的定义是:计算机程序、方法、规则、相关的文档资料以及在计算机上运行程序时所必需的数据的完整集合 2.程序是为了解决某个特定问题而用程序设计语言描述的适合计算机处理的语句序列。 3.文档是软件开发活动的记录,主要供人们阅读,既可用于专业人员和用户之间的通信和交流,也可以用于软件开发过程的管理和运行阶段的维护。 4.软件的特点: 软件是一种逻辑产品,无法看到软件本身的形态。 软件产品的生产主要是开发研制,没有明显的制造过程。 软件产品在使用过程中,不存在磨损、消耗、老化等问题。 软件产品的开发主要是脑力活动,还未完全摆脱手工开发方式,大部分产品是
2、“定做的” ,生产效率低。 软件产品的成本昂贵,软件费用不断增加。 软件对硬件和环境有不同程度的依赖性。 软件是复杂的。 5.软件的分类: 传统意义上从计算机系统角度看,软件分为两大类:系统软件和应用软件。 从计算机软件用途来划分三类,大致分为服务类、维护类和操作管理类。 6.6.软件危机软件危机(重点)(重点) : 如何开发软件以满足软件日益增长的需求如何开发软件以满足软件日益增长的需求 如何维护数量不断增长的已有软件。如何维护数量不断增长的已有软件。 7.软件危机表现形式: 对软件开发成本和研制进度的估计常常很不精确。 “已完成”的软件不能满足用户的要求。 软件产品质量差,可靠性得不到保证
3、。 软件产品可维护性差 软件成本在计算机系统总成本中所占的比例逐年上升。 软件开发生产率提高的速度远远跟不上计算机应用速度普及深入的趋势。 8.产生软件危机的原因 软件是计算机系统中的逻辑部件。 软件开发的管理困难。 软件开发费用不断增加,维护费用急剧上升 软件开发技术落后。 生产方式落后 开发工具落后,生产效率缓慢 9.解决软件危机途径 对计算机软件有正确认识,清除“软件是程序”的错误观念 使用好的开发技术和方法,并且要不断研究探索更好更有效的技术和方法 有良好的组织、严密的管理,各类人员要相互配合,共同完成任务 开发和使用好的软件工具。 10.软件工程的定义:是为了经济地获得可靠的且能在实
4、际机器上有效地运行的软件,而建立和使用完善的工程原理。 2 11.软件工程基本目标: 降低软件开发成本 满足用户要求的全部软件功能 符合用户要求,令用户满意的软件性能 具有较好的易用性、可重用性和可移植性 较低的维护成本,较高的可靠性 按合同要求完成开发任务,及时交付用户使用 12.软件工程的研究内容的基本原理: 软件开发技术: 主要研究软件开发方法、 软件开发过程、 软件开发工具和技术。 软件开发过程管理:主要研究软件工程经济学和软件管理学。 13.软件工程的基本原理: 用分阶段的生存周期计划严格管理 坚持进行阶段评审 实行严格的产品控制 采用现代程序设计技术 结果应能清楚地审查 开发小组人
5、员应该少而精 承认不断改进软件工程实践的必要性 14.软件工程的发展史: 程序设计时代 程序系统时代:IBMDE 360OS=转折点 软件工程时代 15.软件过程的定义:把输入转化为输出的一组彼此相关的资源和活动 16.软件生存周期的定义:某一软件项目从被提出并着手实现开始,直到该软件报废或停止使用为止所经历的时间 17.软件生存周期: 计划时期: (1)问题定义(2)可行性研究 开发时期: (1)需求分析(2)概要设计(3)详细设计(4)编码(5)测试 运行时期: (1)维护 18.软件开发模型的定义:为整个软件建立的模型 19.软件开发模型及优缺点和应用范围: (1) 瀑布模型: A、定义
6、:存周期各个活动规定为依线性顺序连接的若干阶段的模型。 B、适用范围:适合于需求明确的软件项目的开发。 C、优点:使开发过程可以在分析设计、编码、测试和维护的框架下进行。过程具有系统性,可控性。克服了软件开发的随意性。 D、缺点:a.开始阶段用户很难精确的提出产品需求,修改需求十分普遍。b.项目开发晚期才能得到程序的运行版本, 这时修改软件需求和开发中的错误代价很大。c.采用线性模型组织项目开发经常发生开发小组人员“堵塞状态”特别是项目的开始和结束 3 (2)快速原型模型: A、适用范围:用户有时间和精力参与原型的开发并与开发者之间进行频繁交流的项目,而且项目容易进行模块化 B、优点:增进软件
7、开发人员和用户对系统服务的理解,用户最容易获取信息和发表自己的意见 C、缺点 a、对于大型软件项目,原型模型需要足够的人力资源以建立足够的原型组。 b、原型模型要求开发者和客户在一段时间内共同完成原型系统的开发,如果任何一方没有实现承诺,会导致原型开发的失败。 c、如果系统难以模块化,建造原型所需构件就有问题。 (3)增量模型: A、适用范围:适合于软件要求不明确,设计方案有一定风险的软件项 目 。 B、优点:增量模型具有较大的灵活性 C、缺点:与新增量构件集成到现在软件中时,所形成的产品必须是可测试的 (4)螺旋模型: A、适用范围:适合于大规模高风险的软件项目开发 B、优点:使开发人员和用
8、户都能更好的了解每个螺旋周期演化存在的风险,从而做出相应的对策 C、缺点:由于它是风险驱动的,因此使用该模型需要有相当丰富的风险评估经验和这方面的专门技术 (5)喷泉模型,统一过程(RUP)模型,变换模型,净室模型 (6)基于构件的开发模型 (7)统一过程(RUP)模型 (8)基于形式化的开发模型 20.传统软件工程方法步骤: 采用结构化分析、结构化设计和结构化实现完成软件开发的各项任务 把软件生存周期划分成若干个阶段,然后按顺序完成各个阶段的任务 每一个阶段的开始和结束都有严格标准,前一阶段结束的标准是后一阶段工作开始的标准 在每一阶段结束之前,必须正式地进行严格的技术审查和管理复审 21.
9、面向对象软件工程开发过程的特点: 开发阶段界限模糊, 开发过程逐步求精,开发活动反复迭代 22.传统软件工程和面向对象软件工程的分析方法对比: 开发思想对比,传统软件工程:以功能划分为导向;面向对象开发方法是以对象作为整个问题分析的中心,围绕对象展开系统的分析与设计工作。 开发过程方面, 传统软件工程开发过程包括需求设计、 总体设计、 详细设计、面向过程的编码和测试;面向对象软件工程开发过程包括需求分析与对象抽取、对象详细设计、面向对象的编码和测试。 4 第二章第二章可行性研究可行性研究 2.1(重点) 可行性研究的目的: 用最小的代价再尽可能短的时间内确定问题是否能够解决。 评价可行性的四个
10、方面:经济、技术、操作、法律。评价可行性的四个方面:经济、技术、操作、法律。 经济可行性: 首先要进行成本-效益分析。 从开发所需的成本和资源,潜在的市场前景等方面进行估算,确定要开发的项目是否值得投资开发,既要分析再整个软件生存周期中所花费的代价与得到的效益之间的度量。 技术可行性:对要开发的项目的功能、性能和限制条件进行分析,评价系统所采用的技术是否先进,使用现在的技术能否实现系统达到的目的,现在技术人员的技术水平是否具备等。 操作可行性:系统的操作方式再这个应用范围内是否行得通。 法律可行性:新系统的开发会不会在社会上或政治上引起侵权,可能导致的责任,有无违法问题:应从合同的责任、专利权
11、、版权、等一系列权益方面予以考虑。 2.2 可行性研究步骤: (7 步) 1.复查并确定系统规模和目标 2.研究目前正在使用的系统 3.建立新系统的高层逻辑模型 4.导出和评价各种方案 5.推荐可行方案 6.草拟初步的开发计划 7.编写可行性研究报告提交审查 2.3(重(重点点) 系统流程图基本符号(系统流程图基本符号(5 5 种)及常见的种)及常见的 1111 种其他系统符号,详见种其他系统符号,详见 P19P19(要认(要认识)识) P20 例题 2.1; 系统流程图习惯画法目的:使信息在图中自顶向下或从左向右流动。 2.4 成本-效益分析目的:从经济角度评价开发一个新的软件项目是否可行。
12、 系统成本包括 1.开发成本。2.运行维护成本。 系统效益包括:有形效益 1.货币的时间价值。2 投资回收期。3 纯收入。 无形的社会效益 货币时间价值例题货币时间价值例题 P20P20、2121 F=P*(1+n*i) F=P*(1+n*i) 计算计算 求:求:1.1.货币时间价值。货币时间价值。2.2.投资投资 P=F/(1+n*i) P=F/(1+n*i) 回收期。回收期。3.3.纯收入纯收入 2.5 可行性研究报告的主要内容 P21 1.引言。 2.可行性研究前提。 3.对现有系统的分析。 4.对所建设系统的分析(1.经济可行性分析。2.技术可行性分析。3.社会因素的可行性分析) 5.
13、其他与设计有关选择方案。 6.其他与设计有关的专门问题。 7.结论意见 5 第三章第三章 软件需求分析软件需求分析 3.1 1需求分析的任务是: 确定系统必须完成哪些工作, 也就是对目标系统提出完整、准确、清晰而且具体的要求。 2需求分析是:完整地、严密的、描述应当“做什么”的一种过程。 3需求分析具体任务:1、确定对系统的综合要求 2、分析系统的数据需求 3、建立软件的逻辑模型 4、编写软件需求规格说明书 5、需求分析评审 4需求分析步骤:1、需求获取:调查研究 2、需求提炼:分析建模 3、需求描述:编写 SRS 4、需求验证 3.2 1获取需求的方法 1、客户访谈 2、建立联系分析小组 3
14、、问题分析与确认 2Andriole 提出、判断是否用原型法来帮助获取需求 1、需求已经建立,并且可以预见是相当稳定吗? 2、软件开发人员和用户已经理解了目标系统的应用领域吗? 3、问题是否可被模型化? 4、用户能否清楚地确定基本的系统需求? 5、有任何需求是含糊的吗? 6、已知的需求中存在矛盾吗? 3.3 1功能分解方法体现了“自顶向下,逐步求精”的思想; 本质上是用过程抽象的观点来看待需求,符合传统程序设计人员的思维特征。 2四种需求分析方法 1、功能分解方法 2、结构化分析方法 3、信息建模方法 4、面向对象方法 3.4(重点!考点!) 6 1结构化分析定义:结构化分析就是使用数据流图、
15、数据字典、结构化语言、判定树和判定表等工具,来建立一种新的称为结构化说明书的目标文档。 2 2SASA 描述工具:描述工具: 1 1、数据流图、数据流图 2 2、数据字典、数据字典 3 3、描述加工逻辑的结构化语言、判定表和判定树、描述加工逻辑的结构化语言、判定表和判定树 3数据流图(数据流图(DFDDFD) (必须会画) (必须会画 必须认识) :必须认识) : 1、DFD 定义:数据流图是 SA 方法中用于表示系统逻辑模型的一种工具。它以直观的图形清晰地描述系统数据的流动和处理过程, 图中没有任何具体的物理元素,主要强调的是数据流和处理过程,即使不是计算机专业技术人员也很容易理解。数据流图
16、是软件开发人员和用户之间很好的通信工具。 2、DFD 各种符号意义: 箭头 表示数据流 圆或椭圆 表示变换数据的处理 方框 表示数据的三远点或终点 = 双杠或单杠 表示数据存储(文件) * 星号 表示数据之间的关系(同时存在)_ + 加号 表示“或”关系 + 表示只能从中选一个(互斥的关系) 3、DFD 基本原则 (1)数据流图中所有的符号必须是前面所述的 4 种基本符号和附加符号 (2)数据流图的主图(顶层)必须含有前面所述的 4 种符号,缺一不可 (3)数据流图主图上数据流必须封闭在外部实体之间(外部实体可以是一个, 也可以是多个) (4)加工(变换数据处理)至少有一个输入数据流和一个输出
17、数据流,反映出次加工数据的来源与加工的结果 (5)任何一个数据流子图必须与它父图上的一个加工相对应, 父图中有几个加工。就可能有几张子图,两者的输入数据流和输出数据流必须一致,即所谓“平衡” (6)图上的每个元素都必须有名字(流向数据存储或从数据存储流出的数据流除外) 4、DFD 步骤 (1)先找外部实体(可以是人、物或其他软件系统),找到了外部实体,则系统与外部世界的界面就得以确定,系统的源点和终点也就找到了; (2)找出外部实体的输入和输出数据流; (3)在图的边上画出系统的外部实体; (4)从外部实体的输出流(源点)出发,按照系统的逻辑需求,逐步画出一系列变换数据的加工,知道找到外部实体
18、处所需的输入流(终点),形成数据流的封闭 (5)按照上述步骤画出所有子图 5、DFD 注意事项 7 (1)画数据流图时,只考虑数据流的静态关系,不考虑其动态关系(如启动、停止等与时间有关的问题),也不考虑出错处理问题 (2)画数据流图时,只考虑常规状态,不考虑异常状态,这两点一般留在设计阶段解决。 (3)画数据流图不是画程序流程图,二者有本质的区别。数据流图只描述”做什么”,不描述“怎么做”和做的顺序,而程序流程图表示对数据进行加工的控制和细节 (4)不能期望数据流图一次画成,而是要经过各项反复才能完成 (5)描绘复杂系统的数据流图通常很大, 对于画在几张纸上的图很难阅读和理解、一个比较好的方
19、法就是分层的描绘这个系统。在分层细画时,必须保持信息的连续性,父图和子图要凌恒,每次只细画一个加工。 4DD(数据字典) (1)DD 定义:DD 是对数据流图中所包含元素的定义集合 (2)DD 作用:主要作用是供人查阅,并应以一种准确的,无二义性的说明方式为系统的分析、设计及维护提供有关元素的一致的定义和详细的描述。 (3)DD 内容:由 4 类条目的定义组成:数据流、数据流分量(数据基本项)、数据存储(文件)和加工(处理) (4)DD 符号: A.=: 表示被定义为或等价于或由.组成 B.+: 表示“与”(和),用来连接两个数据元素 C.|: 表示“或” ,对 中列举的数据元素可任选其中一项
20、 D.: 表示“重复” ,对内容可以重复使用 E.m|n 或者mn或者nm 表示中内容至少出现 m 次,最多出现 n 次。其中 n,m 为重复次数的上、下限。 F.() 表示“可选” ,对()中的内容可选、可不选。 5加工逻辑描述加工逻辑描述(p34)(p34)-重点重点 1 1、结构化语言、结构化语言 2 2、判定表、判定表 3 3、判定树、判定树 3.5 三种圆型工具:层次方框图、维纳图、IPO 图(能认识、分辨、区别) 8 第四章第四章 软件总体设计软件总体设计 4.1 软件总体设计的目标和任务 总体设计基本目标: (1)总体设计阶段的基本目标就是回答“概括的说,系统应该如何实现?”这个
21、问题。 (2)总体设计的另一项任务是设计软件的总体结构,即确定系统中的每个程序是由哪些模块组成的,每个模块的功能及模块和模块之间的接口、调用关系等,但所有这些都不要求涉及模块内部过程的细节。 4.2 软件结构设计准则 A、软件设计体系结构准则: (1)体系结构是对复杂失误的一种抽象。 (2)体系结构在一定的时间内保持稳定。 (3)良好的体系结构意味着普通、高效和稳定。 B、软件模块设计准则: (1)降低模块之间的耦合性,提高模块的内聚性。 (2)模块结构的深度、宽度、扇出和扇入应适当。 (3)模块作用范围应该再控制范围内。 (4)模块接口设计要简单,以便降低复杂程度和冗杂度。 (5)设计功能可
22、预测并得到验证的模块。 (6)适当划分模块规模,以保证其独立性。 C、深度、宽度、扇出、扇入的定义(重点) :深度、宽度、扇出、扇入的定义(重点) : 深度指软件结构中模块的曾次数;深度指软件结构中模块的曾次数; 宽度指同一层次中最大的模块个数;宽度指同一层次中最大的模块个数; 扇出指一个模块直接调用的模块数目;扇出指一个模块直接调用的模块数目; 扇入指有多少个上级模块直接掉用它。扇入指有多少个上级模块直接掉用它。 4.3 软件设计的概念和原理 A、模块的定义: 模块是软件结构的基础,是软件元素,是能够单独命名、独立完成一定功能的程序语句的集合,如高级语言中的过程、函数、子程序等。 B、模块化
23、的定义、目的、致力于: (1)模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。 (2)模块化的目的是为了降低软件复杂度,使软件设计、测试、维护等操作变得简易。运用模块化技术还可以防止错误蔓延,从而提高系统的可靠性。 (3) 软件模块化的过程必须致力于降低模块与外部的联系, 提高模块的独立性,才能有效降低软件复杂性,使软件设计、测试、维护等工作变得简单和简易。 C、模块的两个特征及特征的定义(重点) :模块的两个特征及特征的定义(重点) : (1)模块最重要的两个特征两个特征有两个:一是抽象,二是信息隐蔽。 (2)抽象抽象就是抽出事物本质的共同的特征而暂时忽略它们之间的细
24、节差异; 信息隐蔽信息隐蔽原理设计和确定模块原则应该使得包含在模块内的信息 (过程和 数据) ,对于不需要这些信息的模块是不能访问的。 D、局部化的定义: 局部化就是指把一些关系密切的软件元素物理地放得彼此靠近。 在模块中使用局 9 部量就是局部化的一个例子。显然局部化有助于信息隐蔽。 E、6 6 种种耦合和耦合和 6 6 种内聚及其详细解释、作用等: (重点!考点!多多理解)种内聚及其详细解释、作用等: (重点!考点!多多理解) 耦合: (1)无直接耦合:如果两个模块分别从属于不同模块的控制和调用,它们之间不传递任何信息,没有直接的联系,相互独立,称无直接耦合。 (2)数据耦合:如果两个模块
25、之间有调用关系,相互传递的信息以参数的形式给出,而且传递的信息仅仅是简单的数据,则称为数据耦合。 (3)标记耦合:如果两个模块之间传递的是数据结构,而且被调用模块不需要作为参数传递过来的整体数据结构,只需要使用数据结构其中一部分数据元素,则称为标记耦合。 (4)控制耦合:当一个模块调用另一个模块时,传递的信息控制了该模块的功能,则称为控制耦合。 (5)公共环境耦合:两个或多个模块共用一个数据环境,称为公共环境耦合。 (6)内容耦合:一个模块直接访问另一个模块的内部数据,一个模块 不通过正常入口而转入另一个模块内部,一个模块有多个入口,这都属于内容耦合。 内聚: (1)偶然内聚:模块内的元素之间
26、没有意义上的联系。 (2)逻辑内聚:将逻辑上相同或相似的一类任务放在同一个模块中,每次被调用时,由传送给模块的参数来确定该模块应完成的某一功能。 (3)时间内聚:把需要同时执行的动作组合在一起形成的模块称为时间内聚模块。 (4)通信内聚:如果模块中所有元素都使用相同的输入数据或者产生相同的输出数据,则称为通信内聚。 (5)顺序内聚:一个模块中各个处理元素都紧密相关于同一个功能个且必须顺序执行,此模块的块内联系属顺序内聚。 (6)功能内聚:模块内所有元素属于一个整体,共同完成一个单一功能,缺一不可,则称为功能内聚。 4.5 软件结构设计的图形工具(要求会画图)软件结构设计的图形工具(要求会画图)
27、 A A、结构图(、结构图(* *重点考点重点考点* *)P58P58; B B、层次图、层次图 P58P58; C C、HIPOHIPO 图图 P59P59。 4.6 结构化设计方法(A 和 B 二选一 8 分大题,要求会画图) A、变换型数据流图的画法及其转变为软件流程图方法; B、事务型数据流图的画法; C、结构化设计方法步骤: (1)复审数据流图,必要时可进行修改或精化; (2)确定数据流图类型(变换型/事务型) ; (3)分解上层模块,设计中下层模块结构; (4)根据软件结构设计准则对软件结构求精并改进; (5)导出接口描述和全程数据结构; (6)复审,如果有错,转入修改完善,否则进
28、入下一阶段详细设计。 10 第五章第五章 软件详细设计软件详细设计 一详细设计 (1).根本目的 详细设计的根本目的就是确定应该具体实现所要求的系统。 (2).具体目的 具体的就是为软件结构图中每一个模块确定采用的算法和块内数据结构, 用某种选定 的详细设计工具更清晰地描述, 从而在编码阶段可以把这些直接翻译成某种设计语言书写的源程序。 二详细设计详细设计工具(重点考点工具(重点考点 必须会画必须会画 P68P68- -P72 8P72 8 分大题)分大题) 流程图的优点: 易学、表达算法直观。 流程图的缺点: (1) 程序流程图本质上不是逐步求精的好工具, 它诱使程序员过早考虑控制流程,而不
29、去考虑程序的整体结构; (2) 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制,容易造成非结构化的程序结构; (3) 程序流程图不易表示数据结构和层次结构。 N-S 图(盒图)优点 (1) 功能域表达明确,功能域从盒式图上可以明显地看出来; (2) 很容易确定局部和全部数据的作用域; (3) 不可能随意转移控制; (4) 很容易表达模块的层次结构,并列或嵌套关系 (5) 使得软件设计人员遵守结构化程旭设计的规定,自然地养成良好的程序设计风格。 N-S 图(盒图)的缺点: (1) 容易画不下 (2) 不易修改 PAD(问题分析图)优点: (1)
30、 用 PAD 图设计出来的程序必然是结构化程序。 (2) PAD 图所描绘的程序结构身份清晰,图中最左面的竖线是程序的主线,即第一层结构。 (3) PAD 图的符号支持自顶向下。逐步求精的方法,左边层次的内容可以抽象,然后利用 def 从逐步细化。 (4) 用 PAD 图表示的程序逻辑易读 易懂 易记 使用方便 (5) 即可表示程序逻辑,也可表示描绘数据结构 (6) 可自动生成程序 PDL 图(过程设计语言)特点: (1) 所有关键字都有固定语法, 易便提供数据化得控制结构 数据说明和模块化的特征。 (2) 描述处理过程的说明性语言没有严格的语法限制 (3) 具有数据说明限制,即包括简单的是数
31、据结构,有包括复杂的数据结构。 11 (4) 具有模块定义和调用机制。 三人机界面设计 系统响应有两个属性,分别是长度和易变性。 帮助设施时解决以下五个问题 (1) 在用户和系统交互期间,是否在任何时候都能获得关于系统任何功能的帮助信息?有两种选择:提供部分(全部)功能的帮助信息。 (2) 用户怎样请求帮助?有三种选择:帮助菜单 特殊功能键和 HETP 的命令。 (3) 怎样显示帮助信息?有两种选择:在独立的窗口中,指出某个参考文档和在屏幕固定位置显示简短提示 (4) 用户怎样返回到正常的交互方式中?屏幕上的返回按钮和功能键 (5) 怎样组织帮助信息?平面结构 信息的层次结构和超文本结构。 出
32、错信息处理的五个问题 (1) 信息应该用用户可以理解的术语描写问题; (2) 信息应该提供有助于从错误中恢复建设性的意见 (3) 信息应该指出错误可能导致那些负面后果 (4) 信息应该伴随这视觉和听觉上的提示 (5) 信息不能带有指责色彩。 命令交互考虑以下问题 (1) 是否每个菜单选项都有对应的命令 (2) 采用何种命令方式?(控制序列 功能键 键入命令) (3) 学习和记忆难度的命令有多大?忘记了命令怎么办? (4) 用户是否可以定制或缩写命令? 人机界面设计原则 1. 让用户驾驭软件,而不是软件驾驭用户 2. 尽可能减少用户的记忆负担。 3. 保持界面的一致性。 人机界面设计过程 (1)
33、 建立任务的目标和意图 (2) 目标和意图确定后,建立需求规格模型 (3) 以界面需求模型为依据创建用户界面模型 (4) 用户试用并评估该界面模型 (5) 设计者根据用户的意见修改设计并实现下一代模型 (6) 不断进行下去,以界面模型创建进行界面设计迭代。 12 第六章第六章 软件编码软件编码 6.1 程序设计语言的分类 6.1.1 基础语言:(1)FORTRAN 语言(2)COBOL 语言(3)BASIC 语言(4) ALGOL语言 6.1.2 结构化语言: (1)Pascal 语言(2)C 语言(3)Ada 语言 6.1.3 面向对象语言: (1)c+语言(2)java 语言 按代划分:
34、第一代:1GL 主要特征是面向机器的。机器语言和汇编语言是 1GL 的代表。 第二代:2GL 主要代表是 FORTRAN,ALGOL,COBOL,BASIC。 第三代:3GL 也称现代编程语言,分三大类:通用高级语言,面向对象高级语言和专用语言。主要代表是 Pascal,C,Ada 等和 C+,Objective-C,Smalltalk 等,以及专用语言 Lisp,PROLOG 等。 第四代:4GL 主要特征是:友好的用户界面;非过程性;高效的程序代码;完备的数据库;应用程序生成器。 6.2 程序设计语言的选择 选择标准: 1.待开发软件的应用领域 2.用户的要求 3.软件的运行环境 4.软件
35、开发人员的知识 5.软件的可移植性要求 6.3 程序设计风格 6.3.1 程序内部文档 1.标识符的选取 2.程序的注解 3.程序的布局 6.3.2 数据说明 数据说明次序标准化; 多变量按照字典序排列; 复杂数据结构用注解说明。 6.3.3 语句构造 1.不要为了节省存储空间把多个语句写在一行。 2.尽量避免复杂的条件测试,尤其是减少对“非”条件的测试。 3.避免大量使用循环嵌套语句和条件嵌套语句。 4.利用圆括号使逻辑表达式或算术表达式的运算次序清晰直观。 5.变量说明不要遗漏,变量的类型,长度,存储及初始化要正确。 6.让不是编码人的人看懂代码。 6.3.4 输入/输出 1.对所有输入数
36、据都要进行校验。 2.检查输入项重要组合的合法性。 3.保持简单的输入格式。 4.输入一批数据时,使用数据或文件结束标志,不要用计数来控制,更不能要求用户自己指定输入项数或记录数。 13 5.人机交互式输入时,要详细说明可用的选择范围和边界值。 6.当程序设计语言对输入/输出格式有严格要求时,应保持输入格式与输入语句的要求一致。 7.输出报表的设计要符合用户要求,输出数据尽量表格化,图形化。 8.给所有的输出数据加标志,并加以必要的注解。 6.3.5 效率 1.代码效率 2.存储效率 3.输入/输出的效率 效率问题应该记住的原则: (1) 效率是属于性能的要求, 因此应该再软件需求分析阶段确定
37、效率方面的要求; (2) 良好的设计可以提高效率; (3) 提高程序的效率和好的编码风格要保持一致, 不应该一味追求程序的效率而牺牲程序的清晰性和可读性。 第七章第七章 软件测试(重点)软件测试(重点) 7.1 测试目的及定义: 软件测试是为了发现错误而执行程序的过程 一个好的测试用例能够发现至今尚未发现的错误 一个成功的测试时发现了至今尚未发现的错误的测试. 注意事项:测试只能证明程序中存在错误,但不能证明程序中不存在错误 测试原则(7 条) 1) 测试用例既要有输入数据,又要有对应的输出结果。 2) 测试用例不仅要选用合理的输入数据,还应选择不合理的输入数据。 3) 除了检查程序是否做了它
38、应该做的工作,还应该检查程序是否做了它不应该做的工作。 4) 应该远在测试开始之前就制定测试计划。 5) 测试计划、测试用例、测试报告必须作为文档长期保存。 6) 可以把 Pare to 原理应用到软件测试中。但关键问题是如何找出这些可疑的有错模块并进行彻底测试。 7) 程序应该避免测试自己的程序。 7.3 软件测试方法分为动态测试和静态测试。 静态测试(静态分析) :人工测试和计算机辅助静态分析 动态测试有根据测试用例的设计方法不同,分为黑盒测试和白盒测试。 a. 黑盒测试:黑盒技术着重测试软件功能。设计测试用例时,需要研究需求说明和总体设计说明中的有关程序功能或输入、输出之间的关系等信息,
39、从而与测试后的结果进行分析比较。 b. 白盒测试:是以程序的内部逻辑结构为基础设计测试用例。 注意事项:无论使用哪一种测试方法,对于一个大的软件系统,完全彻底测试在实际中都是不可能的。 14 7.4 白盒测试和黑盒测试: 白盒技术逻辑覆盖 语句覆盖: 判定覆盖: 条件覆盖: 判定条件覆盖: 条件组合覆盖 路径覆盖 知道每种覆盖标准的强弱程度 P89 P90 P91 循环覆盖分为单循环和嵌套循环 基本路径测试步骤 5 步(P92 P93) 理解记忆理解记忆( (白盒总白盒总 8 8 分大题分大题 考点考点 重点重点 考试题目应该是写出测试用例考试题目应该是写出测试用例) ) 黑盒技术方法(不考大
40、题 考概念 了解一下 P93 要求自己理解) 等价类划分法 边界值分析法 错误推测法 因果图法 7.5 A、测试过程: (3 类信息) 件配置测试配置测试工具 B、单元测试: 任务:模块接口测试、模块局部数据结构测试、模块出错处理通路测试、模块中重要的执行路径测试和模块边界条件测试。 方法:再单元测试时,为被测试模块设计驱动模块和桩模块。 C、集成测试: 由模块组装程序时的方法:渐增式测试和非渐增式测试 渐增式测试基本思想:把下一个要测试的模块同已经测试好的模块结合起来进行测试。在组装过程中变组装边测试。 非渐增式测试基本思想:先分别测试各个模块,再把所有的模块按设计要求组装在一起进行测试。
41、集成测试方法: (P100 p102) 自顶向下集成方法的过程及优点 自底向上集成方法的过程及优点 集成方法的选择决定于软件的特点。有时也决定任务的进度。一般将两种方法结合起来使用。 D、确认测试:从质量的角度,再功能、性能、可靠性、易用性等方面对软件做全面的质量检测。 评价结果两种:合格软件和不合格软件 确认测试后软件配置报告用户所需的 (1)操作手册;(2)设计资料如设计说明书等;(3)源程序清单;(4)测试计划;(5)测试报告;(6)设计的测试用例;(7)用户手册等 审查目的:保证软件开发的所有文件资料齐全、正确,文档与程序完全一致,为软件投入运行后的软件维护工作做好充分的准备。 15
42、E、系统测试 定义:系统测试是将经过单元测试、集成测试、确认测试以后的软件,作为计算机系统中的一个组成部分,需要与系统中的硬件、外部设备、支持软件、数据及操作人员结合起来, 在实际运行环境下对计算机系统进行一系列的严格有效的测试来发现软件的潜在问题,以保证组成部分不仅单独的正常运行,而且在系统各部分统一协调下也能正常运行。 F、 测试(内部版本)和 测试(试用版本)的定义 P103 7.6 调试的目的任务:对错误定位,分析并找出原因改正错误。 常用调试技术: 简单的调试技术:a.输出存储器中的全部内容;b.特定部位插入输出语句;c.使用自动调试工具。 消去原因法:归纳法和演绎法(P104 图
43、7.7 和 7.8 理解就好) 7.7 测试的终止条件: 1) 根据程序的可靠性制定测试的终止条件 2) 测试的覆盖率要达到一定的目标 3) 规定至少要查出的错误数量 第八章第八章 软件维护软件维护 8.1 1 维护的定义:软件维护是指软件系统交付使用以后,为了改正软件运行错误,或者因满足新的需求而加入新功能的修改软件的过程 2 4 种维护的定义加以区分种维护的定义加以区分( (重点重点 p108)p108) 1 1、改正性维护、改正性维护 2 2、适应性维护、适应性维护 3 3、完善性维护、完善性维护 4 4、预防性维护、预防性维护 3 特点 1、软件维护是软件生存周期中延续时间最长、工作量
44、最大的一个阶段。 2、软件维护不仅工作量大、任务重,而且维护不当的话,还会产生一些意想不到的副作用,甚至引起新的错误。软件维护活动直接影响软件产品的质量和使用寿命。 3、软件维护活动实际上是一个修改和简化了的软件开发活动。 4、尽管软件维护需要的工作量很大,但是长期以来,软件维护工作却一直未收到软件设计者们的足够重视。与软件设计和开发阶段相比,有关软件维护方面的文献资料很少,相应的技术手段和方法也很缺乏 16 8.2(看图理解概念) 1 结构化维护与非结构化维护结构化维护与非结构化维护(p110(p110 图图) ) 2 2 维护组织各部分组成维护组织各部分组成(p111(p111 图图) )
45、 3 3 维护工作流程维护工作流程(p112(p112 图图) ) 4 4 维护工作的组织管理维护工作的组织管理(p113(p113 图图) ) 8.3 1 软件的可维护性定义:软件可维护性是指纠正软件系统出现的错误和缺陷,以及为满足新的要求进行修改、扩充或压缩的容易程度 2 衡量可维护性 7 个标准 1、可理解性 2、可测试性 3、可修改性 4、可靠性 5、可移植性 6、可使用性 7、效率 3 提高可维护性的方法 1、建立明确的软件质量目标和优先级 2、使用提高软件质量的技术和工具 3、选择便于维护的程序设计语言 4、采取明确的、有效的质量保证审查措施 5、完善程序的文档 8.4 1 维护困
46、难的表现: 1、读懂别人的程序是很困难的,而文档的不足更是增加了这种难度。 2、文档的不一致性是软件维护困难的又一个因素,主要表现在各个文档之间的不一致性及文档与程序之间的不一致性,从而导致维护人员不知所措,不知怎样进行修稿。这种不一致性是由于开发过程中文档管理不严造成的,开发中经常会出现修改程序而忘了修改相关的文档,或者某一个文档修改了,却没有修改与之相关的其他文档等现象。 解决文档不一致性的方法就是要加强开发工作中文档的版本管理 3、软件开发和软件维护在人员和时间上存在差异。 4、软件维护不是一件吸引人的工作。 17 2 维护的副作用(重点) :维护的副作用(重点) : 1 1、修改代码的
47、副作用、修改代码的副作用 2 2、修改数据的副作用、修改数据的副作用 3 3、修改文档的副作用、修改文档的副作用 3 维护代价: 1、系统的大小 2、程序设计语言 3、系统年龄 4、数据库技术的应用 5、先进的软件开发技术 6、其他一些因素 4 维护成本 1、有形(花了多少钱) 2、无形 (1)一些看起来是合理的修复和修改请求不能及时安排,是的客户不满意 (2)变更的结果把一些潜在的错误引入正在维护的软件,是的软件整体质量下降 (3)当必须把软件人员抽调到维护工作中去时,就使得软件开发工作受到干扰 8.5 1 再工程和逆向工程定义 1、软件再工程是变更系统(或程序)的内部机制或是系统(或程序)
48、的数据结构,而不变成其功能性的活动 2、检查改进对象系统,按新的系统对系统进行重构,进而实现其新模式 3、软件逆向工程就是分析程序,力图在比源代码更好的抽象层次上建立程序表示的过程,逆向工程是一个设计恢复的过程 2 再工程好处 1、再工程可帮助软件机构降低软件演化的风险 2、再工程可帮助软件机构补偿软件的投资 3、再工程可使得软件易于进一步变更 4、再工程有着广阔的市场 3 软件再工程技术(p121-p122) 1、改进软件 2、理解软件 3、获取、保护及扩充软件的已有知识 18 第九章第九章 面向对象方法面向对象方法 1.1. UMLUML 的构成的构成 P139P139- -140140
49、2. UMLUML 的特点和用途的特点和用途 P141P141 特点特点: : (1)统一的标准 (2)面向对象 (3)可视化,表示能力强大 (4)独立于过程 (5)(5)易于掌握应用 3.面向对象方法学的优点和不足面向对象方法学的优点和不足 面向对象方法学的主要优点:面向对象方法学的主要优点: (1)与人类习惯的思维方式一致; (2)软件稳定性好; (3)可重用性好; (4)较易 (5)可维护性好,易于测试开发大型软件产品; 面向对象方法学的不足之处:面向对象方法学的不足之处: (1)相对面向过程而言比较麻烦,需要写更多的代码。 (2)占用空间比较多,程序效率比较低,如多态等特性会降低性能。
50、 (3) 创建对象实例的过程往往是非常耗时的工作, 因此一些认为 “万事皆对象”的语言对于一些简单类型的操作性能比较低。 (4)对系统动态特征表述不充分(主要是整体动态特征) ,且反映系统整体功能特征的能力较差。如需要一定的软件支持环境,只能在现有业务基础上进行分类整理,不能从科学管理角度进行理顺和优化,初学者不易接受、难学。 (5)面向对象方法学 4 大特性(抽象、封装、继承和多态)在一定程度上避免了不合理的操作,并能有效地阻止错误的扩散,减轻了维护工作量,但是也加大了测试的难度,给软件测试带来不便。 4.P143UMLP143UML 定义语言规则定义语言规则: :命名、范围、可见性、完整性