第一章软件工程概述2020/5/32目录1.1软件1.1.1软件的概念1.1.2软件的发展1.1.3软件的特点1.1.4软件的生产过程1.1.5软件的分类1.2软件工程概念1.2.1软件危机1.2.2软件工程1.2.3软件工程的原则1.3软件生存周期与软件开发模型2020/5/331.1软件1.软件的概念–通常把各种不同功能的程序,包括用户为自己的特定目的编写的程序、检查和诊断机器系统的程序、支持用户应用程序运行的系统程序、管理和控制机器系统资源的程序等称为软件。–具体表现为:①在运行中能够提供所希望的功能和性能的指令集②使程序能够正确运行的数据结构③描述程序研制过程及方法所用的文档2020/5/341.1软件2.软件的发展经历4个阶段2020/5/35Evolutionofsoftware早期第二阶段面向批处理多用户有限的分布实时自定义软件数据库软件产品19501960197019802020/5/36Evolutionofsoftware早期第二阶段第三阶段面向批处理多用户分布式系统有限的分布实时嵌入“智能”自定义软件数据库低成本硬件软件产品消费者的影响195019601970198019902020/5/37Evolutionofsoftware早期第二阶段第三阶段第四阶段面向批处理多用户分布式系统强大的桌面系统有限的分布实时嵌入“智能”面向对象技术自定义软件数据库低成本硬件专家系统软件产品消费者的影响人工神经网络并行计算网络计算机1950196019701980199020052020/5/381.1软件3.软件的特点软件是一个逻辑的而不是物理的产品。软件具有与硬件不同的特点:•软件是由开发或工程化而形成的,而不是传统意义上的制造产生的;•软件不会“磨损”;•大多数软件是自定义的,而不是通过已有构件组装的。•维护不同.2020/5/391.1软件4.软件生产过程应用系统2020/5/3101.1.4软件生产过程应用构件提取车间应用构件库领域1领域2应用系统2020/5/3111.1.4软件生产过程应用构件提取车间应用构件库构件生产车间领域1领域2应用系统12341基础构件,2功能构件3接口构件,4用户界面构件2020/5/3121.1.4软件生产过程应用构件提取车间应用构件库构件生产车间构件库组装车间领域1领域2应用系统...12341基础构件,2功能构件3接口构件,4用户界面构件2020/5/3131.1.5软件的分类基于功能划分:基于软件工作方法划分:基于软件规模划分基于软件失效的影响划分基于软件服务对象划分2020/5/3141.1.5软件的分类基于功能划分:系统软件:与计算机硬件紧密配合,使计算机各个不见与相关软件及数据协调高效工作的软件支撑软件:协助用户开发软件的工具性软件,包括帮助程序人员开发软件产品的工具和帮助管理人员控制开发软件的进程的工具应用软件:在特定领域内开发,为特定目的服务的一类软件。2020/5/3151.1.5软件的分类基于软件工作方法划分:实时处理软件:在事件或数据产生时,立即处理,并及时反馈信号,控制需要检测和控制的过程的软件。分时软件:允许多个联机用户同时使用计算机,系统把处理机事件轮流分配给各联机拥护,使各用户都感到只是自己在使用计算机的软件。交互式软件:能实现人机通信的软件批处理软件:把一组输入作业或一批数据以成批处理的方式一次运行,按照顺序逐个处理的软件。2020/5/3161.1.5软件的分类基于软件规模划分微型软件:一个人在几天之内完成的、程序不超过500行语句且仅供个人专用的软件。小型软件:一个人在半年之内完成的2000行以内的程序。中型软件:5个人以内在一年多时间里完成的5000到5万行的程序。大型软件:5至10人在两年多的时间里完成的5万到10万行的程序甚大型软件:100至1000人参加,用4到5年的时间完成的具有100万行程序的软件项目。极大型软件:2000到5000人参加,10年内完成的1000万行以内的程序。2020/5/3171.1.5软件的分类基于软件失效的影响划分关键软件的特点:可靠性质量要求高常与完成重要功能的大系统的处理不见相联含有的程序可能对人员、公众、设备或设施的安全造成影响。还可能影响到环境的质量和关系到国家的安全和机密。2020/5/3181.1.5软件的分类基于软件服务对象划分定制软件:受某个特定客户的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。产品软件:由软件开发机构开发出来直接提供给时常,或是为千百个用户服务的软件。2020/5/3191.2软件工程概念“软件工程”术语首次出现:1968年NATO会议软件工程方法:是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。2020/5/3201.2.1软件危机软件危机:软件开发和维护过程中遇到的一系列严重问题2020/5/3211.2.1软件危机软件危机的主要特征软件开发周期大大超过规定日期;软件系统开发成本高,周期长,质量差,满足不了市场需求;软件质量无保证软件系统开发人员数量少,质量低.软件系统维护难度大.软件开发缺乏合适的工具和方法软件的版权问题得不到保证2020/5/322改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.5(美元)(人天)2020/5/323yet,SuccessHasntComeEasily31%53%16%Successfully(成功)Challenged(挑战)Canceled(失败)2020/5/324软件成功的标准:用户在使用用户使用软件很容易做完要做的事失败的根本原因:开发人员写出的软件达不到用户要求:•人的能力问题.•当前技术发展问题•系统平台问题2020/5/325中国软件产业:挑战挑战:外国软件打入软件侵权行为软件开发投资力度不足软件人才结构不合理,缺乏高级系统程序员和项目负责人。软件人员缺乏软件工程化的概念。2020/5/3261.2.2软件工程(softwareengineering)什么是软件工程?软件工程是应用计算机科学、数学及管理科学等原理开发软件的工程。它借鉴传统工程的原则、方法,以提高质量,降低成本为目的。软件工程为了经济地获得可靠的和能在实际机器上高效运行的软件而建立和使用的好的工程原则。2020/5/3271.2.2软件工程(softwareengineering)软件工程一种层次化结构工具方法过程质量焦点Softwareengineeringlayers2020/5/3281.2.2软件工程(softwareengineering)软件工程一种层次化结构质量焦点:支持软件工程的根基就在于对质量的关注。过程:软件工程的过程将技术层结合在一起,使计算机软件合理和及时开发出来。方法:涵盖一系列的任务:需求分析、设计、编程、测试和维护。工具:对过程、方法提供自动或半自动的支持。例CASE集成软件、硬件或一个软件工程数据库。2020/5/329软件工程是一门交叉学科软件开发模型软件开发方法软件立项到终止的全过程软件开发工具软件开发环境计算机辅助软件工程(CASE)软件工程管理软件工程经济学软件工程的主要研究内容2020/5/330软件工程框架可用性性性确正合算选取适宜的开发模型采用合适的设计方法提供高质量的工程支持重视软件工程的管理基本过程原则目标过程支持过程组织过程2020/5/331“软件工程”课程的教学与实践(1)立足于系统的整体。(2)讲授系统分析、系统需求、系统设计、系统实现、系统测试及维护的理论和方法。(3)运用所学软件和技术构筑一理想的系统。与其它软件专业课的区别:2020/5/332“软件工程”课程的教学与实践对软件的认识:上升程序系统思维定式:上升程序员系统工程师(系统分析员)2020/5/333系统分析员的地位用户分析员程序员2020/5/334“一个好的工业,应有一套良好的标准来配套”软件的工业化生产过程应具备的特点:•明确的工作步骤•详细具体的规范化文档•明确的质量评价标准1.2.2软件工程(softwareengineering)2020/5/335软件工程技术的两个明显特点:强调规范化强调文档化1.2.2软件工程(softwareengineering)2020/5/3361.分解基本思想:从时间上或规模上将一个复杂抽象问题分成若干较小的、相对独立的、容易求解的子问题,然后分别求解。例:软件瀑布模型、结构化分析方法、模块化设计等都运用了分解原则1.2.3软件工程的原则2020/5/3372.抽象和信息隐蔽尽量将可变因素隐藏在一个模块内,将处理细节隐藏在下层,而将具体做什么抽象到上一层做简化,从而保证模块的独立性。1.2.3软件工程的原则2020/5/3383.一致性软件文件格式一致工作流程一致开发过程标准化、统一化1.2.3软件工程的原则2020/5/3394.确定性软件开发过程要用确定的形式表达需求,表达的软件功能应该可预测。1.2.3软件工程的原则2020/5/3401.3.1软件生存周期SoftwareLifeCycle软件产品或软件系统从提出、设计、投入使用到被淘汰的全过程。软件生存周期的阶段:问题定义可行性分析需求分析概要设计详细设计编码测试运行与维护2020/5/3411.3.2软件开发模型软件开发模型是跨越整个软件生存周期的系统开发、运做、维护所实施的全部工作和任务的结构框架。2020/5/3421.3.2.1瀑布模型可行性研究与计划需求分析设计编码运行维护测试定义阶段开发阶段维护阶段2020/5/3431.3.2.1瀑布模型特点阶段间具有顺序性和依赖性。推迟实现的观点。每个阶段必须完成规定的文档每个阶段结束前完成文档审查,及早改正错误。2020/5/3441.3.2.2原型模型又称快速成型模型一般用于最终系统的早期用户评价,开发工期短,质量有保证2020/5/3451.3.2.2原型模型听取用户意见建造/修改原型用户测试运行原型模型范型原型化软件生存期模型系统需求分析定义生成原型系统设计程序设计编码测试运行和维护原型化含原型化的软件生存期2020/5/3471.3.2.2原型模型优点①可以处理模糊需求②原型模型系统可以作为培训环境,有利于用户培训③给用户更改系统的机会④可以降低系统开发风险⑤易维护、友好⑥开发费用降低、时间缩短2020/5/3481.3.2.2原型模型缺点①易把次要部分当作主要框架,作出原型不切题②原型迭代可能不收敛。③原型过快收敛,忽略了一些基本点④资源规划和管理比较困难⑤容易遗忘用户环境和原型环境的差异。2020/5/3491.3.2.3演化模型针对事先不能完整定义需求的软件开发开发过程(1)根据用户给出的待开发系统的核心需求,先开发出核心系统。(2)用户试用后,提出精化系统、增强系统能力的需求,开发人员实施开发的迭代过程。需求设计需求编码测试集成运行、试用核心系统开发设计需求编码测试集成运行、试用第二次迭代反馈反馈演化模型风险分析工程实施制定计划客户评估ProductMaintenanceProjects产生维护计划ProductEnhancementProjects产生增加计划NewProductDevelopmentProjects新产生发展计划ConceptDevelopmentProjects发展的观点1.3.2.4螺旋模型2020/5/3521.3.2.4螺旋模型制定计划:确定软件目标,选定实施方案,弄清项目开发的限制条件风险分析:分析所选的方案,考虑如何识别和消除发风险实施工程:实施软件开