软件工程第1章- 概述_第1页
软件工程第1章- 概述_第2页
软件工程第1章- 概述_第3页
软件工程第1章- 概述_第4页
软件工程第1章- 概述_第5页
已阅读5页,还剩131页未读 继续免费阅读

下载本文档

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

文档简介

软件工程导论0计算机软件学科程序设计语言数据结构人机交互程序设计方法论软件工程1教材及参考书张海藩:软件工程导论(第6版),清华大学出版社,2013.萨默维尔:软件工程(第8版),机械工业出版社,2009.012成绩评分标准平时成绩(20%)(课堂表现、考勤)课程报告(40%))(可行性报告和需求分析报告)期末考试(40%)(开卷笔试)3课程介绍和要求用工程化的方法来开发软件4教学目标为什么要学习这门课程有助于正确理解和认识“软件”的概念及其特点理解软件开发面临的问题和挑战掌握软件工程的原则、方法和思想来系统地开发软件,尤其是复杂、庞大的软件的开发了解和接触软件开发所需的各种技术手段理解、掌握和运用5理解什么是软件工程为什么需要软件工程(产生背景)软件工程需要解决那些问题软件工程涉及那些方面内容6掌握软件工程概念技术过程手段工具7运用运用工程化思想进行软件开发可行性研究需求分析软件设计程序设计软件维护8先导要求程序设计语言最好有一定的软件开发经验9学习要求听理解知识点和思想无需死记硬背做实践体会软件工程的原则、方法和技术,在实践中提高培养抽象思维能力培养独立解决问题的能力培养合作精神想阅读相关资料10课程实习内容选择一个项目开发课题,用软件工程的思想知道其开发过程。完成需求分析,详细设计,测试,项目汇报。分组以小组为单位,6人一组为宜11提交内容电子文档与打印文档评价方法按阶段递交和打分文档:完整性、合理性、规范性注意:严格按照要求执行12印度软件业全球软件外包市场规模已达到5000亿美元。全球软件外包的发包市场主要集中在北美、西欧和日本等国家,其中美国占40%,日本占10%。美国市场被印度垄断,印度软件业80%的收入依赖软件外包业务,印度已经成为软件外包的第一大国中国海关的统计,2012年中国外包及软件出口业务总额约为368亿美元,只相当于全球外包总量的1%,大约相当于印度5多年前的水平,且60%以上的业务来自日本。现在软件公司年收入增长率为25%-45%,而在互联网鼎盛时期则到达了100%。纳斯达克上市的印度人创办的软件公司至少有25家比尔·盖茨早就预见,印度将成为21世纪的软件超级大国,现在这个预言正在变成现实。13计算机人才需求每年增加30万(2012年)

据介绍,目前我国的计算机应用水平还处于初级阶段,现有计算机和信息技术设施的功能没有得到很好的开发和运用,比发达国家落后10年。但我国信息技术在不断地发展中,目前的软件营业收入是十年前的500倍,2012年软件产业的规模达到25000亿元。随着我国软件业规模不断扩大,软件人才结构性矛盾日益显得突出。教育部关于紧缺人才的报告称,软件从业人员近320万人,其中专业人才约有150万人(其中高级人才20万人,中级人才90万人,初级人才40万人)。人才结构呈两头小中间大的橄榄型结构,不仅缺乏高层次的系统分析员、项目总设计师,也缺少大量的从事基础性软件开发人员。根据国际经验,软件人才高、中、初之比为1∶4∶7。按照合理的人才结构比例进行测算,到2013年,我国需要软件高级人才30万人,中级软件人才100万人,初级软件人才60万人,再加上企业、社区、机关、学校等行业,初步测算,全国计算机应用专业人才的需求每年将增加数十万人。

14软件测试人才缺口30万年薪可达20万(2012年)30万——软件测试人才缺口30万据前程无忧招聘网统计,目前,国内320万软件从业人员中,真正能担当软件测试职位的不超过10万人,软件测试人才缺口已超过30万并向40万大关急速挺进。在中华英才网近期发布的2012十大热门职业中,软件测试工程师也位居三甲之列。20万——软件测试人才年薪可达20万为了吸引更多的人才,企业纷纷采取高薪策略。据统计,测试工程师的起步月薪在5000~6000元左右,远高于同龄人2000~3000元的薪资水平,另外还可享受带薪年假、内部培训、住房公积金等福利待遇,工作2~3年月薪大约在8000~13000元之间。但即便如此,很多企业仍旧纷纷感叹:“高薪难觅找茬人才。”1:8——目前我国软测人员与开发人员比例微软公司软件测试工程师对外透露,在微软内部,软件测试工程师和开发工程师的比例基本维持在1:1左右,而国内其他软件企业中这一比例却仅在1:5至1:8之间。“招个软件测试人员比招博士还难!”不少企业发出类似的感叹。15IT行业收入情况IT企业的薪酬结构构成

