2022年软件工程笔记讲课教案 .pdf
( 考 研 复 试 ) 软 件 工 程笔 记名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - 1:软件危机:问题1:如何开发软件,以满足对软件日益增长的需求。问题2:如何维护数量不断膨胀的软件。表现:对软件开发成本和时间估计不准,用户对已完成软件不满意,软件质量不可靠,软件不可维护,软件缺少文档,软件成本过高,软件跟不上硬件发展速度。原因:与软件本身特点有关,缺乏可见性,质量难以评价,规模庞大难以维护。与软件开发维护的不当方法有关,轻视需求分析和维护,对用户的要求没有完整准确的认识就编写程序,忽视程序,文档,数据等软件配置。2:软件工程:采用工程的概念,原理,技术和方法开发与维护软件,把正确的管理技术和软件开发技术结合起来,经济的开发出高质量的软件并有效的维护。即把系统化的,规范的,可度量的途径应用于软件开发,运行和维护的过程。3: 软件工程 7 条基本原理:用分阶段的生命周期计划严格管理,坚持进行阶段评审,实行严格的产品控制,采用现代程序设计技术,结果应能清楚地审查,开发小组的人员应该少而精,承认不断改进软件工程实践的必要性。4:软件工程领域:软件需求,设计,构建(写代码),测试,维护,配置管理,工程管理,工程过程,工程工具,软件质量。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - 5:软件生命周期:软件定义(问题定义,可行性研究,需求分析),软件开发(概要设计,详细设计,编码和单元测试,综合测试),运行维护(改正性维护,适应性维护,完善性维护,预防性维护)。、生命周期模型6:瀑布模型:就是把一个开发过程分成收集需求,分析,设计,编码,测试,维护六部分,只有完成前面一步才能开始后面一步,上一步的输出的文档就是这一步的输入文档,每一步完成都要交出合格的文档,每一步都会有反馈,如果反馈有错误就退回前一步解决问题。瀑布模型的缺点:实际的项目开发很难严格按该模型进行;由于用户只能通过文档来了解产品,客户往往很难清楚地给出所有的需求,而瀑布模型不适应用户需求的变化;软件的实际情况必须到项目开发的后期客户才能看到。7:快速原型模型:就是根据用户的需求迅速设计出一个原型系统,原型系统具有基本的功能,然后用户使用原型并对原型提出需求和改变,开发人员再对原型进行修改和完善知道用户满意。优点:容易适应需求的变化;有利于开发与培训的同步;开发费用低、开发周期短且对用户更友好。缺点:快速建立起来的系统结构加上连续的修改可能会导致产品质量低下; 使用这个模型的前提是要有一个展示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - 性的产品原型,因此在一定程度上可能会限制开发人员的创新。8:增量模型:就是把软件分成许多个构件,每个构件分别当做一个软件来分析,设计,编码,测试。开发人员一次一个构件的提交给用户,最后组装到一起。增量模型的优点:一开始不用投入太多人力,如果核心产品很受欢迎,则可增加人力实现下一个增量;可先发布部分功能给客户,让客户逐渐适应。缺点:并行开发构件有可能遇到不能集成的风险,软件必须具备开放式的体系结构。9:螺旋模型:螺旋模型基本做法是在快速原型模型的每一个原型前引入一个非常严格的风险分析,每个原型经过制定计划,风险分析,实施工程,客户评估四步走。每个原型都标识一个或多个主要风险,直到所有的主要风险因素都被确定。螺旋模型由风险驱动,强调可选方案和约束条件从而支持软件的重用,有助于将软件质量作为特殊目标融入产品开发之中。优点:设计上的灵活性, 可以在项目的各个阶段进行变更;以小的分段来构建大型系统, 使成本计算变得简单容易;客户始终参与每个阶段的开发, 保证了项目不偏离正确方向以及项目的可控性;缺点:采用螺旋模型需要具有相当丰富的风险评估经验和专门知识,在风险较大的项目开发中,如果未能够及时标识风险,势必造成名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - 重大损失;过多的迭代次数会增加开发成本,延迟提交时间。10:喷泉模型:以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。该模型认为软件开发过程自下而上周期的各阶段是相互迭代和无间隙的特性。喷泉模型不像瀑布模型那样,需要分析活动结束后才开始设计活动,设计活动结束后才开始编码活动。该模型的各个阶段没有明显的界限,开发人员可以同步进行开发。其优点是可以提高软件项目开发效率,节省开发时间,适应于面向对象的软件开发过程。缺点:由于喷泉模型在各个开发阶段是重叠的,因此在开发过程中需要大量的开发人员,因此不利于项目的管理。10.1 :总结:一开始是瀑布模型,但是瀑布模型因为是文档驱动,最终交付的产品不一定符合用户需求,所以有了快速原型模型,增量模型能在软件早起就让投资者获得回报,但是需要软件具有开发体系架构,螺旋模型是风险驱动,但是需要专业的风险分析人,喷泉模型的软件生命周期是循环的,适用于面向对象范型。11:rational统一过程是一个软件开发过程框架,就是指团队可以根据具体的项目组或软件开发企业的不同需求,能够定义,配置,定制和实施一致的软件开发过程,包括3核心:用于成功开发软件的一组基本观念和原则,一套关名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - 于可重用方法内容和过程构件的框架(在框架内定义自己的开发方法和过程),基础的方法和过程定义语言。12:RUP的最佳实践:描述了一个指导开发团队达成目标的迭代式的软件开发过程,包括:迭代式开发(每次迭代过程中需求改变,每个迭代过程以完成可执行版本结束,让用户不断介入和提出意见并改进),管理需求(用脚本来确定需求),使用基于组件的架构(使用功能清晰的模块),可视化建模(可视化图形更容易令人理解,帮助人们提高管理软件复杂性的能力),验证软件质量(软件质量评估贯穿整个开发过程),控制软件变更(确保每个更改都是可接受和可跟踪的)。13:敏捷过程:宣告了以下4 个价值观:个体和交互高于过程和工具(团队合作很重要,应该根据团队成员和交互方式配置项目环境),可以使用的软件高于面面俱到的文档(主要精力放在创建),客户合作高于合同谈判(开发团队与客户密切协作),响应变化高于遵循计划(计划必须有足够的灵活性,在需要时能够迅速调整)14:极限编程:就是把好的开发实践运用到极致,广泛运用于模糊且经常改变的场合。过程:首先,项目组针对客户代表提出的要求进行讨论,对体系结构进行试探,然后项目组根据客户设定的优先级指定交付计划,然后开始多个迭代过程。迭代期中新用户故事不在本次迭代内解决,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - - - - - - 开发出的新版本软件通过验收测试之后交付用户使用。极限编程可以迅速快捷的响应变化和不确定的需求,同时保持开发速度。迭代过程:项目组根据项目速率,选择需要完成的用户需求或应该消除的差错,制定出本次迭代计划,每天举行一次站立会议解决遇到问题,调整迭代计划,开发出的新功能必须通过单元测试,立即继承,得到新的可运行版本由客户代表进行验收测试,客户代表提出问题,项目组根据问题提出新的用户要求,算出新的项目速率,并在站立会议上讨论。15: 能力成熟模型CMM :因为问题是由管理软件过程的方法不当引起的,所以新软件技术的运用并不会自动提高生产率和软件质量,能力成熟模型有助于软件开发组织建立一个有规律,成熟的软件过程,改进后的过程将开发出高质量的软件,并节约时间和经费。软件开发既包括技术方面也包括管理方面,CMM 通过改变管理方面,从而改变技术方面。16:CMM 结构:成熟度等级(对软件过程的改进的5 个步骤),过程能力(改进的软件过程实现预期结果的能力),关键过程域(完成一些关键过程域就进入下一个成熟度等级),目标(定义每个关键过程域的目的),公共特性(把关键实践归入5 个公共特性之中,指示一个关键名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - 过程域的实施和规范化是否有效),关键实践(若干个关键实践描述关键过程域)。17:软件过程:为了获得高质量软件产品所需要完成的一系列任务的框架,规定各项任务的工作步骤。传统方法学之结构化分析18:传统的软件工程采用结构化分析完成需求分析工作。19:需求分析的第一步就是尽可能准确的了解用户当前的情况和需要解决的问题,分析员对用户的要求反复求精细化,理解用户需求,得出对目标系统完整的准确的和具体的要求。结构化分析就是通过建立数据模型,功能模型,行为模型给出完整的需求规格说明书和全面的设计表示。20:与用户沟通的方法:会谈,简易应用规格说明书,软件原型。21:结构化分析实质上是一种创建模型的活动,模型可以描述用户需求,为软件设计奠定基础,定义一组需求,一旦开发出软件产品之后,就可以用这组需求为标准来验收。分析模型的核心是数据字典,围绕这个核心有三种图22:实体关系图可以数据对象描述,数据流图(就是A和 B两个数据流经过一个处理系统出来C数据)可以处理规格说明,状态转换图可以控制规格说明名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - 23:通过需求分析创建分析模型外还要写出软件规格需求说明,这是分析阶段的最终成果。24:数据字典:对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明从而是用户和系统分析员双方对输入输出存储的成分以及中间计算结果有共同的理解。25:结构化分析举例:项目:系统分析员研究学校自己的计算机生成工资明细表和各种财务报表的可能性。过程包括问题定义,可行性研究,需求分析3 阶段。(1)问题定义:考虑用户面临的问是什么,用户为什么要做这个项目,考虑项目规模,预花费的费用。(2)可行性研究:抽象和简化了的系统分析和设计的全过程,目的是以最小的代价确定问题是否可以解决。澄清系统规模和目标,研究现有系统,导出高层逻辑模型,进一步确定系统规模和目标,导出供选择的解法,推荐最佳方案,草拟开发计划,写出文档提交审查。(3)需求分析:回答“系统必须做什么”,在可行性研究的基础上,以前一段产生的文档为出发点,分析员设计出更为精确的数据流图,写出数据字典,更详尽的定义系统应该完成的每一个逻辑功能。写出文档初稿,定义逻辑系统,细化数据流图,书写正式文档,技术审查和管理复查名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - 结构化设计26:软件设计的目标是设计出所要开发的软件的模型。对软件需求有了完整,准确,具体的理解后,接下来的工作就是用软件正确的实现需求。传统的软件工程用结构化设计,把软件设计工作分为概要设计(分析软件规格说明书,对软件进行功能分解,划分模块,设计出预定模块的结构)和详细设计(详细设计每个模块的算法和数据结构)。结构化分析为结构化设计提供输入信息,由数据模型,功能模型,行为模型描述的软件需求给软件设计者,软件设计者再完成数据设计,体系结构设计,接口设计,过程设计。27:软件设计的原理:模块化(把程序划分为独立命名独立访问的模块,每个模块完成一个子功能),抽象(高层次抽象一开始以概括的方式叙述问题的解法,然后低层次抽象把面向问题的术语和面向实现的术语结合起来叙述问题的解法,最后再最低层用直接实现的方式叙述问题的解法),逐步求精(即将系统功能按层次进行分解,每一层不断将功能细化,到最后一层都是功能单一、简单易实现的模块),细节隐藏。28: 模块独立:独立的模块比较容易开发,测试和维护,耦合(一个软件结构内不同模块之间的互联程度,耦合的强度取决于模块间接口和复杂程度),内聚(一个模块内各名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - 个元素彼此结合的紧密程度),我们追求的是低耦合和高内聚。29:结构化设计启发规则:提高模块独立性,模块规模适中,深度宽度扇出扇入都要适中,模块的作用于在可控范围内,降低接口复杂度,模块单入单出,模块功能可预测。30:软件结构表示法:层次图(系统模块下面是各分模块,分模块又引出分分模块),HIPO图(在层次图的基础上家一个 IPO 表,更好的现实输入,处理,输出三部分的关系),结构图(在层次图的基础上,更详细的描述了模块的信息和之间的数据流)31:面向数据流的设计方法定义了一些不同的映射,利用这些映射可以把数据流图变换成软件结构,通常说结构化设计方法就是基于数据流的设计方案。数据流映射成信息流,信息流有变换流和事务流两种。32:人机界面设计问题:系统响应时间,用户帮助设施,出错信息处理,命令交互。人机界面设计也是一个迭代的过程,创建设计模型,创建原型,用户评估返回意见修改。33:过程设计:过程设计不仅仅是在逻辑上实现每个模块的功能,更重要的是设计出的过程简明易懂。如果一个程序的代码块仅仅通过顺序,选择,循环3 钟控制结构进行名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 17 页 - - - - - - - - - 连接,并每个代码块只有一个入口和一个出口,那么这个就是结构化程序。34:过程设计工具:程序流程图,盒图,PAD图,判定表,判定树35:面向数据结构的设计方法:不明确的使用软件结构的概念,对于模块独立原理没有给予重视,这种方法适合再详细设计阶段,完成软件结构设计之后,用面向数据结构的方法来设计每一个模块的处理过程。结构化实现36: 实现分为编码和测试。37:测试分为黑盒测试(知道了产品应具有的功能,测试每个功能能否正常使用,是在程序接口进行的测试)和白盒测试(知道产品内部工作过程,通过测试来检验产品内部动作是否按照规格说明书的规定正常进行,是在程序的每条通路测试)38:测试准则:所有的测试都应能有用户需求的根据;应该早早指定测试计划;采用二八原理;逐步测试小模块,然后测试大模块;穷举测试是不可能的;测试应由第三方来做。38.5 :设计测试方案基本目标是选用尽可能少的高校测试数据。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - 39:白盒测试方案:逻辑覆盖:语句覆盖(所有语句都走一遍),判定覆盖(判定结果的每个可能结果都执行一遍),条件覆盖(判定表达式中每个结果都走一遍),判定/ 条件覆盖(结合前面两个),条件组合覆盖(判定表达式的条件的各种组合都执行一次)40:白盒测试技术:逻辑覆盖,控制结构测试(基本路径测试,条件测试,数据流测试,循环测试)41:黑盒测试技术:等价划分,边界值分析,错误推测。42:测试 4 步骤:单元测试:最开始测试每个单独的模块,采用白盒测试,检查模块控制结构中的特定路径。集成测试:把模块装配在一起形成完整的软件包,在装配的同时进行测试,解决程序验证和程序构造两个问题,采用黑盒测试。确认测试:对软件所满足的所有功能,行为,性能需求的最终测试,采用黑盒测试。系统测试:所有系统元素都能正常配合。43:调试是在测试发现错误之后排除错误的过程。44:软件可靠性:程序在给定时间间隔内,按照规格说明书运行的概率。面向对象方法学45: 传统的软件工程方法学不适合大型软件产品的开发,现在是面向对象方法学,面向对象开发软件的时候通常建名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - 立 3 种模型:对象模型,动态模型,功能模型。对象模型是后二者的基础,是最最最核心的。46:用对象分解取代功能分解,面向过程的设计方法以算法为核心,把数据和处理过程相互分割开来。面向对象以对象为核心,对象是对世界实体的抽象,把实体的内部状态,静态属性,动态行为都封装在一个对象里面。对象之间通过传递消息通信。面向过程设计方法把精力集中在设计算法上,按照计算机的要求设计,设计者站在计算机的立场上,但是计算机和人类观点差别很大,面向对象就是站在人类观点的立场上,面向对象是一种以数据或信息为主线,把数据和处理相结合的方法,对象不被动的等待外界对它操作,而是进行处理的主体,必须发消息让对象执行对象自己的操作,而不能从外界直接对它的私有数据进行操作。47:面向对象方法学的优点:与人类习惯的思维方法一致,稳定性好,可重用性好,可维护性好,易开发大型软件。48:对象模型:对象模型表示静态的,结构化的数据,描述系统的静态结构,为后两个提供了框架。49:动态模型:表示瞬时的,行为化的系统的控制性质,规定了对象模型中的对象的合法变化系列,用状态转换图描述。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - 50:功能模型:表示变化的系统的功能性质,它指明了系统应该做什么,更直接的反应了用户的需求。51:功能模型指明做什么。动态模型规定什么时候做,对象模型规定,谁做。面向对象分析52:面向对象分析的关键在于:识别出问题域内的对象,分析他们之间的关系,最终建立3 种模型。53:面向对象分析:寻找类和对象,识别结构,识别主题,定义属性,建立动态模型,建立功能模型,定义服务。54:对象模型有5 个层次:主题层,类与对象层,结构层,属性层,服务层。55:建立对象模型:首先确定对象类和关联,对于复杂的系统还要进一步划分主题,然后给类和关联添加属性,接下来利用适当的继承关系进一步合并和组织类,最后要定义服务,不过这个步骤是在动态模型和功能模型之后的。56:建立动态模型:编写典型交互行为的脚本,从脚本中提取事件,排列事件发生的次序,比较各个对象的状态图。57:建立功能模型:画数据流图。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 17 页 - - - - - - - - - 58:定义服务:确定类中应定义的服务,包括常规行为,从事件导出的操作,与数据流图中处理框对应的操作,利用继承减少冗余操作。面向对象设计59:面向对象设计就是利用面向对象的观点求解问题域模型的过程。实际过程当中,设计和分析的界限是很模糊的,许多分析结果可以直接映射成设计结果,分析和设计是一个迭代的过程。面向对象的设计分为系统设计和对象设计。60:面向对象设计准则:模块化,抽象,信息隐藏,弱耦合,强内聚,可重用。61:启发规则:设计结果应该清晰,深度适当,类要简单,协议要简单,服务要简单,设计变动小。62:系统分解:人机交互部分,问题域部分,任务管理部分,数据管理部分。每个部分都有主题层,类与对象层,结构层,属性层,服务层。63:系统两种交换方式C/S 和 P2P。组织系统的两种方案:层次组织和块状组织。面向对象的实现64:面向对象的实现包括:把面向对象设计的结果,翻译成用某种程序设计语言书写的对象程序,测试并调试。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - 65:程序设计准则:提高可重用行,提高可扩充性,提高健壮性。66:测试策略:面向对象的单元测试测试的是封装起来的类和对象,不是模块。面向对象的确认测试是根据动态模型和描述系统行为的脚本来设计确认测试。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -