第一讲软件工程_第1页
第一讲软件工程_第2页
第一讲软件工程_第3页
第一讲软件工程_第4页
第一讲软件工程_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

软件工程

SoftwareEngineering

第一讲教材及参考资料《软件工程》张海藩人民邮电出版社《软件工程》鄂大伟清华大学出版社其他有关软件开发、设计、管理类的书籍.hk软件工程论坛,如CSDN中的软件工程论坛等……2课程考核方式平时考勤:20分迟到一次扣1分旷课一次扣2分上机作业:15分课堂讨论及课下作业:15分期末考试(笔试,闭卷):50分缺课次数在1/3以上的不允许参加考试3先修课程计算机应用基础类课程计算机编程语言:C、C++数据库设计(非必须)4如何学好这门课从简到繁、从繁到简的学习过程多看、多想、多交流、多实践理论联系实际5本门课程的重要性……6这门课程的学分较高这门课程的内容很多这门课程的难度不小这门课程的意义重大故此,要求大家每节课必到,每节课必听。7让我们进入软件工程的广袤天地,共同学习、交流、进步……8引论1、我们已经学习过:计算机组成原理、数据结构、操作系统、程序设计等课程。2、是否具备完成一般软件目标能力呢?例如:⑴编写计算y=sin(x)的源码;⑵手机芯片操作系统(COS)设计;⑶大学课表编制系统,等等。3、要达到完成上述目标,我们仅有计算机的基础技术是不行的。4、一般情况下,一个软件的完成,除了要掌握计算机的基础技术外,还要有数学、物理、电子技术等基础科学与领域知识。95、有了上述技术还不够。还要有软件开发的专门技术。例如,我们要编写一个手机操作系统时:①我们发现要知道他的设计是怎样的;②当设计该问题时,我们发现对该问题要进行分析。③我们求解该问题的程序对吗?④如果软件开发周期比较长,如何应付开发对象变化?⑤参加的人员较多时的分工协作。⑥软件质量怎么管理?10(7)一个软件的开发用什么工具。(8)开发中如何与用户交流与合作,与同伴合作。(9)每一个软件技术人员都希望有软件项目开发。那么是不是有投资就可以开发呢?这就是所谓的可行性问题。(10)如何计算一个软件工程的费用与开发周期。(11)工程中个人荣誉与利益。……只有学习《软件工程》,才能回答上述问题。11第一章软件工程主要内容软件危机软件概念、特点软件工程的定义、内容、基本原理121.1软件危机1.1.1计算机系统的发展历程第一代(20世纪60年代中期以前)程序设计阶段 专用软件、规模小、没有系统化方法和管理、最终只有程序保留第二代(从20世纪60年代中期到70年代中期)程序系统阶段 多道程序、多用户系统、在线存储及数据库,软件作坊,——“软件工程”学科诞生第三代(从20世纪70年代中期到80年代中期)软件工程阶段 分布式系统、微处理器,主要在工业界和学术界应用第四代(从20世纪80年代中期至今)软件工程阶段 C/S、B/S,软件产业在世界经济中已经占有举足轻重的地位13*几十年来根本的变化体现在(1)人们改变了对软件的看法。50-60年代,程序设计曾被看成一种任人发挥创造才能的技术领域,程序只要能在得出正确的结果,其写法可不受任何约束。随着计算机的广泛使用,人们要求这些程序容易看懂、使用、修改和扩充。于是,程序便从按个人意图创造的“艺术品”转变为能被广大用户接受的工程化产品。(2)软件的需求是软件发展的动力。早期只是为了满足程序开发者的需要;进入软件工程阶段以后,软件开发的成果要在市场中流通以满足广大用户的需要。(3)软件工作的范围从只考虑程序的编写扩展到涉及整个软件生存周期。1420世纪60年代末70年代初,西方工业发达国家经历了一场“软件危机”(1968年由北大西洋公约组织(NATO)在德国召开的国际学术会议上首次提出)。这场软件危机表现:一方面软件十分复杂,价格昂贵,供需差日益增大;另一方面软件开发时又常常受挫,质量差,指定的进度表和完成日期很少能按时实现,研制过程很难管理,即软件的研制往往失去控制软件危机是指软件开发和维护过程中所遇到的这一系列严重问题。软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。151.1.2软件危机软件危机的典型表现成本和进度估计不准确用户不满意质量靠不住软件不可维护没有适当的文档(对于管理人员、开发人员、维护人员)软件成本占计算机系统总成本比例逐年上升软件开发速度跟不上硬件和应用普及,16软件本身缺乏“可见性”,开发过程难于管理软件维护意味着对软件原来设计的修改大型软件合作开发软件开发和维护的方法不正确没有真正把握用户需求软件生命周期:定义、开发、使用、维护,编程占10-20%工作量软件由一个完整配置组成,程序只是软件的一个部分做好软件定义(不同阶段修改付出的代价大不相同)轻视维护171.1.3产生软件危机的原因18*《人月神话》和《没有银弹》由Brooks分别在1975年和1987年出版;F.P.Brooks是IBM公司在1963年—1966年开发的IBM360机操作系统的项目负责人;该项目花费5000人一年的工作量,近100万行代码,但结果非常糟糕,每个新版本都是从前一版本中找出1000个程序错误而修正的结果。“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难”(摘自《人月神话》)。19*《人月神话》和《没有银弹》在《没有银弹》中,Brooks有一个著名论断:软件工作是人类所从事的最复杂的工作。在他看来,对于软件的突破性技术(即所谓的银弹)而言,不管是过去、现在还是将来,类似于“银弹”的各种“屠龙之技”都不可能解决软件复杂性的问题。这让人们意识到了软件工程的本质,放弃寻找“放之四海而皆准”的幻想。20软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。其中:程序是能够完成预定功能和性能的可执行的指令序列;数据是使程序能够适当的处理信息的数据结构;文档是开发、使用和维护程序所需要的图文资料。值得强调的是,程序≠软件,程序只是软件的组成部分21*软件的概念软件是一种逻辑实体,不是物理实体,具有不可见和抽象性软件的开发,是人的智力的高度发挥,而不是硬件制造软件维护与硬件的维修有着本质的差别软件的开发和运行常常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式,使软件的开发效率受到很大限制软件的开发是一个复杂的过程,可能来自它所反映的实际问题的复杂性,也可能来自程序逻辑结构的复杂性软件的成本非常高昂相当多的软件工作涉及到社会因素。许多软件的开发和运行涉及机构、体制及管理方式等问题,甚至涉及到人的观念和人们的心理22*软件的特点*基于软件功能的划分系统软件

