第1章-软件工程的思想_第1页
第1章-软件工程的思想_第2页
第1章-软件工程的思想_第3页
第1章-软件工程的思想_第4页
第1章-软件工程的思想_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

1第1章

软件工程的思想SoftwareEngineering软件工程研究室2内容:

1.1软件

1.2软件工程的概念

1.3软件工程的作用和任务

1.4软件工程的发展

1.5软件工程三要素

1.6软件开发的基本策略

31.1软件

20世纪五十年代

软件=程序面向过程的程序=算法+数据结构

20世纪六十年代

软件=程序+文档

20世纪七十年代

软件=程序+文档+数据

面向对象的程序=对象+消息面向构件的程序=构件+构架

1.1.1软件的定义:41.1.2软件的特征:

软件是产品交付使用的载体;软件是是被开发或设计的,而不是被制造的;软件不会磨损,但维护困难。故障率时间初期故障率磨损实际理想故障率时间修改软件故障曲线硬件故障曲线图1-1硬件、软件故障图5*系统软件:和硬件交互多,数据结构复杂*应用软件*商业软件*工程和科学计算软件*嵌入式软件*个人计算机软件*人工智能软件*基于web软件*工具包软件*开源软件

*遗留软件1.1.3软件的分类61.2软件工程

P.Wegner和B.Boehm认为:

科学知识在设计和构造计算机程序,以及开发、运作和维护这些程序所需求的有关文档编制中的实际应用。

F.L.Bauer认为:

为了经济地获得软件,这个软件是可靠的并且能在实在的计算机上工作,所需要的健全的工作原理(方法)的确立和使用。

7IEEE(电气和电子工程师协会83)指出:

软件工程是开发、运行、维护和修复软件的系统化方法。IEEE(93)指出:

软件工程是将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化的方法应用于软件开发中。81.3软件工程的作用和任务软件开发失败的例子

1962年6月,美国飞向金星的第1个空间探测器

(水手1号)飞行中偏移了航线,失败了.

原因:飞舱中的导航程序中的一个语句的语义错.

世界上精心设计的并花费巨额投资的美国阿波罗8号太空飞船登月飞行计划的软件的错误,使存储器一部分信息丢失;阿波罗14号的飞行10天中,出现18个软件错误.

原因:软件的可靠性问题91963~1966年IBM开发OS/360操作系统,投资几千万美元,工作量5000多人年,拖延几年才交付使用,而且每年要发现近100个错误。

原因:计划上的问题,无法控制进度美国肯尼迪发射的一枚“阿脱拉斯火箭,当飞地面几十英里高空时,翻转.地面控制中心被迫下令炸毁,结果损失1850万美元

原因:飞行计划程序漏掉一个“连”接字符10

由上可看出:

软件需求量不断增大,复杂度越来越高,软件可靠性无保障软件维护费用不断上升软件进度无法预测成本增长无法控制程序人员无限度地增加各个方面.上述原因导致了60年代末的“软件危机.1968年北大西洋公约组织(NATO)的计算机科学家在联邦德国的幕尼黑召开的一次计算机软件国际会议上,对软件开发的方法、技术进行了广泛的讨论,首次提出了“软件工程”的概念。11

软件工程的作用:

解决60年代出现的软件危机解决软件当前面临的问题软件可靠性、重用性、维护性,生产率告诉人们怎样去开发软件、管理软件现代软件开发对人才的要求

系统分析人员、设计人员、软件架构师、软件集成人员、高层管理人员、中层项目经理、软件蓝领工人、实施和维护人员、软件售前人员、软件营销人员

提高软件产品的质量,降低软件开发的成本.

1986年,FrederickBrooks在

《NoSilverBullet》中论述,所有软件活动包括:根本任务—打造构成抽象软件实体的复杂概念结构;次要任务—使用编程语言表达这些抽象实体,并在时间和空间内将它们映射成机器语言。SE的任务131.4软件工程的发展