技术人员的薪酬结构构成情况:岗位工资68.1%,技能工资17.6%,各种津贴3.4%,奖金10.9%;

销售人员的薪酬结构构成情况:岗位工资30.8%,各种津贴14%,奖金14.1%,佣金33.2%,长期激励7.9%;

技术、销售以外人员的薪酬结构构成:岗位工资66.5%,各种津贴19.6%,奖金10.1%,长期激励3.8%。

16谁在拿高薪电信高级测试工程师(年薪20万)他们是电信设备提供商产品能否推向市场的关键环节,因为无论是软件的编程还是硬件的研发,都是在独立的空间里面分别完成,最后能否集成在一起以确保系统良好的运营,企业耗费巨资开发的产品能否实际应用,很大程度上取决于测试结果。创新能力、软硬兼通、具备三到五年测试的经验是这个职位必须具备的素质。17谁在拿高薪

SP产品开发经理(年薪30万)作为SP行业的产品经理,负责产品的创意、研发、渠道、执行等环节,这样的人在这个行业里面是很少的,有经验的人也是很少的,薪酬自然相当高。这是一个极其富有挑战性的职位,你不但有创意,你还要能够实现。首先必须在很短的时间内创新开发出用户喜欢的产品。还要率领研发团队尽快执行,与电信运营商沟通与渠道商谈判,最后把产品推向用户。18谁在拿高薪手机研发经理(年薪31万)不论从基本现金收入到总薪酬都高于其他职能部门经理薪酬水平,尤其是手机芯片制造商对于该类人才疯狂“挖角”,也导致研发部门的人才从制造商企业大量流失。物以稀为贵的道理人人通晓,薪酬自然水涨船高。19谁在拿高薪软件与系统集成领域的研发总监(年薪40万)研发队伍是软件/集成企业进行创新的原动力,经理级以上的高级研发人员,他们肩负着研发设计管理、监督员工工作甚至保证公司战略目标实现的职责,是软件/集成公司中的中坚力量,属于市场稀缺资源,因而企业为使其能够留在企业中并为企业创造更多价值,愿意支付更高的薪水。在本次调查中给付最高的公司为研发总监支付高于40万的年薪,足见公司对高级研发人员的重视程度。20目前国际上公认的IT证书主要包括以下几种:

微软专家认证、Cisco专家认证、3COM资格认证、SCO资格认证、Siemon资格认证、NORDX/CDT资格认证、AMP公司资格认证、ADOBE资格认证、Sun资格认证、Oracle认证介绍、CIW认证、Lotus认证21处在十字路口的中国软件产业主权大国必须建立基于自主技术的、完整的软件产业体系。 软件本国提供率:中国1/3左右,美国97%“印度模式”还是“中国模式”软件人才结构不合理,缺乏中高级软件人才软件人员缺乏软件工程化的概念。/viewthread.php?tid=21&extra=22

你现在有什么感想?

23各章节主要内容第一章软件工程学概述第二章可行性研究(重要)第三章需求分析(重要)第四章形式化说明技术第五章总体设计(重要)第六章详细设计(重要)第七章实现第八章维护第九章面向对象方法学引论第十章面向对象分析第十一章面向对象设计第十二章面向对象实现第十三章软件项目管理24第一章软件工程学概述软件工程产生的背景(软件危机)软件工程定义软件工程方法学软件过程模型小结251.1软件工程产生的背景软件

a.软件的定义

