现代软件工程课程概述主讲:吴建林jlinwu@x263.net;jlinwu@tseg.dhs.org2019年8月12日2提纲一、软件工程的体系二、教学侧重点三、为什么偏重于软件工程管理四、软件工程技术的发展五、教学内容组织六、教学方法七、参考资料2019年8月12日3一、软件工程的体系软件工程:以工程化的原理、原则和方法进行软件开发,以期解决当时出现的“软件危机”。软件危机:大型软件开发成本高;开发过程不易控制;软件开发工作量估计困难;软件质量低;软件项目失败率高,错误率高;无法判断大型系统能否正常工作;软件维护任务重等。2019年8月12日4一、软件工程的体系软件工程技术:1、软件开发模型:软件开发全过程中系统的开发、运行和维护所实施的全部过程(PDCA)、活动、任务的结构框架。(what)2、软件开发方法:采用类似于工程的原理和原则进行软件开发。(how)3、软件开发工具:实现方法的自动或半自动的软件支撑环境。(CASE)2019年8月12日5一、软件工程的体系软件过程管理1、软件产品和过程的质量度量2、项目计划与管理(包括风险管理)3、软件过程改进与评估(SPICE)工程技术解决的是开发效率问题;二过程管理解决的是开发质量问题。2019年8月12日6一、软件工程的体系为什么需要软件工程?当你遇到一个新领域的问题而不知道该如何下手时;当你在解决复杂问题的过程中感觉到杂乱无章、力不从心时;当你面对一个充满个性的开发团队而不知如何协调时;当你感觉到开发效率低下、开发质量始终是你的心头之患时…...2019年8月12日7二、教学侧重点本科生教学侧重点:1、软件工程的概念2、软件生命周期3、软件开发模型4、软件开发方法5、软件开发工具6、基本的项目管理知识2019年8月12日8二、教学侧重点研究生教学侧重点:1、对软件开发技术的寻根索源;2、软件质量3、软件度量4、软件过程及项目管理5、SPICE/CMM6、新型软件工程技术(基于软件体系结构的开发方法、面向对象建模、分布式部件对象技术、软件复用技术等)2019年8月12日9三、为什么偏重于软件工程管理3.1软件企业的特殊性3.2我国软件企业的现状3.3印度软件企业的现状3.4我国与印度软件企业的差距分析3.5重视软件工程管理的必要性2019年8月12日103.1软件企业的特殊性软件的复杂性和各模块间的相互依赖性是其他的产品所无法比拟的。所有的模块以及模块间的连接环节必须是100%的正确,不能像硬件那样允许出现一定范围的偏差。想象一下:如果没有好的管理,软件的架构会显得混乱,软件的开发过程会是杂乱无章的。2019年8月12日113.1软件企业的特殊性软件作为产品,是用人的大脑生产出来的,不是机器制造出来的,因而,软件过程对人的依赖性极大。除去采用好的方法和工具等技术外,软件的质量极大地依赖于人。(人的创造性极具个性化)工程制造业影响质量的5要素:人、机器、原料、方法、环境。人占20%。软件工程管理就是要为人提供好的方法和工具以减轻人的压力,提高效率;通过过程管理技术尽量减少人的低级错误,减少过程对于人的依赖程度。2019年8月12日123.2我国软件企业的现状从70年代至今,始终处于落后于国际的位置。CMM5-摩托罗拉中国软件中心;CMM3有联想软件、东软、托普软件等,大部分企业在向CMM2努力。CMM3是软件企业迈向国际化的门槛。2019年8月12日133.2我国软件企业的现状Why?规模化和系统化不够。规模化:软件企业无法形成规模,大多数企业都是从小型软件开发干起来的,当软件企业达到一定规模时,管理工作跟不上,无法形成规模效应。系统化:软件是一种商品,只有系统地控制产品的质量、开发时间、开发成本才能使商品走入市场、走向国际。2019年8月12日143.3印度软件企业的现状根据印度国家软件和服务企业协会的数据:最近5年印度软件产业的累计增长率达到了令人惊奇的52%,软件出口累计增长率超过55%。印度年软件产业产值超过22亿美元,软件服务和产品出口累计达10亿美元。2000年达到40亿美元。印度软件产业从业人员16万人。2000多家软件企业中,75家通过ISO9000,60多家软件公司通过了CMM认证。5-1,4-3,3-42019年8月12日153.3印度软件企业的现状一个现象:一个印度人到美国登记住宿,接待员问:“你是从印度来吗?”“是的”,“那你一定是个软件专家”。以前呢?舞蛇者公众对印度软件的肯定来自于质量。其成功当然还来自于:良好的英语、低廉的人力成本。2019年8月12日163.3印度软件企业的现状国内从业人员到印度的感受:流程重于项目QC独立于研发部门,专门检查研发部门的开发流程是不是按照流程走,如果QC觉得流程不对,会报告上层人员,项目可能会因此而停止。所谓的项目经理一般是从编码人员升上来的,并不是不懂技术,一般至少有4年的工作经验。2019年8月12日173.3印度软件企业的现状项目经理就是制定开发计划,负责协调,填写各种表格。所有的东西(包括草稿)都有文档。详细设计文档要求达到只有这个文档就可以编码的程度,一般写文档的时间为60%,编码时间极少。有各种详细的review,组内的、组间的、客户的等。计划很详细,的确能达到小时级别,但是实际情况还是误差比较大,所以也有加班。2019年8月12日183.4我国与印度软件企业的差距分析Example:软件中需要一个列表,用来表示处理的事务。该列表在业务繁忙的时候将变得很大。我国从业人员:用双向链表(先编码后分析)。印度从业人员:开一个大的数组,不用链表。(先分析后编码)Why?小型机的512MB内存足够,数组访问方便、效率高。2019年8月12日193.4我国与印度软件企业的差距分析软件教育水平比较:印度软件人员面对同样的问题有惊人相似的解决方法和程序结构。而我国软件人员更重视的是解决问题的个人技巧,重视创造性地发挥(每个人都觉得别人做的软件不好,自己需要延续别人的工作时总是将别人贬损一通,然后重新开发,殊不知:程序员只要具备拧好螺丝钉的能力就可以了。)2019年8月12日203.4我国与印度软件企业的差距分析许多公司的项目经理不需要懂技术,有些甚至就是MBA或者是领域专家,而不是编码专家,却能够领导一大群素质良好的程序员把工作做好,没有内部不团结的情况。国内的项目经理如果不懂技术则后果是可想而知的(内部不团结,技术人员与管理人员做对=〉项目经理必须在技术上能够压服下属)。2019年8月12日213.4我国与印度软件企业的差距分析印度的编程人员的流动率高达30%!可以想见他们的文档工作做得多么地好,他们的产品不依赖于任何一个人,谁都可以立即辞职,产品的开发还是会正常进行。国内:老板害怕总工,技术骨干拥兵自重,抗拒管理。任何制定好的计划都有可能被技术人员推翻或者跟你消极怠工。2019年8月12日223.4我国与印度软件企业的差距分析印度的开发计划能够做到小时级别。如果项目经理没有上班,手下的员工可能不知道干什么。一般的计划都定到天。(来自于良好的度量)国内能够将计划定到月就不错了,而且给出的月度计划要么不可能实现,要么就可能被取消,开发人员一般会出现前松后紧的局面。2019年8月12日233.5重视软件工程管理的必要性印度软件公司十分重视软件开发过程的管理及与其相关理论与标准的发展。认为编码是十分简单的工作,高中生就可以完成。国内软件公司更重视个人技能的发挥,忽视了过程的管理。国内的个人创造性应该在有限的范围内得到发挥。在满足国内软件市场需求的同时,拓展国际软件市场,增加软件出口量。2019年8月12日24四、软件工程技术的发展新型软件开发模型,如:RUP(RationalUnifiedProcess)、XP(eXtremProgramming)。新的软件开发方法:面向对象软件开发方法。新的软件开发工具:UML(UnifiedModelingLanguage)、ROSE(RationalObject-orientedSoftwareEngineering)2019年8月12日25四、软件工程技术的发展以软件体系结构为中心的面向对象软件开发过程提炼特定应用领域的稳定需求和易变需求,建立可复用的领域模型。在特定领域模型的基础上提炼特定应用领域的软件体系结构。进行体系结构设计分配系统功能到相应的构建和连接件上存放设计模式、对象或其它可重用的设计构件。设计构件和连接件复用/存储2019年8月12日26四、软件工程技术的发展分布式部件对象技术MicrosoftCOM/DCOM/COM+OMGCORBA(CommonObjectRequestBrokerArchitecture)SunMicrosystemJavaBean2019年8月12日27四、软件工程技术的发展软件复用技术Pattern(analysis,design,process)Framework2019年8月12日28五、教学内容组织第一章软件工程现状及发展1.1软件发展现状1.2软件危机1.3软件工程及发展历程1.4软件工程框架1.5软件发展趋势及特点2019年8月12日29五、教学内容组织第二章软件生命周期过程2.1软件生命周期2.2基本过程2.3支持过程2.4组织过程2019年8月12日30五、教学内容组织第三章软件过程改进的CMM/PSP/TSP模型3.1CMM产生背景3.2CMM内容及管理透视3.3CMM组织结构3.4CMM应用3.5CMM与ISO90013.6PSP过程组织结构3.7TSP过程及角色2019年8月12日31五、教学内容组织第四章软件质量4.1软件质量概念4.2软件质量属性4.3软件质量度量4.4软件质量保证4.5质量管理和质量保证的实施2019年8月12日32五、教学内容组织第五章软件项目管理5.1项目管理过程5.2风险管理5.3软件质量和效率度量5.4软件项目成本和进度估算5.5软件项目进度安排5.6项目组织结构设计5.7项目过程监控2019年8月12日33五、教学内容组织第六章面向对象建模语言和过程6.1面向对象建模思想6.2面向对象建模方法6.3统一建模语言UML6.4统一建模过程RUP6.5轻量级建模过程XP2019年8月12日34五、教学内容组织第七章软件体系结构7.1软件体系结构概念7.2软件体系结构的研究意义7.3软件体系结构的研究内容7.4基本软件体系结构风格7.5基于体系结构的软件开发模式2019年8月12日35五、教学内容组织第八章分布式部件对象技术8.1分布式网络计算8.2基于部件的技术8.3部件模型8.4互操作性8.5部件对象技术的发展2019年8月12日36五、教学内容组织第九章软件复用之模式和框架9.1软件复用类型9.2模式复用9.3设计模式9.4过程模式和分析模式9.5框架复用9.6模式和框架的关系2019年8月12日37五、教学内容组织目标:通过本课程的学习,学生应该掌握:软件工程技术发展的原因、解决的问题机器局限性,能够根据具体情况灵活应用各种技术。软件过程及其管理方法,围绕软件过程改进(SPI)熟悉CMM(过程能力成熟度模型)、PSP(个体软件过程)和TSP(群体软件过程)等方面的知识;软件体系结构及其基本风格;面向对象的建模技术及UML(统一建模语言);分布式部件对象技术;软件复用技术(分析模式、设计模式和过程模式、框架)软件项目管理、质量控制。2019年8月12日38六、教学方法采用课堂教学与课外自学相结合的方式进行。课外自学采用小组方式进行,针对某一个题目完成专题论文。最后,需要针对该论文在全班进行表达。题目另行给出。2019年8月12日39七、参考资料现代软件工程(上)(中)(下)周之英,科学出版社软件工程――技术、方法与环境王立福