传统的软件工程时代过程软件工程时代对象软件工程时代构件软件工程时代发展方向:流水线装配软件工程的方向发展(流水线生产,网络化,服务化,全球化)

14为屏蔽计算机硬件的异构性,发展了操作系统.NET/COMWebServicesJ2EE/EJBUNIXWindowsLinuxC/C++语言Java语言为屏蔽操作系统和编程语言的异构性,发展了支撑软件和中间件为了屏蔽中间件之间的异构性,出现了Web技术。Fortran语言为了祢补应用软件与现实计算环境之间的距离

网络层

综观软件技术的发展图1-2应用系统操作系统支撑软件

中间件151.5软件工程三个要素

工具

Softwareengineeringlayers图1-3软件工程三个要素方法(步骤、原则)

过程(任务(活动))质量焦点工具16

提供完成系统开发每一步的详细指导,包括具体的模型、工具和技术(的使用说明)

1.5.1系统的开发方法(SystemDevelopmentMethodology)结构化方法:

使用结构化分析、结构化设计、结构化编程技术的系统开发方法。面向对象=对象+类+继承+消息

面向对象方法:面向对象的分析+面向对象的设计+面向对象的编程17

1.5.2工具(Tool)工具:

为过程、方法提供自动或半自动支持

CASE(Computer-AidedSoftwareEngineering)工具

计算机辅助系统软件工程工具。

CASE=软件工程+自动化工具

18系统开发中使用的一些工具

项目管理应用程序制图/图形应用程序字处理器应用程序计算机辅助系统工程(CASE)工具集成开发环境(IDE)数据库管理应用程序反向工程工具代码生成工具19

(1)

MicrosoftVisio(2)VisibleAnalyst()(3)OracleDesigner()(4)RationalRose()(5)Togethersoft()20DFDonCASEToolVisualAnalyst

Figure1-4显示DFD的可视化工具21RationalRoseShowingOODiagramsFigure1-5显示交互图的ROSE工具22TogetherJShowingClassDiagramandSynchronizedJavaCodeFigure1-6显示类图和JAVA源代码的往返工程工具23过程:定义了活动的时间、人员、工作内容

和达到预期目标的途径.

如一个通用过程框架(建模活动

(分析任务(获取、分析建立DFD图…文档),设计任务(结构、数据、接口…设计文档)))

1.5.3软件过程241.6软件开发的基本策略基本策略:“软件复用”、“分而治之”、“优化—折中”。

1.6.1软件复用(Reuse)

构造新的软件系统,使用已有的软构件,即组装(或加以合理修改)成新的系统。

据统计,世上已有1000亿多行程序,无数功能被重写了成千上万次,真是浪费!

构造新的软件系统可以不必每次从零做起;直接使用已有的软构件,即可组装成新的系统;复用已有的功能模块,既可以提高开发效率,也可以改善新开发过程中带来的质量问题。

Don’tre-inventthewheel在一个新系统中,大部分的内容是成熟的,只有小部分内容是创新的。将复杂问题分解为若干可独立的简单子问题,并分别独立求解,以降低复杂性;然后再将各子问题的解综合起来,形成最初复杂问题的解。1.6.2分而治之(DivideandConquer)Figure1-7显示模块的分解与组装27开发工作可并行进行;一个人只能了解他工作部分,不可能深入了解全部内容。分治的好处:独立部分小,易于理解;一个部分出了问题,易替换,影响范围小。局限:28

优化就是精简,去掉繁锁。

例如:

#在算法设计时要考虑空间和时间的折中;

#低成本和高可靠性的折中;

#安全性和速度的折中;1.6.3优化——折中

软件中的折中(Trade-off)不同的需求之间往往存在矛盾与冲突,需要通过折中来作出的合理的取舍,找到使双方均满意的点。29折中策略:是通过协调各个质量因素,实现整体质量的最优。