软件(

Software)是计算机系统中与硬件相互依存的另一部分,它是包括程序(Program),数据(Data)及其相关文档(Document)的完整集合。Software=Program+Data+Document程序是按事先设计的功能和性能要求执行的指令序列数据是使程序能正常操纵信息的数据结构文档是与程序开发,维护和使用有关的图文材料26软件的特征软件是一种逻辑实体,而不是具体的物理实体。因而它具有抽象性软件的生产与硬件不同,在它的开发过程中没有明显的制造过程软件的运行和使用期间,没有硬件那样的机械磨损,老化问题软件的开发和运行常受到计算机系统的限制,对计算机系统有着不同程度的依赖性软件的开发至今尚未完全摆脱手工艺的开发方式27软件的特征非常复杂实际问题非常复杂逻辑复杂开发复杂成本难以估算进度难以控制人员素质要求质量得不到保证96年Ariane火箭发射失败,浮点数转换时发生错误28软件的特征成本高29软件的特征维护困难维护形式多样化改正性:修改故障完善性:增加功能适应性:移植维护成本越来越高55%到70%维护带来的问题30软件的特征风险大1995年美国Standish咨询集团的统计分析(至90年代初的软件项目执行情况)成功:16.2%失败:31%受到挑战:53.8%近几年来的统计数据成功:26%失败:28%受到挑战:46%31软件的分类按软件的功能划分系统软件操作系统数据库管理系统设备驱动程序通信处理程序32软件的分类支撑软件文本编辑程序文件格式化程序程序库系统支持需求分析、设计、实现、测试和支持管理软件33软件的分类应用软件商业数据处理软件工程与科学计算软件计算机辅助设计/制造软件系统仿真软件智能产品嵌入软件医疗、制药软件事务处理、办公自动化软件计算机辅助教学软件34软件的分类按软件规模划分35软件的分类按软件工作方式划分实时处理系统分时系统交互式软件批处理软件36软件的分类按软件服务对象的范围划分项目软件产品软件按使用频率划分一次使用频繁使用37软件的分类按软件失效的影响进行划分高可靠性软件一般可靠性软件38软件的发展早期面向批处理有限的分布自定义软件第二阶段多用户实时数据库软件产品第三阶段分布式系统嵌入“智能”低成本硬件消费者的影响第四阶段强大的桌面系统面向对象技术专家系统人工神经网络并行计算网路计算机1950196019701980199020001968年10月,北大西洋公约组织(NATO)的科学家在德国召开的学术会议上正式提出了软件危机问题。39软件危机案例美国IBM公司在1963年至1966年开发的IBM360机的操作系统。这一项目花了5000人一年的工作量,最多时有1000人投入开发工作,写出了近100万行源程序。据统计,这个操作系统每次发行的新版本都是从前一版本中找出1000个程序错误而修正的结果。40这个项目的负责人F.D.Brooks事后总结了他在组织开发过程中的沉痛教训时说:“正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。程序设计工作正像这样一个泥潭,一批批程序员被迫在泥潭中拼命挣扎,谁也没有料到问题竟会陷入这样的困境”。IBM360操作系统的历史教训成为软件开发项目的典型事例为人们所记取。41Myth:如果落后于进度表,我们可以增加更多的程序员便能赶上进度。Reality:软件开发不是象制造业的机械过程。用Brooks的话说:“向进度落后的软件项目增加人员只会使该项目进度变的更慢。”⑴项目没有被很好地理解;计划不周,最终导致进度拖延。问题出在哪里?42人与人的交流比写程序困难得多。⑵

没有充分的文档资料(documentation)

Myth:一个成功的项目唯一需要交付的就是运行的程序。

Reality:运行的程序只是软件配置的一部分,除此之外,还包括程序清单、文档以及相关数据。文档是开发工作成功进行的基础,更重要的是为软件维护提供指南作用。43

⑶软件可靠性(reliability)缺少度量的标准,质量无法保证。如何保证软件产品的质量,是非常复杂困难的问题,特别对于规模庞大的软件。Myth:

一旦我们完成了程序的编写,并让它能运行,那我们的任务就完成了。Reality:

有一个人曾经说过:“你越早开始编写代码,那你就越晚完成工作。”工业统计数字表示,产品第一次交付给用户后,还要花费编写该软件60%-80%的精力来维护。⑷软件难以维护(maintainability),不易升级(evolvability)442)软件危机

软件危机的表现概括来讲主要是两个方面的问题如何开发软件,以满足对软件日益增长的需求如何维护数量不断膨胀的已有软件45软件危机的表现(1)对软件开发成本和进度的估计常常很不准确(2)用户对“已完成的”软件系统不满意的现象经常发生。(3)软件产品的质量往往靠不住。

(4)软件常常是不可维护的。(5)软件通常没有适当的文档资料。(6)软件成本在计算机系统总成本中所占的比例逐年上升。(7)软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。46产生软件危机的原因与软件本身的特点有关(难于维护,逻辑复杂)与软件开发与维护的方法不正确有关:软件≠程序急于求成=拔苗助长各自为阵,无方法学47软件工程(学)因危机而产生开发一个具有一定规模和复杂性的软件系统与编写一个简单的程序不一样正如建设狗窝和高楼大厦大型、复杂软件系统的开发是一项工程,必须按照工程化的方法组织软件的生产和管理,必须经过分析、设计、实现、测试、维护等一系列软件过程和活动48消除软件危机的技术途径提出有效的方法和工具支持软件开发1960年出现软件危机,软件工程被正式提出,开始注重软件结构的研究1970年代,程序设计方法学成为研究热点,出现了结构化分析和设计方法1980年代,软件开发方法学成为研究重点,面象对象技术开始出现并逐步流行1990年代,软件复用和软件构件技术被视为解决软件危机的一条现实可行途径,基于构件的软件开发方法成为主流技术之一。新的技术:软件重用、快速原型、需求工程典型技术:COM,Java,C++,.Net,….支撑工具和环境:Jbuilder,VisualStudio,WebLogic,…49消除软件危机的管理途径20世纪80年代末,美国DoD(网络信息中心)和工业界开始认识到管理的重要性美国DoD的一项研究表明,70%的项目由于管理不善导致难以控制进步、成本和质量;进一步的研究发现:管理是影响软件项目成功开发的全局性因素,而技术只影响局部如果软件开发组织不能对软件项目进行有效管理,就不能充分发挥软件开发方法和工具的潜力,也就不能高效率地开发出高质量的软件产品501.2软件工程

