




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第一章1什么是软件危机?它有哪些典型表现?为什么会产生软件危机?软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题表现在以下几个方面:(1)用户对开发出的软件很难满意。(2)软件产品的质量往往靠不住。(3)一般软件很难维护。(4)软件生产效率很低。(5)软件开发成本越来越大。(6)软件成本与开发进度难以估计。(7)软件技术的发展远远满足不了计算机应用的普及与深入的需要。产生软件危机的原因(1) 开发人员方面,对软件产品缺乏正确认识,没有真正理解软件产品是一个完整的配置组成。造成开发中制定计划盲目、编程草率,不考虑维护工作的必要性。 (2) 软件本身方面,对于计算机系统来说,软件是逻辑部件,软件开发过程没有统一的、公认的方法论和规范指导,造成软件维护困难。(3) 尤其是随着软件规模越来越大,复杂程度越来越高,原有软件开发方式效率不高、质量不能保证、成本过高、研制周期不易估计、维护困难等一系列问题更为突出,技术的发展已经远远不能适应社会需求。2假设自己是一家软件公司的总工程师,当把图1.1给手下的软件工程师们观看,告诉他们及早发现并改正错误的重要性时,有人不同意这个观点,认为要求在错误进入软件之前就清除它们是不现实的,并举例说:“如果一个故障是编码错误造成的,那么,一个人怎么能在设计阶段清楚他呢?”应该怎样反驳他? 反驳:发生在编码时期的故障极有可能是需求分析阶段由于操作不当产生的,所以必须及时消除错误,否则,到了后期软件运行和维护阶段再回过头来修改,将会付出更大的代价。3什么是软件工程?它有哪些本质特性?怎样用软件工程消除软件危机?软件工程是指导计算机软件开发和维护的工程学科。(1) 它采用工程的概念、原理、技术和方法来开发和维护软件;(2) 它将管理技术与当前经过时间考验的而证明是正确的技术方法结合起来;(3) 它强调使用生存周期方法学和结构分析和结构技术;(4) 经过人们长期的努力和探索,围绕着实现软件优质高产这个目标,从技术到管理两个方面做了大量的努力,逐渐形成了软件工程学这一新的学科。消除软件危机的措施:(1)对计算机软件有一个正确的认识(软件程序)(2)必须充分认识到软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。(3)推广使用在实践中总结出来的开发软件的成功技术和方法。(4)开发和使用更好的软件工具& 1. 技术措施推广和使用在实践中总结出的好的软件开发技术和方法,并不断探索和研究更有效的技术。开发和使用更好的软件工具,包括采用好的开发工具,系统分析和辅助设计工具等,以提高工作效率。 & 2. 管理措施吸收和借鉴人类长期以来从事各类工程项目所积累的行之有效的原理、概念、技术和方法4. 软件生命周期的定义: 一个软件从定义、开发、使用和维护,直到最终被废弃为止的整个过程 软件生命周期的构成:5. 软件生命周期的各个阶段和任务: 定义时期:问题定义 可行性研究 需求分析开发时期:总体设计 详细设计 编码和单元测试 综合测试维护时期:综合测试(1)问题定义:通过对系统实际用户和使用部门负责人的访问调查,明确要解决问题性质、工程目标和规模。(2) 可行性研究:导出系统的高层逻辑模型(数据流图),并在此基础上更准确、更具体的确定工程的规模和目标;更准确的估计系统的成本和效益。(3) 需求分析:和用户密切配合,充分交流信息,以得到用户确认的系统逻辑模型(数据流图、数据字典及简要的算法表示的系统逻辑模型)。(4) 总体设计: 1)提出几种可能的解决方案,权衡各种方案的利弊,并推荐出最佳方案; 2)设计软件的结构,确定软件的模块构成及模块之间的关系。(5) 详细设计:把解决问题的方案具体化,设计出程序的详细规格说明,并包含必要的细节信息。 (6) 编码和单元测试:将详细设计的结果翻译成高级程序设计语言的源程序,并仔细测试编写的每一个模块。(7)综合测试:通过各类型的严格测试与调试,使软件达到预定的要求。1)集成测试:各模块装配后测试;2)验收测试:按规格说明书。(8) 软件维护:通过必要的维护工作使得系统持久的满足用户的需要: 1)改正性维护;2)适应性维护; 3)完善性维护;4)预防性维护6.软件工程的定义: 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的技术方法结合起来,来指导软件的开发与维护7.软件工程的基本原理:(1) 用分阶段的生命周期计划严格管理 项目概要计划,里程碑计划,项目控制计划,产品控制计划,验证计划,运行维护计划。(2)坚持进行阶段评审(评审过程) 每个阶段都进行严格的评审,以便尽早发现错误。(3)实行严格的产品控制 实行基准配置(经过阶段评审后的软件配置成份,包括文档和程序代码)对软件的修改进行严格管理。(4)采用现代的程序设计技术 结构化分析(SA)与设计(SD) ;面向对象的分析(OOA)与设计 (OOD)。(5) 结果能清楚的审查 规定开发组织的责任和产品标准。(6) 开发小组的人员应该少而精 成员素质要好,人数不宜过多。(7)承认不断改进软件工程实践必要性8.软件工程方法学定义: 通常把在软件生命周期全过程中使用的一整套技术方法的集合成为(亦为范型)9软件工程方法学的三要素:方法、工具、过程10. 软件工程方法学的包括: 简述结构化范型和面向对象范型的要点,并分析它们的优缺点 传统方法学(生命周期方法学/结构化范型)(1)仍然是使用十分广泛的软件工程方法学。(2)采用结构化技术来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。(3)从上而下,顺序地完成软件开发的各阶段任务面向对象的方法学(1)出发点和基本原则是尽量模拟人类习惯的思维方式,使开发软件的方法与过程尽可能接近人类认识实践解决问题的方法与过程,从而使描述问题的问题空间与实现解法的解空间在结构上尽可能一致(2)把对象作为融合了数据及在数据上的操作行为的统一软件构件;(3)把所有对象都划分成类;(4)按照父类与子类的关系,把若干个相关类组成一个层次结构的系统;(5)对象彼此间仅能通过发送消息互相联系11 什么是软件生命周期模型? 模型分类? 软件开发过程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。 亦称为: 软件开发模型软件生存期模型 分类(1)瀑布模型 (2)快速原型模型 (3)增量模型 (4)螺旋模型(5)喷泉模型12试比较瀑布模型、快速原型模型、增量模型和螺旋模型的优缺点,说明每种模型的适用范围?瀑布模型:【适用领域】:用户需求清楚的表达优点:1.可强迫开发员采用规范的方法 2.严格地规定了每个阶段必须提交的文件 3.要求每个阶段交出的所有产品都必须经过质量保证小组的仔细验证。缺点:传统的瀑布模型过于理想化,是由文档驱动的。快速原型模型:(1) 一般用于最终系统的早期用户评价,开发工期短,质量有保证(2)软件产品的开发基本是线性顺序进行的,加速软件开发,节省软件开发成本【适用领域】:事先不能完整定义需求的领域增量模型:【适用领域】:用户逐步需求提交产品 (1)先完成一个系统子集的开发,再按同样的开发步骤增加功能 (系统子集),如此递增下去直至满足全部系统需求。(2)系统的总体设计在初始子集设计阶段就应作出设想13软件开发方法:软件开发过程所遵循的方法和步骤开发过程一般包括:需求、设计、实现、确认等活动主要针对需求和设计的典型方法: 结构化方法 (SASD) 面向数据结构方法(OSD) 面向对象方法(OO)第二章1在软件开发的早期阶段为什么要进行可行性研究?z可行性研究的目的:就是用最小的代价在尽可能短的时间内确定问题是否能够解决。2. 可行性研究的任务?应该从哪方面研究目标系统的可行性?可行性研究的任务:1.进一步分析和澄清问题;2.导出系统的逻辑模型;3.从逻辑模型出发,提出若干种系统实现方案 4.研究每种实现方案的可行性:z技术上的可行性 使用现有的技术能实现这个系统吗?z经济上的可行性 这个系统的经济效益能超过它的开发成本吗(投资与效益)z操作可行性 系统的操作方式在这个用户组织内行得通吗?z社会、政策允许的可行性5.为每个可行的解决方案制定一个粗略的实现进度6.对以后的行动方针提出建议3数据词典(DD)的定义、组成、用途、例子: (1)定义:描述数据流图中数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。它对数据流图上每一个成分:数据项、文件(数据结构)、数据流、数据存储、加工和外部项等给以定义和说明;(2)组成:由数据流、数据流分量(即数据元素)、数据储存、处理四部分组成。对用户来讲,数据字典为他们提供了数据的明确定义;对系统分析员来讲,数据字典帮助他们比较容易修改已建立的系统逻辑模型 (3)用途:a.作为分析阶段的工具,与数据流图共同来完整的描述一个系统。数据流图只描述了系统的逻辑模型,但是没有给出数据及各个加工处理过程的具体含义;而数据字典则是其有益的补充。b.数据字典中包含的每个数据元素的控制信息是很有价值的。c.开发数据库的基础。(4)例子: 4可行性研究报告的主要内容/步骤?可行性分析的结果是可行性研究报告,内容包括:(1) 系统概述:说明开发的系统名称,提出单位和开发单位。 (2) 可行性研究的前提:系统目标;要求;约束和限制;可行性研究的基本准则等。(3) 对现有系统的分析:处理流程,图示说明现有系统的处理流程和数据流程;现有系统存在的问题。 (4) 系统需求:主要功能;主要性能及其要求;操作要求;信息要求;限制性要求。(5) 建议系统:系统目标;处理流程;系统结构,功能,性能;系统技术可行性;投资和效益分析;操作可行性;法律可行性。(6) 其它可选方案:与国内外同类型方案的比较;提出一两个可行性方案供论证和探讨。(7) 制定下一阶段的预算。(8) 结论性意见:由用户方、设计方和投资方共同签署意见。5可行性研究过程的步骤/怎样进行可行性研究? (1)复查系统规模和目标 (2)研究目前正在使用的系统 (3)导出新系统的高层逻辑模型(4)进一步定义问题(5)导出和评价供选择的解法(6)推荐行动方针(7)草拟开发计划(8)书写文档提交审查6系统流程图: 基本符号 系统符号 7.数据流图(DFD):是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换 8. 数据流图的用途: (1)作为交流信息的工具(2)作为分析和设计的工具9.计算机储蓄系统。储户填写的存款单或者取款单由业务员输入系统,如果是存款,系统记录存款人姓名、住址、存款类型、存款日期、利率等信息,并印出存款单给储户;如果是取款,系统计算利息并印出利息清单给储户。写出问题定义并分析此系统的可行性。10.机票预订系统。旅行社把预订机票的旅客信息(姓名、性别、工作单位、身份证号码、旅行时间、旅行目的地等)输入进该系统,系统为旅客安排航班,印出取票通知和账单,旅客在飞机起飞的前一天凭取票通知和账单交款取票,系统校对无误即印出机票给旅客。写出问题定义并分析此系统的可行性。11成本/效益分析: 第三章1需求分析的基本任务是什么?准确定义未来系统的目标,确定为了满足用户的需要系统必须做什么需求分析的8大任务: (1)功能需求 (2)性能需求 (3)可靠性和可用性需求 (4)出错处理需求(5)接口需求 (6)约束 (7)逆向需求 (8)将来可能提出的要求2导出系统的逻辑模型,通常用:数据流图、实体联系图、状态转换图、数据字典、和主要的算法描述这个逻辑模型。3.与用户沟通获取需求的方法:(1)访谈、分发调查表、情景分析技术(2)面向数据流自顶下下求精(3)简易的应用规格说明书(4)快速建立软件原型4访谈分类:正式的访谈、非正式的访谈5情景分析技术的用处主要体现在以下两个方面: (1)它能在某种程度上演示目标系统的行为,从而便于用户解释,而且还可以进一步揭示出一些分析员目前还不知道的需求。(2)由于情景分析较易为用户所理解,使用这种技术能保证用户在需求分析的过程中始终扮演一个积极主动的角色。6(1)结构化分析方法:就是面向数据流自顶向下逐步求精进行需求分析的方法。(2)结构化分析实质上是一种创建模型的活动。(3)根据结构化分析准则,需求分析过程应该建立3种模型:数据模型、功能模型、行为模型(4)实体-联系图(ERD)描绘数据对象及数据对象之间的关系,用于建立数据模型的图形。(5)数据流图描绘数据在软件中移动时被变换的逻辑过程,指明系统具有的变换数据的功能,数据流图是建立功能模型的基础。(6)状态转换图(状态图STD)指明作为外部事件结果的系统行为。状态转换图描绘系统的各种行为模式和在不同状态间转换的方式。状态转换图是行为建模的基础。7从哪些方面验证软件需求的正确性? 一致性、完整性、现实性、有效性8. 验证软件需求的的方法: (1)验证需求的一致性:软件工具(2)验证需求的现实性:仿真或性能模拟技术(3)验证需求的完整性和有效性:只有在用户的密切合作下才能完成9.需求分析的描述工具有哪些?有数据流图、数据字典、判定表、判定树、结构化自然语言、层次方框图、Warnier图、IPO图和需求描述语言等第五章、总体设计(系统设计+概念设计)1总体设计的组成:系统设计阶段确定系统的具体实现方案 具体实现方案:结构设计阶段确定软件结构设计的目的/标:在于形成软件的一种层次的可对底层结点交叉引用的模块化结构2总体设计过程9个步骤: (1)设想供选择的方案(2)选取合理的方案(3)推荐最佳方案(4)功能分解(5)设计软件结构(6)设计数据库(7)知道测试计划(8)书写文档(9)审查和复审3书写文档时通常有以下几种? (1)系统说明:主要内容包括系统流程图描绘的系统构成方案,组成系统物理元素清单,成本/效益分析;对最佳方案的概括描述,精化的数据流图,用层次图或结构图描绘的软件结构,用IPO图或其他工具简要描述的各个模块的算法,模块间的接口关系,以及需求、功能、模块三者之间的交叉参照关系等(2)用户手册 根据总体设计阶段的结果,修改更正正在需求分析阶段产生的初步的用户手册(3)测试计划 包括测试策略,测试方案,预期的测试结果,测试进度计划(4)详细的实现计划(5)数据库设计结果4(1)设计原理: 模块化、抽象、逐步求精、信息隐藏和局部化、模块独立(2) 抽象(Abstraction):解决问题时只考虑与问题有关的方面,不考虑与问题无关的方面。即抽出事物的本质特性而不考虑细节(3)逐步求精定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。人类解决复杂问题时采用的基本方法,也是许多软件工程技术(例如,规格说明技术,设计和实现技术)的基础作用:帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节将留到以后再考虑(4)信息隐蔽的含义: 有效的模块化可以通过定义一组独立模块来实现,这些模块相互之间只交流软件功能必需的信息。目的: 提高模块的独立性,减少修改或维护时的影响面。(5)信息局部化:把关系密切的软件元素物理地放得彼此靠近。优点:可维护性好、可靠性好、可理解性好5模块化(Modularity) ?模块设计的准则?是按规定的原则将一个大型软件划分为一个个较小的、相对独立但又相关的模块。准则:(1) 改进软件结构, 提高模块独立性:在对初步模块进行合并、分解和移动的分析、精化过程中力求提高模块的内聚,降低藕合。(2) 模块大小要适中:大约50行语句的代码,过大的模块应分解以提高理解性和可维护性;过小的模块,合并到上级模块中。(3) 软件结构图的深度、宽度、扇入和扇出要适当。一般模块的调用个数不要超过5个。(4) 尽量降低模块接口的复杂程度;(5) 设计单入口、单出口的模块。(6) 模块的作用域应在控制域之内:6模块?特征?总体设计主要考虑什么特征?(1)模块是数据说明、可执行语句等程序对象的集合,可以单独命名且可通过名字来访问。(2)模块具有输入和输出(参数传递)、功能、内部数据结构(局部变量)和程序代码四个特性。(3)概要设计主要考虑输入、输出(参数传递)和功能两个特性7.模块独立:的概念是模块化、抽象、信息隐藏、局部化概念的直接结果特点:具有特定子功能、接口简单 衡量标准:1. 耦合:亦称块间联系,衡量不同模块间相互依赖的紧密程度,为独立性的直接衡量。2. 内聚:亦称块内联系,模块内各部分(语句或段落)之间结合的紧密程度。耦合性是模块间相互依赖程度的度量,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。(耦合性越高,模块独立性越弱)耦合强度依赖的因素: 一模块对另一模块的引用一模块向另一模块传递的数据量一模块施加到另一模块的控制的数量模块间接口的复杂程度去除模块间控制耦合的方法:(1)将被调用模块内的判定上移到调用模块中进行(2)被调用模块分解成若干单一功能模块如何降低模块间耦合度:(1) 如模块必须存在耦合,选择适当的耦合类型原则:尽量使用数据耦合少用控制耦合 限制公共耦合的范围 坚决避免使用内容耦合(2) 降低模块间接口的复杂性 内聚性: 一个模块内部各成分之间相互关联的强度 耦合、内聚与模块独立性关系 耦合与内聚都是模块独立性的定性标准,都反映模块独立性的良好程度。但耦合是直接的主导因素,内聚则辅助耦合共同对模块独立性进行衡量。8.启发规则:(1)改进软件结构提高模块独立性(2)模块规模应该适中(3)宽度、深度、扇出、扇入都应适当(4)模块的作用域应该在控制域之内(5)力争降低模块接口的复杂程度(6)设计单入口单出口的模块(7)模块功能应该可以预测名称解释:(1) 深度:表示软件结构中控制的层数,粗略的标志了一个系统的大小和复杂程度(2) 宽度:软件结构内同一个层次上的模块总数的最大值。一般来说,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。(3) 扇出:是一个模块直接控制(调用)的模块数模,扇出过大意味着模块过分复杂,需要控制盒协调过多的下级模块。9.描绘软件结构的图形工具:(1)层次图(Hierarchy图)和HIPO图(带编号)(2)结构图(SC)10.(1) IPO图是输入、处理、输出图的简称,它是美国IBM公司发展完善起来的一种图形工具,能够方便地描绘输入数据、对数据的处理和输出数据之间的关系。(2)IPO图的基本形式是:A.在左边的框中列出有关的输入数据,B.在中间的框内列出主要的处理,C.在右边的框内列出产生的输出数据。11. 层次图和结构图小结1、层次图和结构图并不严格表示模块的调用次序。多数人习惯于按调用次序从左到右画模块,但并没有这种规定,出于其他方面的考虑,例如为了减少交叉线,也完全可以不按这种次序画。2、层次图和结构图并不指明什么时候调用下层模块。3、层次图和结构图只表明一个模块调用那些模块,至于模块内还有没有其他成分则完全没有表示。12.面向数据流的设计方法 (1)面向数据流的设计方法是把信息流映射成软体结构,信息流的类型决定了映射的方法。(2)信息流的两种类型:变换流 事务流(3)事务流/事务中心完成的任务:接收输入数据 分析每个事务以确定它的类型 根据事务类型选取一条活动通路(4) 面向数据流方法的设计过程:(5) 设计步骤: 复查基本系统模型 复查并精华数据流图 确定数据流图具有变换特性还是事务特性 确定输入流和输出流的边界,从而孤立出变换中心 完成“第一级分解” 完成“第二级分解” 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化(6)设计步骤的目的:开发出软件的整体表示。即一旦确定了软件结构就可以把它作为一个整体来复查,从而能够评价和精化软件结构(7)概要设计与详细设计的区别概要设计就是设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。详细设计阶段就是为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。第六章、详细设计1程序(过程)设计工具1. 程序流程图 2. 盒图(N-S图) 3. 问题分析图(PAD)4. 过程设计语言(PDL)(伪码) 5. 判定表2详细设计工具:(1) 图形工具 (2) 表格工具 (3) 语言工具3结构程序设计?(1)完成软件模块过程设计的一种重要技术(2)所有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时间管理培训课件讲解
- 时间的速度课件
- 小鸟造房子课件
- 时装画速写课件
- 2025餐饮业团餐配送合同集成手册
- 二零二五版城市综合体LED大屏广告租赁管理协议
- 2025版绿色金融借款合同示范文本
- 二零二五版离婚协议书:房产债务分割与处理细则
- 二零二五年度别墅借款抵押交易合同模板
- 二零二五年度商用空调安装与能耗优化合同范本
- 华为质量回溯(根因分析与纠正预防措施)模板
- 2023版评审准则和CNAS对照表
- 收养申请人情况声明
- CATIA CAA 二次开发详细教程(11) 程序的发布
- 分布式光伏发电项目可行性分析报告(方案)讲解演示模板ppt课件-图文
- 手持电动工具培训
- 高空作业安全刷漆施工方案
- 医疗康养项目运营方案
- 保密档案培训课件
- 建筑施工重要环境因素清单控制清单
- 混凝土冬季施工热工计算表
评论
0/150
提交评论