软件折中的重要原则:不能使某一方损失关键的职能,更不可以象“舍鱼而取熊掌”那样抛弃一方。用“优化——折中”的策略解决“鱼和熊掌不可兼得”的难题。

30

问题提出:假设鱼每千克10元,熊掌每千克一万元。有个倔脾气的人只有20元钱,非得要吃上一公斤美妙的“熊掌烧鱼”,怎么办?

解决方案:

用9元9角9分钱买999克鱼肉,用10元钱买1克熊掌肉,可做一道“熊掌戏鱼”菜。剩下的那一分钱还可建立奖励基金。例举你在学习和生活中使用折中思想的例子

31本章小结软件工程的思想

希望认真学习主动获取知识软件工程三要素方法过程工具软软件开发的基本策略软件工程的概念软件工程目标32观念之一:实践者并不能依赖于书籍,这是因为:现实的工作中,由于条件千差万别,即使是相当成熟的软件工程规范,常常也无法套用。正确认识软件工程的观念软件技术日新月异,没有哪一种软件标准能长

盛不衰。祖传秘方在某些领域很吃香,而在软件领域则意味着落后。33观念之二:我们拥有最好的开发工具、最好的计算机,一定能做出优秀的软件。

客观情况:

良好的开发环境只是产出成果的必要条件,而不是充分条件。

如果拥有好环境的是一群庸人,难保他们

不干出南辕北辙的事情。34观念之三:

如果我们落后于计划,可以增加更多的

程序员来解决。观念之四:需求分析很困难,软件修改越早代价越少,修改越晚代价越大,就跟治病一样道理。客观情况:软件开发不同于传统的农业生产,人多不见得力量大。如果给落后于计划的项目增添新手,可能会更加延误项目。35

争议之一:如果软件运行较慢,是换一台更快的计算机,还是设计一种更快的算法?一些有争议的观念

如果开发软件的目的是为了学习或是研究,那么应该设计一种更快的算法。如果该软件已经用于商业,则需谨慎考虑:若换一台更快的计算机能解决问题,则是最快的解决方案。36类似的争议还有:是买现成的程序,还是彻底自己开发?技术人员和商业人士常常会有不同的选择。

改进算法虽然可以从根本上提高软件的运行速度,但可能引入错误以及延误进程。技术狂毫无疑问会选择后者,因为他们觉得放弃任何可以优化的机会就等于犯罪。

37观点:

在软件领域永远没有最好的,只有更好的。能解决问题的都是好方法或是好语言。程序员在最初学习Basic、Fortran、Pascal、C、C++等语言时会感觉一个比一个好,不免有喜新厌旧之举。而如今的VisualBasic、Delphi、VisualC++、Java等语言各有所长,真的难分优劣。开发人员应该根据客观条件,选择自己熟悉的方法和语言,才能保证合格的质量与生产率。

程序设计是自由与快乐的事情,不要自寻烦恼。有最好的软件工程方法,最好的编程语言吗?争议之二:38观点:就软件开发而言,技巧的优点在于能另辟蹊径地解决一问题,缺点是技巧并不为人熟知。若在程序中用太多的技巧,可能会留下隐患,别人也难以理解程序。鉴于一个局部的优点对整个系统而言是微不足道的,而一个错误则可能是致命的。编程时是否应该多使用技巧?争议之三:39

建议用自然的方式编程,少用技巧。

《狼三则》的故事告诉我们“失败的技巧通常是技俩”。当我们在编程时无法判断是用了技巧还是用了技俩,那就少用。

《卖油翁》的故事又告诉我们“熟能生巧”,表明技巧是自然而然产生的,而不是卖弄出来的。

软件工程学科发展到今天,已经有了很多方法和规范,学之不尽。无论是什么好方法,贵在理解与灵活运用,而不可当成灵丹妙药.40关键术语(1)计算机辅助系统工程(软件)

CASE(ComputerAidedsys

温馨提示

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

最新文档

评论

0/150

提交评论