1.2.1软件工程的介绍概括地说,软件工程是指导计算机软件开发和维护的一门工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,以经济地开发出高质量的软件并有效地维护它,这就是软件工程。51软件工程的定义1968年在第一届NATO会议上曾经给出了软件工程的一个早期定义:“软件工程就是为了经济地获得可靠的且能在实际机器上有效地运行的软件,而建立和使用完善的工程原理。”1993年IEEE进一步给出了一个更全面更具体的定义:“软件工程是:①把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件;②研究①中提到的途径。”52软件工程的本质特性1.软件工程关注于大型程序(软件系统)的构造2.软件工程的中心课题是控制复杂性3.软件经常变化4.开发软件的效率非常重要5.和谐地合作是开发软件的关键6.软件必须有效地支持它的用户7.在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人(完成一些工作)531.2.2软件工程的基本原理1.用分阶段的生命周期计划进行严格管理2.坚持进行阶段评审3.实行严格的产品控制4.采用现代程序设计技术5.结果应能清楚地审查6.开发小组的人员应该少而精7.承认不断改进软件工程实践的必要性541.2.3软件工程方法学软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。所谓管理就是通过计划、组织和控制等一系列活动,合理地配置和使用各种资源,以达到既定目标的过程。通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学(methodology),也称为范型(paradigm)。在软件工程领域中,这两个术语的含义基本相同。55软件工程:一种层次化技术质量关注点过程方法工具

软件工程层次图软件工程三个要素:工具、方法、过程基础层,综合方法及工具,定义方法使用的顺序,所需要的管理为软件开发提供“如何做”的技术为软件开发提供自动或半自动的软件支撑环境,建立计算机辅助软件工程(CASE)的软件开发支撑系统561.传统方法学传统方法学也称为生命周期方法学或结构化范型。它采用结构化技术(结构化分析、结构化设计和结构化实现)来完成软件开发的各项任务,并使用适当的软件工具或软件工程环境来支持结构化技术的运用。这种方法学把软件生命周期的全过程依次划分为若干个阶段,然后顺序地完成每个阶段的任务。采用这种方法学开发软件的时候,从对问题的抽象逻辑分析开始,一个阶段一个阶段地进行开发。572.面向对象方法学当软件规模庞大,或者对软件的需求是模糊的或会随时间而变化的时候,使用传统方法学开发软件往往不成功,此外,使用传统方法学开发出的软件,维护起来仍然很困难。面向对象方法是一种以数据为主线,把数据和对数据的操作紧密地结合起来的方法。58面向对象方法学的4个要点(1)把对象(object)作为融合了数据及在数据上的操作行为的统一的软件构件。面向对象程序是由对象组成的,程序中任何元素都是对象,复杂对象由比较简单的对象组合而成。也就是说,用对象分解取代了传统方法的功能分解。(2)把所有对象都划分成类(class)。每个类都定义了一组数据和一组操作,类是对具有相同数据和相同操作的一组相似对象的定义。数据用于表示对象的静态属性,是对象的状态信息,而施加于数据之上的操作用于实现对象的动态行为。59(3)按照父类(或称为基类)与子类(或称为派生类)的关系,把若干个相关类组成一个层次结构的系统(也称为类等级)。在类等级中,下层派生类自动拥有上层基类中定义的数据和操作,这种现象称为继承。(4)对象彼此间仅能通过发送消息互相联系。对象与传统数据有本质区别,它不是被动地等待外界对它施加操作,相反,它是数据处理的主体,必须向它发消息,请求它执行它的某个操作以处理它的数据,而不能从外界直接对它的数据进行处理。也就是说,对象的所有私有信息都被封装在该对象内,不能从外界直接访问,这就是通常所说的封装性。60用面向对象方法学开发软件的过程,是一个主动地多次反复迭代的演化过程。面向对象方法在概念和表示方法上的一致性,保证了在各项开发活动之间的平滑(即无缝)过渡。面向对象方法普遍进行的对象分类过程,支持从特殊到一般的归纳思维过程;通过建立类等级而获得的继承性,支持从一般到特殊的演绎思维过程。61面向对象方法学的优点正确地运用面向对象方法学开发软件,则最终的软件产品由许多较小的、基本上独立的对象组成,每个对象相当于一个微型程序,而且大多数对象都与现实世界中的实体相对应,因此,降低了软件产品的复杂性,提高了软件的可理解性,简化了软件的开发和维护工作。对象是相对独立的实体,容易在以后的软件产品中重复使用,因此,面向对象范型的另一个重要优点是促进了软件重用。面向对象方法特有的继承性和多态性,进一步提高了面向对象软件的可重用性。62问题定义软件定义可行性研究