能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。例如,操作系统、数据库管理系统、设备驱动程序以及通信处理程序等。 支撑软件是协助用户开发软件的工具性软件,其中包括帮助程序人员开发软件产品的工具,也包括帮助管理人员控制开发的进程的工具。应用软件

是在特定领域内开发,为特定目的服务的一类软件。23*软件的分类*基于软件工作方式的划分实时处理软件指在事件或数据产生时,立即予以处理,并及时反馈信号,控制、监测过程的软件。主要包括数据采集,分析,输出三部分分时软件

允许多个联机用户同时使用计算机交互式软件能实现人机通信的软件批处理软件把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完的软件24*基于软件开发目标用户的划分:项目软件也称定制软件,是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。例如军用防空指挥系统、卫星控制系统产品软件是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。例如,文字处理软件、文本处理软件、财务处理软件、人事管理软件等。25*基于软件部署方式的划分:桌面程序带数据库不带数据库网络程序C/SB/S261.2软件工程主要内容:软件工程的定义软件工程的基本原理*软件工程的框架*软件工程的三个要素*软件工程的知识体系*软件开发方法271.2.1软件工程定义软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济地开发出高质量的软件并有效地维护它。 1993年美国《IEEE软件工程标准术语》对软件工程下的定义为(1)把系统化的、规范的、可度量的途径应用于软件开发、运行和维护的过程,也就是把工程化应用于软件中;(2)研究(1)中提到的途径。28*软件工程含义的理解1968年北大西洋公约组织(NATO)的计算机科学家在国际学术会议上,针对软件开发长期以来存在的“开发周期长、成本高、质量差、适应性差、难维护”这五大难题,提出了“软件危机”的概念。并为解决这些难题,首次提出“软件工程”的概念,提出把软件开发从“艺术”和“个体行为”向“工程”和“群体协同工作”转化。基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照预算和进度,实现满足用户要求的软件产品的定义、开发、发布和维护的工程。291.2.2软件工程的7条基本原理它们是相互独立的,是缺一不可的最小集合;同时,它们又是相当完备的。1)用分阶段的生命周期计划严格管理 把软件生命周期划分成若干个阶段,并相应地制定出切实可行的计划,然后严格按照计划对软件的开发与维护进行管理。

项目概要计划、里程碑计划、项目控制计划、产品控制计划、验证计划、运行维护计划2)坚持进行阶段评审 设计错误63%,编码错误37%,发现越晚成本越高303)实行严格的产品控制 需求变更不可避免,需经过变更评审。实行基准(基线)配置管理。4)采用现代程序设计技术

结构化、面向对象、面向服务、面向模式程序设计5)结果应能清楚的审查

根据开发总目标和期限规定开发组织的责任和产品标准6)开发小组的人员应该少而精7)承认不断改进软件工程实践的必要性

