您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第1讲:课程介绍-与软件工程概述
袁彩虹计算机信息与工程学院数据科学系yuanch@henu.edu.cnifwritingcode==developasoftwarethenClassisover!elseLet'sstartanewcourse—SoftwareEnginerring!程序设计数据结构软件平台技术软件工程程序员系统分析师,系统设计师摘录的博客上一位程序员的心声:“从日常观察以及读书的过程中,我发现真正优秀的程序员必定是具备工程思维的,他们不一定学过软件工程,但却将工程思维应用于日常工作中。”“软件开发是一个系统化的工程,并不是写代码就算是软件开发了。在进入这个行业后,能尽早发现自己不具备软件工程的意识,于我来说是一种幸运。”“在日后工作中,利用软件工程的知识指导日常工作,早希望日成为一名合格的程序员。”“由于没有单元测试,使得目前开发项目的大部分时间用于解Bug。而我作为一个转行程序员更是两眼一抹黑,完全不知道如何针对ECU代码写单元测试。针对这点,我需要在以后的工作过程中多多留心,并向跳槽来的员工请教,总有会写单元测试的同事”“软件工程这门学科比较抽象,但它真正是从工程角度来剖析软件开发,促进开发人员养成工程思维,并将其应用到日常软件开发过程中。”“开发时没有分析没有设计,上手就写,后期难维护,加班熬夜去填'坑'。”“遇到需求变更这种事,除了抱怨两句客户,只能闷头做,无力反抗。”.........2019年1月,任正非发表了一封刷屏朋友圈的公开信《全面提升软件工程能力与实践,打造可信的高质量产品》为什么学习软件工程?在实践中,软件开发总会遇到许多问题:1.为什么项目总是延期?2.为什么软件开发成本如此之高?3.为什么我们开发的软件总是不能让用户满意?4.为什么用户总是提出新的需求?5.……原因:软件工程努力为这些问题提供解决方案!软件工程简介(1/2)软件工程:1.将计算机科学、管理科学等理论运用于指导软件开发与维护的一门学科2.交叉学科软件工程简介(2/2)软件工程主要研究内容:1.一个目标:如何经济的、高质量的开发与维护一个软件系统2.三个方面:过程、方法、工具可行性分析需求分析概要设计详细设计编程实现测试部署维护可行性分析方法软件工程方法软件工程工具需求分析方法概要设计方法详细设计方法编程实现方法测试方法维护方法支持方法的工具可行性分析问题定义设计编码测试用户称述软件定义阶段软件开发阶段运行维护阶段需求分析维护一个流程两条主线结构化开发面向对象开发课程目标(1/3)目标一:掌握基本技能理解并学会应用软件工程的基本过程、方法、工具课程目标(2/3)目标二:转变认识可行性分析需求分析概要设计详细设计编程实现测试部署维护编程软件不仅仅是程序开发软件不仅仅是编程课程目标(3/3)目标三:转变思维方式立足于系统的整体,而不是局部!上升程序员系统工程师(系统分析员)软件工程是一门最容易被忽视的学科,单调、乏味;但其应用性很强,尤其在工作实践中更能发挥它的伟大之处;在当前技术环境一定的情况,通过软件工程(软件管理和开发方法)提高产品的质量和开可维护性;强调文档化、规范化过程控制;个人实践体会。我们需要重视软件工程学习!课程选用教材《软件工程》,郑逢斌等,科学出版社,2012内容全面而精简章节课程内容1软件工程概述2软件生命周期和过程模型3可行性研究4需求工程5结构化分析方法6面向对象基础7面向对象分析8软件设计基础章节课程内容9结构化设计方法10面向对象的设计11用户界面设计12软件实现13软件测试14软件维护15软件项目管理16软件工程新技术分组和选题:自由分组,每组人数4~6人,推荐一名项目经理,由项目经理召集项目组成员讨论、选定开发项目。项目的选定必须考虑“范围、期限、成本、人员、设备”等条件。项目经理负责完成“可行性研究”、制定“项目开发计划”、管理项目并根据项目进展情况对项目开发计划进行调整;对于调整的项目开发计划必须存档。自主选题选题要小而不是大成果实验文档源程序和数据答辩强调口头表达能力,做得出还要能讲得出课程实验用人单位对求职者应具备的素质要求计算机技能分析问题能力协同工作能力口头和书面的交流能力工作的主动性职业道德人际交往能力灵活性和适应能力诚实和正直自信…最终成绩=考勤×10%+实验成绩×20%+期末成绩×70%课程参考书软件工程:实践者的研究方法,普雷斯曼(RogerS.Pressman)(著),郑人杰等(译),机械工业出版社UML用户指南,第二版,GradyBooch,JamesRumbaugh,IvarJacobson(著),邵维忠等(译),人民邮电出版社设计模式:可复用面向对象软件的基础,ErichGamma,RichardHelm,RalphJohnson,JohnVlissides(著),李英军等(译),机械工业出版社ApplyingusecasedrivenobjectmodelingwithUML:anannotatede-commerceexample,RosenbergD,ScottK.,Addison-Wesley推荐阅读《人月神话》,布鲁克斯,2007《浪潮之巅》,吴军,2012第一章:软件工程概述介绍软件、软件危机、软件工程的概念介绍软件工程的基本原理与目标介绍软件开发方法与CASE工具软件的定义程序=算法+数据结构软件=程序+数据+文档程序是按事先设计的功能和性能要求执行的指令序列数据是指程序初始化数据、测试数据、以及研发数据、维护数据等文档是与程序开发、维护和使用的有关图文材料软件的定义年代对软件的认识20世纪50年代软件=程序20世纪60年代软件=程序+文档20世纪70年代软件=程序+文档+数据软件的特点软件是一种逻辑实体,而不是具体的物理实体,因而它具有抽象性。软件是被开发或设计的,而不是传统意义上的被制造。软件不会磨损,但存在退化问题。失效率曲线软件的特点软件的特点受限于具体的计算机系统手工开发方式,还不能完全采用组装的方式进行软件开发是提高人类工作效率的逻辑产品,本身是非常复杂的软件成本相当昂贵相当多的软件工作涉及到社会因素软件分类按功能特征进行划分系统软件、支撑软件、应用软件按规模大小进行划分微型、小型、中型、大型、甚大型、极大型按工作方式进行划分实时处理软件、分时软件、交互式软件、批处理软件按应用范围进行划分:通用软件、定制软件按使用频度划分按失效影响进行划分软件的发展历程初期阶段针对具体应用个体式开发软件作坊早期的“软件危机”软件危机加剧软件开发方法不断改进软件危机软件危机20世纪60年代末提出来的。主要表现为:进度严重拖后,成本超出多达一个数量级;生产率极低,软件质量低劣到甚至根本不能使用,而且难于管理。经典案例:美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000个人年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。......据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。......软件危机的实例ARIANE5火箭(阿丽亚娜火箭)–1996年6月,耗资70亿美元,发射37秒后爆炸–发射失败的原因在于软件的错误软件错误–程序中试图将64位浮点数转换成16位整数时产生溢出–缺少错误处理程序对数据溢出进行管理严格地遵守软件确认过程可以避免这种错误软件危机的实例来自地狱的项目:•600万行C++代码•50,000多个类•代码中使用的C++方法早已过时•采用一家倒闭公司提供的数据库软件•在32台并行的机器上编译需要48小时。•运行一个用户界面需要同步启动40~50个子进程•启动时间需要耗费15分钟•平均崩溃时间:30秒到30分钟不等•......•1996年开始,12年后宣告终止,主要项目老板因为欺诈进了监狱软件危机的实例Therac-25是加拿大原子能有限公司(AECL)所生产的放射线疗法机器,在1985年到1987年之间,在美国及加拿大,至少有六起和Therac-25相关的医疗事故是因为程序bug,导致部分病患受到比正常剂量高一百倍的辐射,因而造成患者重伤甚至死亡。软件危机1、软件危机的定义指在软件的开发和维护过程中所遇到的一系列严重问题。软件危机1、软件危机的定义典型表现:开发成本和进度的估计常常不准确;用户对交付的软件系统不满意的现象经常发生;软件质量无保证、可靠性差;软件常常是不可维护的;软件通常没有适当的文档资料;软件成本在计算机系统总成本中所占比例逐年上升;软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。总之开发成本高,周期长,质量差,满足不了市场需求;软件危机2、产生软件危机的原因(1)用户对软件需求的描述常常是不精确(2)开发出来的软件产品不符合用户的要求(3)大型软件项目需要组织一定的人力共同完(4)软件项目开发人员容易产生一些疏漏和错误(5)缺乏有力的方法学和工具支撑(6)人类智力的局限性,导致人们无力处理“复杂问题”软件危机3、消除软件危机的途径开发和使用更好的软件工具;软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目;按工程化的原则和方法组织软件开发工作是有效地,是摆脱软件危机的主要出路。一、定义:1968年10月,NATO(NorthAtlanticTreatyOrganization)名一流的的科技委员会召集了近50程序工程人员、计算机科学家和工业界巨头,讨论和制定如何摆脱“软件危机”的对策。FritzBauer首次提出了软件工程的概念,他认为:软件工程是为了经济地获得能够在实际机器上高效运行的可靠软件而建立和使用的一系列好的工程化原则。1993年,IEEE计算机学会定义软件工程是将系统化、规范化、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件中的方法的研究。强调在软件开发过程中应该以工程化思想为指引。技术措施+组织管理措施付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作,及时交付使用软件开发项目力图在以上目标的冲突中取得一定程度的平衡软件工程的目标四、软件工程原则(1)抽象(2)信息隐蔽(3)模块化(4)局部化(5)确定性(6)一致性(7)完备性(8)可验证性软件工程的基本原理1.用分阶段的生命周期计划严格管理2.坚持进行阶段评审3.实行严格的产品控制(基准配置管理)4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性------B.W.Boehm(勃姆),1983(1)一定要有项目计划;(2)项目要划分生命周期阶段,每个阶段都要有计划;(3)计划要分层或分阶段逐步细化;(4)要使用项目计划管理项目,不能弃之不用。(1)尽早发现错误。大部分缺陷是编码之前注入的,缺陷越早修复成本越低。(2)尽早发现错误的措施:深入评审;设计阶段编写用户手册、使用手册、数据准备手册;原型;模拟;自动化的检测工具;设计审查与走查;等等。采用现代化的开发方法、开发实践提升软件的效率与质量。对于项目的阶段产出、各个小组之间的承诺、每个人的产出与承诺要明确、要可验证。(1)人与人之间的效率差别达10倍甚至25倍以上,因此要使用精英团队。(2)采用多种方式提升沟通的质量与效率:识别、分析技术与过程的改进,建立持续改进的机制。执行配置管理,确保工作产品之间的一致性。软件开发方法两种软件开发方法传统的方法:面向过程的方法(结构化方法)现代的方法:面向对象的方法面向过程的开发方法主要特点以功能分解为基础动态的视角,软件即输入输出过程强调模块化思想,主要采用抽象
本文标题:第1讲:课程介绍-与软件工程概述
链接地址:https://www.777doc.com/doc-7316606 .html