需求分析

总体设计详细设计软件生命周期软件开发编码单元测试综合测试运行维护

持久满足用户需求1.3软件生命周期631.问题定义问题定义阶段必须回答的关键问题是:“要解决的问题是什么?”通过对客户的访问调查,系统分析员扼要地写出关于问题性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。642.可行性分析这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”系统分析员需要进行一次大大压缩和简化了的系统分析和设计过程,也就是在较抽象的高层次上进行的分析和设计过程。可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。65可行性研究经济可行性技术可行性操作可行性法律可行性663.需求分析这个阶段的任务仍然不是具体地解决问题,而是准确地确定“为了解决这个问题,目标系统必须做什么”,主要是确定目标系统必须具备哪些功能。系统分析员在需求分析阶段必须和用户密切配合,充分交流信息,以得出经过用户确认的系统逻辑模型。通常用数据流图、数据字典和简要的算法表示系统的逻辑模型。用正式文档准确地记录对目标系统的需求,这份文档通常称为规格说明书(specification)。674.总体设计这个阶段必须回答的关键问题是:“概括地说,应该怎样实现目标系统?”总体设计又称为概要设计。首先,应该设计出实现目标系统的几种可能的方案。通常至少应该设计出低成本、中等成本和高成本等3种方案。此外,还应该制定出实现最佳方案的详细计划。总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。68著名的软件设计方法逐步精化-自顶向下设计方法面向数据的设计方法,面向数据流的设计方法面向对象的设计阶段性成果:概要设计说明书;数据库或数据结构说明书;组装测试计划等文档。695.详细设计详细设计阶段的任务就是把解法具体化,也就是回答下面这个关键问题:“应该怎样具体地实现这个系统呢?”设计出程序的详细规格说明应该包含必要的细节,程序员可以根据它们写出实际的程序代码详细设计也称为模块设计,在这个阶段将详细地设计每个模块,确定实现模块功能所需要的算法和数据结构。70详细设计工具图形工具流程图、N-S图、判定表、判定树、问题分析图列表工具HIPO(HierarchyplusInput/Process/Output)语言工具PDL(ProgramDesignLanguage)716.编码和单元测试这个阶段的关键任务是写出正确的容易理解、容易维护的程序模块。把软件设计转换成计算机可以接受的程序代码。选择易学、使用方便的编程语言,以利于减少出错的概率和提高软件的可靠性。编程风格是在不影响软件性能的前提下,有效地组织和编写程序,提高软件的易读性、易测试性和易维护性。72开发软件不仅仅是编程737.综合测试这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。最基本的测试是集成测试和验收测试。通常需要以正式的或非正式的方式对用户进行培训。748.软件维护任务:通过各种维护活动使软件系统持久地满足用户的需求。每项维护活动实质上都是一次压缩和简化了的软件定义和软件开发过程。都要经历提出维护要求、分析维护要求、提出维护方案、审批维护方案、确定维护计划、修改软件设计、修改程序、测试程序、评审、验收等步骤。75通常有4类维护活动:改正性维护:即诊断和改正在使用过程中发现的软件错误适应性维护:即修改软件以适应环境的变化完善性维护:即根据用户的要求改进或扩充软件使它更完善预防性维护:即修改软件为将来的维护活动预先做准备761.4软件过程软件过程是为了获得高质量软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程定义了运用方法的顺序、应该交付的文档资料、为保证软件质量和协调变化所需要采取的管理措施,以及标志软件开发各个阶段任务完成的里程碑。77软件过程可分为三大类:基本过程类:是构成软件生存周期主要部分的那些过程,包括获取、供应、开发、操作、维护等过程。支持过程类:可穿插到基本过程中提供支持的一系列过程,包括文档开发、配置管理、质量保证、验证、确认、联合评审、审计、问题解决等过程。组织过程类:一个组织用来建立、实施一种基础结构、并不断改进该基础结构的过程,包括管理、基础、改进、培训等过程。78软件过程模型软件生命周期的每一阶段都有明确的任务,把规模大、结构复杂、管理复杂的软件开发变得容易控制和管理。各个阶段的活动如何衔接,开发过程中采用什么样的策略,应遵守什么样的规定和制约,将这些活动框架(忽略不必要的细节)用一种模型表示出来,称为软件过程模型(或软件开发模型或软件生命周期模型)。也就是说,