积极主动地采纳新的软件技术,注意不断总结经验31*软件工程的框架软件工程描述一个团队为达到某个既定目标,在一定环境中的工作步骤,以及在这些工作步骤中如何对团队的成员进行角色分工,如何为各种角色确定具体的工作流程,并指明在工作流程中应从事哪些活动,使用什么样的方法、工具,产生哪些阶段性成果。此外软件工程还指明上述内容应如何进行有效管理以确保成功,以及工程进行过程中和结束后怎样对工程进行评价,以期不断改进。32软件过程软件管理角色环境流程活动方法工具成果评价目标(软件产品)软件工程框架*软件工程的3个要素总体而言,软件工程包含技术和管理两方面的内容,是管理和技术的紧密结合。软件工程研究的内容包含方法、工具、过程这三个要素。整体体系以质量为中心,关注质量是软件工程的根本出发点和最终目标33关注质量过程方法工具方法:包括管理方法(如项目管理)和技术方法(如系统分析、设计、测试技术等)。工具;为方法提供支持,为方法的运用提供自动或半自动的支撑环境和软件工具。过程:是将方法与工具相结合,为开发高质量软件规定各项任务的工作步骤。*软件工程的知识体系2001年5月,ISO和IEC共同发布了一份标准化文件——《软件工程知识体系指南》,目前仍在更新之中。以2004年发布的版本,软件工程知识体系(SWEBOK,SoftwareEngineeringBodyofKnowledge)的主要内容包括10个知识域(KnowledgeArea):34*软件工程的知识体系软件需求(SoftwareRequirements)软件设计(SoftwareDesign)软件构造(SoftwareConstruction)软件测试(SoftwareTesting)软件维护(SoftwareMaintenance)软件配置管理(SoftwareConfigurationManagement)软件工程管理(SoftwareEngineeringManagement)软件工程过程(SoftwareEngineeringProcess)软件工程工具与方法(SoftwareEngineeringToolsandMethods)软件质量(SoftwareProcessandProductQuality)35*软件开发方法1、软件开发方法是一种认知观软件主要涉及“现实世界”、“概念世界”、“计算机世界”三个空间。其实质是人以计算机语言为桥梁,将现实世界映射于计算机世界中,已解决人们在客观感知世界中的问题。在很多工程领域中,从事工程设计开发的都是熟悉本领域的工程师或专家;但是在软件工程领域,一般由计算机专业背景的人在另一个不熟悉的领域中从事软件开发。这就要求一个学习、调研、表述、论证的过程,做到对应用领域的真正认知,而后进行软件实现。软件开发方法正是为了解决上述问题而产生的。36*软件开发方法面向过程的结构化开发方法面向对象的开发方法两种开发方法是本门课程的主要内容。37Theend.后面部分的内容作为参考资料。39*工程对比一、盖房子确定和分析需求;提出并文档化房子的总体设计;提出房子的详细规格说明;识别并设计房子的组成部分;构建房子的每一个组成部分;测试房子的每一个组成部分;把房子的各个组成部分集成在一起,在住户搬进来之前做最后的修改;由房子的住户持续进行维护。注意事项:1、房子是在社会、经济以及它所处的政府体系的背景下建造的。即房子的建造要遵守建设法规、建设标准、生活和风俗习惯、质量保证规定和常识等40*工程对比注意事项:2、不可能确切的规定建造房子的活动,必须根据经验为决策留有余地,已处理未预料到的或非常标准的情形。这正是艺术和专业技术发挥作用的地方。。。。因此,盖房子是一项复杂的任务,在建造的过程中,过程、产品或资源很多时候会发生变化,但都可以通过艺术和专业知识进行适当的调剂。虽然盖房子的过程可以标准化,但是,专家的判断力和创造性总是需要的。41*工程对比二、构建一个系统:42盖房子软件项目确定Smith夫妇、Smith父母、工程队确定客户、用户、开发团队确定需求:边界、实体、活动确定需求:边界、实体、活动设计建筑平面图、透视图向客户展示图片、报表、文字描述、原型客户评审;设计细化;开始施工客户评审;设计细化;设计编写代码变更(增加一个天窗;追加预算用另外一种材料;增加设施)需求变更单个房间测试;供电、供水整体测试单元测试;集成测试交付使用验收测试及交付住户维护;工程队维修用户使用;开发商维护*软件工程的概念、特点及类比概念:软件工程是创造和生产软件的活动和过程,包括相关的需求分析、结构设计、编程、测试和部署等各个环节。软件工程不是科学,因为其目的在于创造而不是发现软件工程甚至不是传统意义上的工程,因为一般工程都有成熟的系统化方法,比如土木设计有很严格的标准和设计手册供参考,但软件工程至今没有一个公认的系统化方法,还停留在后手工作坊阶段。43*软件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论