您好,欢迎访问三七文档
软件工程主讲:姜宁教材《软件工程》张海藩清华大学出版社参考书目《软件工程实践者的研究方法》机械工业出版社《软件工程》卢潇清华大学出版社软件业的生存之道人月神话学习方式完成必要的作业完成每次的实验题目完成一次综合性的项目分析开发软件工程师的基本功底扎实的基础丰富的想象力最简单的是最好交流能力良好的编程风格韧性和毅力“开发流程+英文优势”印度软件在中国的发展根据统计数据,2004年前三个季度,有21家印度公司在中国直接投资,但投资总额仅为1700万美元,在同期外国IT企业在华直接投资中所占的比例小得可怜。考虑到从2002年起,印度前四名的软件企业塔塔、InfoSys、Wipro以及Satyam就已陆续在上海登陆学习目的对项目的定位分析软件工程思想建模软件工程是典型的计算机科学和数学,管理科学,心理学,社会学等学科的综合。软件的发展程序设计阶段(20世纪40年代初~60年代中期)程序系统阶段(60年代中期到70年代末期)软件工程阶段(20世纪70年代中)第四阶段个体化的软件环境软件规模小,编写者和使用者往往是同一个人,除程序清单外,无其它文档资料。“软件作坊”比较广泛使用产品软件,仍沿用个体化开发方法。软件维护工作很难进行,甚至不可维护(不能修改运行时发现的错误,不能适应新的硬件环境)由于软件的“不可维护”,而导致了“软件危机”。微处理器出现个人计算机产品、分布式系统对软件开发提出更高要求,软件在工业、学术界应用广泛,个人应用少。更强大的硬件和软件复杂操作系统控制的强大的桌面系统,局域网和广域网,先进的应用软件配合,成为主流。集中主机环境转变为分布的C/S,B/S环境。面向对象技术取代传统技术。例:Windows95有1000万行代码Windows2000有5000万行代码Exchange2000和Windows2000开发人员结构Exchange2000Windows2000项目经理25人约250人开发人员140人约1700人测试人员350人约3200人软件工程概论什么是软件软件的分类软件的发展软件生存期软件工程软件工程的目的和要求软件是计算机系统中与硬件相互依存的另一部分,它是包括程序,数据及其相关文档的完整集合软件=程序+数据+文档资料程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料软件的分类按软件的功能进行划分:系统软件使计算机系统各个部件、相关软件和数据协调、高效地工作的软件操作系统数据库管理系统设备驱动程序通信处理程序等支撑软件协助用户开发软件的工具软件文本编辑程序文件格式化程序磁盘向磁带进行数据传输的程序程序库系统支持需求分析、设计、实现、测试和支持管理的软件应用软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务管理、办公自动化软件计算机辅助教学软件按软件规模进行划分:类别参加人员数研制期限源程序行数微型11~4周0.5k小型11~6月1k~2k数值计算或数据处理,通常没有与其它程序的接口。需要按一定的标准化技术、正规的资料书写以及定期的系统审查。只是没有大题目那样严格。中型2~51~2年5k~50k软件人员之间、与用户之间的联系、协调的配合关系。因而计划、资料书写以及技术审查需要比较严格地进行。应用程序和系统程序。系统的软件工程方法是完全必要的。大型5~202~3年50k~100k编译程序、小型分时系统、实时控制系统等。二级管理,若干小组,每组5人以下。人员调整往往不可避免,新手的培训。采用统一的标准,实行严格的审查是绝对必要的。甚大型100~10004~5年1M(=1000k)若干个子项目,每一个子项目都是一个大型软件。子项目之间具有复杂的接口。如远程通信系统、多任务系统、大型操作系统、大型数据库管理系统、军事指挥系统通常现有这样的规模。很显然,这类问题没有软件工程方法的支持,它的开发工作是不可想象的。极大型2000~50005~10年1M~10M军事指挥、弹道导弹防御系统。只是对软件工程技术依赖的程度不同而已。按软件工作方式划分:实时处理软件分时软件交互式软件批处理软件按软件服务对象的范围划分:项目软件合同约束,实验研究特殊定制的产品软件提供市场,功能、性能、培训及服务按使用的频度进行划分:低频度使用频繁使用按软件失效的影响进行划分:高可靠性软件一般可靠性软件软件的特点软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程在软件的运行和使用期间,没有硬件那样的机械磨损,老化问题软件对硬件和环境有着不同程度的依赖性,导致了软件升级和移植的问题。传统的手工开发方式使软件开发的效率受到很大的限制。因此,应促进软件技术自动生成技术和其他一些有效的软件开发工具或软件开发环境。软件本身是复杂的实际问题的复杂性程序逻辑结构的复杂性软件成本相当昂贵大多数软件是新开发的,而不是通过已有的构件组装而来的。相当多的软件工作涉及到社会因素软件生产随规模增大而复杂度增大以美国宇航局的软件系统为例:1963年水星计划系统200万条指令1967年双子星座计划系统400万条指令1973年阿波罗计划系统1000万条指令1979年哥伦比亚航天飞机系统4000万条指令假设1个人一年生产一万条有效指令,那么是否4000人生产一年,或400人生产10年就能完成任务吗?答案是否定的。一万条指令的复杂度决不仅仅是100条指令复杂度的100倍。软件开发进度难以预测拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。以丹佛新国际机场为例。该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机;投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同的航空公司柜台、登机门和行李领取处之间发送和传递行李;支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机。按原定计划要在1993年万圣节前启用,但一直到1994年6月,机场的计划者还无法预测行李系统何时能达到可使机场开放的稳定程度。典型失败系统的例子IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付。在交付使用后的系统中仍发现大量(2000个以上)的错误。没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性确实,直到上个世纪末,20多年以来,软件行业的生产效率依然没有数量级的提高,软件在帮助传统行业提高效率的同时,自身却成为最原始意义上的“手工行业”。虽然,许多大型的企业级应用软件采取了大规模的生产和协作,但是这种软件往往开发时间长,效率低,无法动态调整,无法由僵硬变得灵活和敏捷。软件业也需要脱离手工作坊时代和工业时代,而走进敏捷定制的后工业时代。软件生产方式的落后,加之需求和环境的进一步复杂,使得传统软件的生产方式,不但不能缓解软件工程的危机,而是处于不断加深的危机之中。互联网应用时代,企业期望的是以更低的成本,更快的速度,获得高质量、高灵活性的随处可得的软件。显然,依靠传统软件业落后的生产方式和僵化的软件结构,无法面对互联网应用的挑战。矛盾在不断加剧,危机在不断加深。僵化的软件结构无法产生银弹——从代码级做起的软件,强调功能实现,天生具有庞大、僵化、无法适应变化的缺点。编码式的软件,无论是采取何种方式,都无法真正实现“敏捷定制”。代码级的编程、代码级的维护使得效率不可能真正地提高。软件开发中的问题计划很难制定致使经费预算常常突破由于缺乏软件开发的经验,主观盲目地制定计划,执行起来和实际情况有很大差距,对于工作量估计不准确,进度计划无法遵循,开发工作完成的期限一拖再拖。已经拖延了的项目,为了加快进度赶上去而增加人力,反而更加延误了。需求在开发的初期阶段提得不够明确,或是未能得到确切的表达。软件人员和用户又未能及时交换意见,使得一些问题不能及时解决,造成开发后期矛盾的集中暴露。然而这时问题既难于分析,也难于挽回。开发过程没有统一的、公认的方法论和规范指导加之不重视文字资料工作,资料很不完整;忽视每个人与其他人的接口部分,发现了问题修修补补,这样的软件很难维护。未能充分做好检测工作在运行中暴露出大量的问题,轻者影响系统的正常工作,重者发生事故,甚至造成生命财产的重大损失。美国IBM公司在1963年至1966年开发的IBM360机的操作系统。5000人-年的工作量,1000人投入,近100万行源程序。每次发行的新版本都是从前一版本中找1000个程序错误,项目负责人F.D.Brook总结时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深。最后无法逃脱灭顶的灾难。“按工程化的原则和方法组织软件开发是软件开发中的问题一个主要出路。软件工程阶段,约为70年代以后。50年代到60年代时,程序设计曾经被看做是一种任人发挥创造才能的技术领域。写出的程序通篇充满了程序技巧,这些程序很难被别人看懂。然而随着计算机的广泛使用,人们逐渐抛弃了这种观点。对于稍大的程序,并需要较长时间为许多人使用的程序,人们要求这些程序容易看懂、容易使用,并且容易修改和扩充。多个软件人员分工合作、共同完成;只有在项目的总体要求和技术规范的约束下充分发挥和施展。软件危机的具体体现(1)软件开发进度难以预测(2)软件开发成本难以控制(3)用户对软件功能难以满足(4)软件产品质量无法保证(5)软件产品难以维护(6)软件缺少文档资料软件工程的定义软件工程:是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。实质上,软件工程就是采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理方法和最先进的软件开发技术结合起来,应用到软件开发和维护过程中去。IEEE:(InstituteofElectricalandElectronicsEngineers)软件工程是将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护过程,即将工程化应用于软件中的方法的研究。软件工程三要素:方法、工具和过程工具层:为软件工程方法提供了自动的或半自动的软件支撑环境。CASE:计算机辅助软件工程,将各种软件工具、开发机器和一个存放开发过程信息的工程数据库组合起来形成一个软件工程环境。使用软件工程工具可以有效地改善软件开发过程,提高开发效率,降低开发成本软件工程三要素方法层:提供了软件开发的各种方法。方法覆盖了一系列的任务,包括项目计划与估算方法、需求分析和设计的方法、编程、测试方法及维护方法等软件工程方法为软件开发提供了“如何做”的技术软件工程三要素过程层:是软件工程的基础。软件工程过程是为了获得软件产品,在软件工具支持下由软件人员完成的一系列软件工程活动。(具体实施)软件工程过程定义了:方法使用的顺序要求交付的文档资料为保证质量和适应变化所需要的管理软件开发各个阶段完成的里程碑软件工程项目的基本目标付出较低的开发成本达到要求的软件功能取得较好的软件性能开发的软件易于移植需要较低的维护费用能按时完成开发工作,及时交付使用软件开发项目力图在以上目标的冲取得一定程度的平衡。软件生存期lifecycle软件有一个孕育、诞生、成长、成熟、衰亡的生存过程。这个过程即为计算机软件的生存期软件生存期的六个步骤,即制定计划、需求分析、设计、程序编码、测试及运行维护制定计划确定要开发软件系统的总目标给出功能、性能、可靠性以及接口等方面的要求完成该软件任务的可行性研究估计可利用的资源(计算机硬件,软件,人力等)、成本、效益、开发进度制定出完成开发任务的实施计划,连同可行性研究报告,提交管理部门审查需求分析和定义对待开发软件提出的需求进行分析并给出详细的定义编写软件需求说明书或系统功能说明书及
本文标题:软件工程基础讲解
链接地址:https://www.777doc.com/doc-213076 .html