软件过程模型是软件开发全部过程、活动和任务的结构框架。79案例:

某个老师(T)想要考察一个同学(S)的学习情况和技术水平,于是交给该学生一个任务。

T:我有一个朋友想要一个图象浏览软件,能够查看多种格式的图象,包括BMP、TIFF、JPG、PNG,并且能够支持一般的放大、缩小、漫游。你能做这样一个软件吗?

S:就是类似ACDSEE这样的软件吗?

T:差不多,不过不需要那么强大的功能,我这个朋友计算机是外行,最好能做的比较方便,傻瓜型的,例如象ACDSEE自动翻页这种功能还是要的。

S:我以前学过BMP和JPG的图象格式解析,我想没有问题

T:好的,给你30天时间,下周你再来一趟,跟我讲一下你的工作进度。这位同学非常明白老师的意图,回去后想了一下,并列出了一个清单。80一功能:

1.读取、显示、另存四种格式图片(BMP、TIFF、JPG、PNG)

2.放大、缩小、漫游

3.列出当前目录下所有四种格式图片文件名

4.PAGEUP(PAGEDOWN)自动调出当前目录上一张(下一张)图片二其它说明:

1.界面尽量简介,容易操作

2.不要图片预览和打印三开发工具:VC6

四开发环境:普通PC机;Window2000/xp

五工作量:

1.研究一下四种图片的格式

2.设计一个解析器类,解析这四种格式

3.设计一个文档类,实现读取、另存和目录浏览功能

4.设计一个视图类,实现显示、缩放、漫游功能工作清单81可行性分析需求分析概要设计详细设计实现测试交付维护对话过程工作清单一、二工作清单三、四、五写代码前的思考过程写代码提交给老师检查给老师朋友安装、讲解修正问题、改进软件……软件工程的各阶段:82实际情况1一切顺利,学生S按期交付了软件,经过一两周的试用、修改、完善后,三方都比较满意,该软件在老师的朋友那里成为一个得心应手的工具。

瀑布模型生存周期模型831.瀑布模型(WaterfallModel)传统瀑布模型84传统瀑布模型的特点提供了软件过程模型的基本框架(模板)。强调了每一阶段活动的严格顺序。质量保证观点:以经过评审确认了的阶段工作产品(文档)驱动下一阶段的工作,便于管理。是一种整体开发模型,程序的物理实现集中在开发阶段的后期,用户在最后才能看到自己的产品。

85实际的瀑布模型86瀑布模型优点提供了软件开发的基本框架有利于大型软件开发过程中人员的组织、管理有利于软件开发方法和工具的研究与使用

因此,在软件工程中占有重要的地位。87瀑布模型缺点1)在软件开发的初期阶段就要求做出正确、全面、完整的需求分析对许多应用软件来说是极其困难的。2)在需求分析阶段,当需求确定后,无法及时验证需求是否正确、完整。3)作为整体开发的瀑布模型,由于不支持产品的演化,缺乏灵活性,对开发过程中很难发现的错误,只有在最终产品运行时才能暴露出来,从而使软件产品难以维护。88瀑布模型适应场合瀑布模型一般适用于功能、性能明确、完整、无重大变化的软件系统的开发。例如操作系统、编译系统、数据库管理系统等系统软件的开发。应用有一定的局限性。89实际情况2

一周后,学生去见老师,并提交了工作清单,他发现老师的这位朋友(C)和老师在一起。S:这是工作清单,我已经研究清楚了四种文件的格式,可以写代码了。T:很好,不过我这位朋友有一些新想法,你不妨听听。C:你好。我新买了一个扫描仪,你的程序可不可以直接扫描图片进来。S:你可以自己扫描呀,买扫描仪的时候一般都会送正版软件的。C:是的,可是我一直不太会用,你知道我计算机水平不高,学一些新东西很累,也没有时间,如果你能直接链接扫描仪,我只要学会你的软件就行了,我愿意多支付一些费用……,还有,我想建一个图片库,你知道,我工作时需要上百个图片,经常找不到,最好还带模糊查询。90实际情况2(续)

S:………………..!!!!!C:还有一些,现在一时想不起来,我想起来的话会再跟你联系,时间上可以长一些。

S:………………..!!!!!!!!!!!!!!!T:要不这样吧,你先做一个样子出来给C看看,一边做,一边改。

C:这样最好,看见一个基本样子我就知道我想要什么了事情就这样定下来了,S愤怒的撕掉了自己的工作清单……..,回去后S花1天时间用DELPHI做了个样子,只能读BMP和JPG文件,做了些菜单和工具栏,用ACDSEE建了一个图片库。就这个“假”的程序,S和C讨论了一天,S又修改了几次,又讨论了几次,一周后,这个“假”的程序表面看起来和真的一模一样。91实际情况2(续)于是S打算用VC重写这个程序,但是他很快发现继续用DELPHI写更方便,因为至少界面不用重做了,于是……,两个月后,这个事情终于结束了。

