1《软件工程导论》主讲人:谭文安博士/教授Tel:021-50215021-8044Email:twajsj@sohu.com上海第二工业大学计算机学院软件工程导论参考教材:1、2、张海藩编著,《软件工程导论》(第3版),清华大学出版社2001年9月ISBN7-302-07321-X3、曾强聪主编,《软件工程》,高等教育出版社;ISBN7-04-015743-84、张为群主编,《软件工程》,高等教育出版社;ISBN7-04-010177-7本课程的内容:分方法、技术和管理三个层次。先行课程:数据库系统概论、操作系统、计算机网络学时与学分:授课学时:48学时软件工程导论教学目的:通过课程学习,全面了解软件开发的完整过程;初步理解并掌握软件开发过程中各个阶段支持软件开发的基本理论、方法技术、标准规范、表达工具和符号系统;把握软件工程的发展方向;为今后在社会实践、毕业论文、毕业设计中能理论联系实际参与实际项目开发打下基础。软件工程导论具体要求:培养学生对软件项目实施工程化、规范化、文档化、标准化开发的自主意识;熟练掌握结构化方法学中的基于数据流、基于数据结构的方法;了解并掌握面向对象开发方法;能书写标准化的阶段性文档,特别是《用户需求规格说明书》、《软件总体设计方案》、《模块详细设计任务书》这三份文档;要求学生在老师指导下能根据实际完成一个小型项目的开发。软件危机的主要特征软件开发周期大大超过规定日期;软件系统开发成本高,周期长,质量差,满足不了市场需求;软件质量无保证软件系统开发人员数量少,质量低.–软件系统维护难度大.–软件开发缺乏合适的工具和方法–软件的版权问题得不到保证软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。第一章软件危机与软件工程第一章软件危机与软件工程§1.1软件工程发展历史§1.1软件工程发展历史第一章软件危机与软件工程“软件工程”术语首次出现:1968年德国NATO会议软件工程方法:是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验证明正确的先进的管理技术和当前能够得到的最好的技术方法结合起来,应用于软件的全生命开发周期过程,实现在约定的交付期内,最经济的开发出质量合格的软件产品。软件工程方法:是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验证明正确的先进的管理技术和当前能够得到的最好的技术方法结合起来,应用于软件的全生命开发周期过程,实现在约定的交付期内,最经济的开发出质量合格的软件产品。2Evolutionofsoftware早期面向批处理有限的分布自定义软件19501960Evolutionofsoftware早期第二阶段面向批处理多用户有限的分布实时自定义软件数据库软件产品1950196019701980Evolutionofsoftware早期第二阶段第三阶段面向批处理多用户分布式系统有限的分布实时嵌入“智能”自定义软件数据库低成本硬件软件产品消费者的影响19501960197019801990Evolutionofsoftware早期第二阶段第三阶段第四阶段面向批处理多用户分布式系统强大的桌面系统有限的分布实时嵌入“智能”面向对象技术自定义软件数据库低成本硬件专家系统软件产品消费者的影响人工神经网络并行计算网络/网格计算195019601970198019902000软件的特点软件是一个逻辑的而不是物理的产品。软件具有与硬件不同的特点:软件是由开发或工程化形成的,而不是传统意义上的制造产生的;软件工厂软件不会“磨损”;大多数软件是自定义的,而不是通过已有构件组装的。软件构件技术维护方式不同.螺旋开发过程,进化过程应用系统软件生产过程软件生产过程3软件生产过程应用构件提取车间应用构件库构件生产车间行业参考构件库组装车间领域1领域2应用系统...12341基础构件,2功能构件3接口构件,4用户界面构件构件库建设过程构件库建设过程应用系统建设过程应用系统建设过程软件技术面临的问题:软件复杂性例:1Windows95程序超过1000万行2WWMCCS(军事和控制)花费3500多人拖了几年,交付后发显出100个错误。最后失败。3城市银行出纳机程序7.8万行,150人年软件生产率OO技术(软件IC)改正一个问题需付出的代价需求分析结构设计详细设计编码集成测试系统测试现场改正一个问题的估计费用改正一个问题估计的工作量20200200010005.02.50.050.5(美元)(人天)yet,SuccessHasntComeEasily31%53%16%Successfully(成功)Challenged(挑战)Canceled(失败)成功的标准:用户在使用用户使用软件很容易做完要做的事失败的根本原因:开发人员写出的软件达不到用户要求:–人的能力问题.–当前技术发展问题–系统平台问题中国软件产业:挑战与机遇挑战:外国软件打入软件侵权行为软件开发投资力度不足软件人才结构不合理,缺乏高级系统程序员和项目负责人软件人员缺乏软件工程化的概念4软件工程(softwareengineering)软件工程是借鉴系统工程的原则、方法,应用计算机科学、数学及管理科学等原理开发软件的工程。它以提高质量,降低成本为目的。软件工程为了经济地获得可靠的和能在实际机器上高效运行的软件,而建立和使用的好的工程原则。“三只腿组成的桌子工程”=Q+C+T软件工程——一种层次化技术工具方法过程质量焦点SoftwareengineeringlayersSoftwareengineeringlayers软件工程——一种层次化技术质量焦点质量焦点:支持软件工程的根基就在于对质量的关注。过程:过程:软件工程的过程将技术层结合在一起,使计算机软件合理和及时开发出来。方法方法:涵盖于一系列的任务:需求分析、设计、编程、测试和维护。工具工具:对过程、方法提供自动或半自动的支持例如:CASE集成软件、硬件或一个软件工程数据库。软件工程是一门交叉学科软件开发模型软件开发方法软件立项到终止的全过程软件开发工具软件开发环境计算机辅助软件工程(CASE)软件工程管理软件工程经济学软件工程的软件工程的主要研究内容主要研究内容软件工程框架原则目标可用性性性确正合算选取适宜的开发模型采用合适的设计方法提供高质量的工程支持重视软件工程的管理基本过程过程支持过程支持过程组织过程组织过程“软件工程”课程的教学与实践(1)(1)立足于立足于系统系统的整体。的整体。(2)(2)讲授系统分析、系统需求、系统设计、系讲授系统分析、系统需求、系统设计、系统实现、系统测试及维护的统实现、系统测试及维护的理论和方法理论和方法。。(3)(3)运用所学软件技术构筑一运用所学软件技术构筑一理想理想的系统。的系统。与其它软件专业课的区别:与其它软件专业课的区别:5“软件工程”课程的教学与实践对软件的认识:上升程序系统思维定式:上升程序员系统工程师(系统分析员)系统分析员的地位用户分析员程序员“一个好的工业,应有一套良好的标准来配套”软件的工业化生产过程应具备的特点:明确的工作步骤详细具体的规范化文档明确的质量评价标准软件工程技术的两个明显特点:强调规范化强调文档化§1.2软件生存周期1.2.1软件全生命周期(SoftwareLifeCycle)软件产品或软件系统从提出、设计、投入使用到被淘汰的全过程。具体包括软件项目计划、需求分析、系统设计、软件编码、软件测试、系统运行与维护几阶段。软件系统开发方法软件系统开发方法–结构化开发方法(瀑布模型)–快速原型方法–面向对象开发方法–CASE方法11软件工程和软件生命周期软件工程和软件生命周期为什么称为软件生命周期?为什么称为软件生命周期?T软件生命周期费用效益人的生命周期T费用贡献(1)制定计划(2)需求分析和定义(3)软件设计(4)程序编写(5)软件测试(6)运行/维护2软件生存期的步骤2软件生存期的步骤6软件生存期的阶段划分(国标《计算机软件开发规范》)(1)可行性研究与计划(2)需求分析(3)总体设计(4)详细设计(5)实现(6)集成测试(7)确认测试(8)使用和维护下游下游上游上游只考虑编写程序涉及整个软件生存周期扩展到软件工程的范围1.2.2软件过程模型软件过程模型是软件开发全部过程、活动和任务的结构框架。它能直观表达软件开发全过程,明确规定要完成的主要活动、任务和开发策略。可分为三类过程:最基本的软件开发过程、支持过程和组织过程。软件过程必须科学、合理,才能开发出高质量的软件产品。软件过程模型也常称为:软件开发模型软件生存期模型软件工程范型ProcessProcessInputInputOutputOutputSupportSupportOrganizationOrganizationSoftwareprocessSoftwareprocess业务需求业务需求业务系统业务系统软件生存期模型可归结为三大类瀑布模型原型模型OO模型1.瀑布模型(线形顺序模型)可行性研究与计划需求分析设计编码运行维护测试定义阶段开发阶段维护阶段按照传统瀑布模型开发软件的特点1)阶段间具有顺序性和依赖性。2)推迟实现的观点。3)每个阶段必须完成规定的文档;每个阶段结束前完成文档审查,及早改正错误。72.原型模型又称快速成型模型一般用于最终系统的早期用户评价,开发工期短,质量有保证原型范型:听取用户意见听取用户意见建造/修改原型建造/修改原型用户测试运行原型用户测试运行原型原型化软件生存期模型系统需求分析定义生成原型系统设计程序设计编码测试运行和维护原型化含原型化的软件生存期3.演化模型针对事先不能完整定义需求的软件开发演化模型开发过程(1)根据用户给出的待开发系统的核心需求,先开发出核心系统。(2)用户试用后,提出精化系统、增强系统能力的需求,开发人员实施开发的迭代过程。需求设计需求编码测试集成运行、试用核心系统开发设计需求编码测试集成运行、试用第二次迭代反馈反馈演化模型4.螺旋模型ProductMaintenanceProjects产品维护计划ProductMaintenanceProjects产品维护计划ProductEnhancementProjects产品增强计划ProductEnhancementProjects产品增强计划NewProductDevelopmentProjects新产品发展计划NewProductDevelopmentProjects新产品发展计划ConceptDevelopmentProjects概念开发计划ConceptDevelopmentProjects概念开发计划风险分析工程实施制定计划客户评估5.增量模型(递增模型、增殖模型)先完成一个系统子集的开发,再按同样的开发步骤增加功能(系统子集),如此递增下去直至满足全部系统需求。系统的总体设计在初始子集设计阶段就应作出设想。8增量模型分析设计编码测试分析设计编码测试分析设计编码测试分析设计编码测试增量1增量1增量2增量2增量3增量3增量4增量4交付的增量1交付的增量1交付的增量2交付的增量2交付的增量3交付的增量3交付的增量4交付的增量4日历时间日历时间6.喷泉模型演化分析设计实现确认维护喷泉模型特点:主要用于支持面向对象开发过程体现了软件创建所固有的迭代和无间隙的特征8.可重用部件组装模型使用重用技术的软件工程模型部件(构件):可重用的软件成份可重用部件组装模型系统A的软件构成系统C的软件构成系统B的软件构成可重用部件可重用部件软件构件软件构件要求:标准构件(components)可复用性(Reusability)集成化软件开发环境(ISEE)1.2.3软件开发方法----软件开发过程所遵循的方法和步骤开发过程一般包括:需求、设计、实现、确认等活动主要针对需求和设计的典型方法:结构化方法(SA