S顺利的完成了他的毕业设计《JPG压缩优化算法设计》,C一直使用这个软件管理他的图片,并庆幸花了这么少的钱得到了这么有用的东西,而T,则正在考虑如何为他下一批学生分派任务。原型模型92听取用户意见建造/修改原型用户测试运行原型2.原型模型示意图在用户不能给出完整、准确的需求说明,或者开发者不能确定算法的有效性、操作系统的适应性或人机交互的形式等许多情况下,可以根据用户的一组基本需求,快速建造一个原型(可运行的软件),然后进行评估,进一步精化、调整原型,使其满足用户的要求,也使开发者对将要做的事情有更好的理解。93快速原型的开发途径有三种:1)仅模拟软件系统的人机界面和人机交互方式。2)开发一个工作模型,实现软件系统中重要的或容易产生误解的功能。3)利用一个或几个类似的正在运行的软件向用户展示软件需求中的部分或全部功能。总之,建造原型应尽量采用相应的软件工具和环境,并尽量采用软件重用技术,在运行效率方面可做出让步,以便尽快提供。同时,原型应充分展示软件系统的可见部分,如人机界面、数据的输入方式和输出格式等。94原型模型的适应场合原型模型比瀑布模型更符合人们认识事物的过程和规律,是一种较实用的开发框架。它适合于那些不能预先确切定义需求的软件系统的开发,更适合于那些项目组成员(包括分析员、设计员、程序员和用户)不能很好交流或通信有困难的情况。95实际情况3

正象上一种情况一样,用户提出了很多新要求,但是麻烦还不止这些……。一天,老师T匆匆忙忙的找到S。

T:我的研究生正在做的“海量多媒体数据库管理技术”的自科项目需要一个对图象管理的模块,主要是数据库对象和图象文件之间的转换、显示和一些编辑操作,时间很紧,你目前在做的代码可否直接利用一下?

S:恐怕有难度,我不清楚…….T:最好能够模块化强一些,你做的东西两边都能用,我这边比较急,一周后就要,我可以给你增加一个人一起做。

S:可是……T:没有关系,就这样决定了,这是一次锻炼机会。我再帮你找一个这方面的专家,你可以请教他。下周这个时间我会再来。

S感觉头脑里面“海量”、“JPG”、”编辑“、”自科“、”图片库“、”一周时间“等等交织在一起,剪不清,理还乱。于是他准备去请教一下专家(E)96实际情况3(续)E听了S说的情况,帮他画了两个图。业务模型图,用于说清两个用户到底要什么97实际情况3(续)分析业务模型图中的名次和动词,形成了数据对象图(类图)98实际情况3(续)

E要求S自己再画这样几张图:对于业务模型图中的每一个业务,使用类图中的类说明业务中数据对象(类对象)之间的关连关系。

S试着这样做了,能快根据自己画的8张图进行了模块设计:

1.图片文件类模块和图片库类模块

2.图片格式解析器父类模块;5个图片解析子类模块(4个文件格式和一个数据库格式)

3.图片扫描管理器模块

4.图片编辑器模块

5.图片显示器模块

S发现在网上有很多现成的图片扫描管理控件和图片编辑控件,完全满足要求,他自己花了一天一夜的时间编写了图片文件类模块和图片格式解析器父类,以及数据库解析子类,剩下的几天,他和老师新来的同学一起完成了剩余的模块。99实际情况3(续)一周过去了,他将图片文件类模块、.图片格式解析器父类模块、数据库解析子类,以及自己封装的图片编辑器交给了自己的老师,而由于每一个模块都是相对独立的,即使开始的用户要求他修改图片显示、图片库、扫描,也不会影响他现在的工作代码。增量模型1003.增量模型软件被作为一系列的增量构件来设计、实现、集成和测试,每一个构件是由多种相互作用的模块所形成的提供特定功能的代码片段构成。第一个增量往往是实现基本需求的核心产品。核心产品交付用户使用后,经过评价形成下一个增量的开发计划,它包括对核心产品的修改和一些新功能的发布。这个过程在每个增量发布后不断重复,直到产生最终的完善产品。101102增量模型的优点在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。103使用增量模型的困难在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。多个构件并行开发,具有无法集成的风险。1041054.螺旋模型软件风险是任何软件开发项目中都普遍存在的实际问题,项目越大,软件越复杂,承担该项目所冒的风险也越大。对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。螺旋模型的基本思想是降低风险。106快速原型验证规格说明验证设计验证编码测试综合测试维护变化的需求验证风险分析风险分析风险分析风险分析风险分析风险分析可看作在每个阶段之前都增加了风险分析过程的快速原型模型。简化的螺旋模型107108

螺旋模型风险分析工程实施用户通信用户评估产品维护项目产品增强项目新产品开发项目概念开发项目计划建造及发布支持用户需求的动态变化。原型可看作形式的可执行的需求规格说明,易于为用户和开发人员共同理解,还可作为继续开发的基础,并为用户参与所有关键决策提供了方便。螺旋模型特别强调原型的可扩充性和可修改性,原型的进化贯穿整个软件生存周期,这将有助于目标软件的适应能力。螺旋模型为项目管理人员及时调整管理决策提供了方便,进而可降低开发风险。螺旋模型的优点110缺点:①如果每次迭代的效率不高,致使迭代次数过多,将会增加成本并推迟提交时间;②使用该模型需要有相当丰富的风险评估经验和专门知识,要求开发队伍水平较高。适应场合:支持需求不明确、特别是大型软件系统的开发,并支持面向规格说明、面向过程、面向对象等多种软件开发方法,是一种具有广阔前景的模型。螺旋模型的缺点和适应场合111由B.H.Sollers和J.M.Edwards于1990年提出。喷泉模型对软件复用和生存期中多项开发活动的集成提供了支持,主要支持面向对象的开发方法。"喷泉"一词本身体现了迭代和无间隙特性。系统某个部分常常重复工作多次,相关功能在每次迭代中随之加入演进的系统。所谓无间隙是指在开发活动,即分析、设计和编码之间不存在明显的边界。5.喷泉模型112喷泉模型1.软件系统可维护性较好;2.各阶段相互重叠;3.整个模型是一个迭代的过程;4.模型具有增量开发特性,即能做到分析一点、设计一点、实现一点,测试一点,使相关功能随之加入到演化的系统中。5.模型是对象驱动的;6.该模型很自然地支持软部件的重用。维护测试实现设计分析演化113可重用部件组装模型(构件集成模型)

(ComponentIntegrationModel)构件(components)也称为组件,是一段实现一系列有确定接口的程序体,具有自己的功能和逻辑,能同其他构件集成起来协调工作。该模型支持软件重用(Reusability)

,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台(集成化软件开发环境(ISEE))的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。因此,在此基础上专家们又提出了“基于构件的软件工程”(CBSE)。构件集成模型如下图所示:114

构件集成模型

软件体系结构被建立后,必须用构件去充实,这些构件可从复用库中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。115Sommerville提出基于组件开发有两种思路:完成高层设计,对设计中的组件给出描述,以便找出可复用的组件,这些组件可在体系结构层次上加入或更详细的设计层次上加入。先根据需求搜寻可复用组件,再将设计建立在获得的组件基础上。这两种思路可结合起来。设计系统体系结构描述组件搜寻可复用组件集成系统先完成架构设计的复用系统需求描述搜寻可复用组件对需求作某些修改体系结构设计集成系统复用驱动设计116构件技术主要有三种流行标准OMG的CORBA:

对象管理组织(OMG)发布的公用对象请求代理体系结构(CommonObjectRequestBrokerArchitecture)。通过一个对象请求代理(ORB)提供一系列服务,使得一个构件和其他构件通信,而不管它们在系统中的位置,实现了远程对象通过接口进行通信的机制。为了解决CORBA对象引用不透明、缺少多重接口、系统过于复杂等问题,专家们又开发了新一代面向对象中间件平台ICE(InternetCommunicationsEngine—互联网通信引擎)。使构建分布式应用系统更容易、性能和伸缩性更好。

117微软的COM/DCOM:微软开发了构件对象模型(ComponentObjectModel),它提供了运行于windows之上的单个应用系统使用不同厂商生产的构件的规约。基于分布式环境下的COM称为DCOM(DistributeCOM)。SUN的EJB(EnterpriseJavaBean):随着Java在企业级应用的地位日趋重要,Sun提出了一个统一的企业级Java平台—J2EE(Java2EnterpriseEdition)。在J2EE中,EJB负责最核心的业务处理。它为服务器端的应用程序提供了一种与厂商无关的Java接口,让任何符合EJB规范的构件都可以运行在每一台这样的服务器上.118是由Rational公司的Booch、Jacobson、Rumbaugh提出的软件过程模型,也称RUP(RationalUnifiedProcess)。RUP重复一系列周期,每个周期由一个交付给用户的产品结束。每个周期划分为初始、细化、构造和移交四个阶段,每个阶段围绕着五个核心工作流(需求、分析、设计、实现、测试)分别迭代。6.统一软件开发过程119RUP软件开发生命周期120

初始阶段:进行问题定义,确定目标,评估其可行性,降低关键风险。

精化阶段:制定项目计划、配置各类资源、

温馨提示

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

评论

0/150

提交评论