第1章二维码内容
[第1页]
教学课件
第1章课件资源(出版社指定的网址)
知识拓展:软件危机的产生
20 世纪60年代以前,计算机投入实际使用初期,软件设计只是为了某个特定的应用而在指定的计算机上设计和编制,采用密切依赖于计算机的机器代码或汇编语言,软件的规模较小,文档资料通常也不存在,很少使用系统化的开发方法,设计软件常等同于编制程序,基本上是单人设计、使用、操作、私人化的软件生产方式。
60年代中期,大容量、高速度计算机的出现,使计算机的应用范围迅速扩大,软件开发急剧增长。高级语言开始出现,操作系统的发展引起了计算机应用方式的变化,大量数据处理导致第一代数据库管理系统的诞生。软件系统的规模越来越大,复杂程度越来越高,软件可靠性问题也越来越突出。原来的个人设计及使用的方式不再能满足要求,迫切需要改变软件规范的研发生产方式,提高软件生产率,软件危机开始爆发。
[第2页]
知识拓展:软件危机产生的过程
20世纪60年代出现的软件危机直接导致软件工程的产生。当时出现的软件危机致使所研发软件的功能、性能和可靠性等细节难以保障、研发进度无法把握、成本增长难以控制、研发人员不断增加、软件运行维护和管理方面的工作量不断增大等问题。
软件开发过程涉及多个方面,是一项高度集成的脑力劳动。软件开发初期的“生产作坊式”模式和技术已根本无法适应软件快速发展的实际需要,致使大量质量低劣的软件产品投入运行且管理维护不当故障频发,一些开发过程中的大型软件系统遇到了许多不标准规范等问题,有些软件研发比原计划推迟了多年,或费用大大超出预算,有的系统不能符合用户预期,有的无法进行修改更新和维护,有些研发甚至半途而废无法继续。
[第2页]
知识拓展:软件工程术语的由来
1968年北大西洋公约组织(NATO)在联邦德国召开的一次会议上首次提出的“软件工程”术语,并专门讨论了软件危机问题。从此将软件开发纳入了工程化的轨道,基本形成了软件工程的概念、框架、技
术和方法。
主要教训包含个方面问题:一是研发的软件必须满足用户对软件日益增长的各种需求,二是强化管理和维护不断快速增长的现有软件。
[第3页]
知识拓展:软件工程技术的发展
智能计算机、量子计算机、光计算机、生物计算机和化学计算机等新一代计算机硬件的开发,也极大地促进了软件工程技术的变革和发展。21世纪将极大促进软件开发工业化大规模的发展,以满足产品化质量要求的工业标准,实现软件开发自动化、智能化等需求。突出特征是:计算机真正成为人们的一种工具,用户即分析员、软件过程即软件、模型驱动及面向服务开发等新方法将成为软件工程的最新发展趋势。
[第4页]
特别理解:程序和软件其他理解
国内外还有一些专家认为程序是按事先按照预定功能性能等要求设计和编写的指令序列。认为软件是
程序以及开发、使用和维护程序所需的所有文档。由应用程序、系统程序、面向用户的文档及面向开发者的文档构成。即:软件 = 程序 + 文档,其实这种观点有些落后或不准确。
在现代信息化社会,软件应用于工业、农业、银行、航空、政府部门、电子商务等各行各业和各个层面。这些应用促进了经济和社会的发展,提高人们的工作效率和生活质量。典型的应用软件,如办公软件、网络浏览器、、操作系统、人机界面、数据库、游戏、杀毒软件、嵌入式系统、编译工具等。
[第4页]
知识拓展:软件即服务SaaS
软件即服务SaaS(Software as a Service)是随着互联网技术的发展和应用软件的成熟,在21世纪开始兴起的一种完全创新的软件应用模式。是一种通过网络提供软件的模式,用户不用再购买和管理维护软件,而改用向服务提供商(Application Service provider, ASP)进行租用基于Web的软件,由服务提供商全权管理和维护软件,对于很多小型企业等,SaaS 是采用先进技术的最好途径,对传统研发机构带来一种新挑战。
[第5页]
知识拓展:计算机软硬件的失效率
计算机软硬件的失效率不同。硬件的失效率曲线是一个U型“浴盆”曲线,如图1-1所示,表明硬件随着使用时间的增加失效率急剧上升。而如图1-2所示的软件失效率曲线,因为软件不存在磨损和老化问题,然而存在退化问题,所以,没有U型曲线的右半翼,表明计算机软件将随着使用时间的增加失效率降低。
图1-1 硬件失效率曲线图1-2 软件失效率曲线
[第5页]
特别理解:软件工程概念其他理解
1968年,Fritz Bauer在NATO会议首次提出软件工程的定义为:建立并使用完善的工程化原则, 以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法。
实际上,对软件工程可以理解为:采用工程的概念、原理、技术和方法,在计划、开发、运行、维护与管理软件过程中,将科学的管理和最佳的技术方法紧密结合,以较经济的手段获得满足用户需求的可靠软件的一系列方法。即:
软件工程 = 工程原理+ 技术方法 + 管理技术
[第5页]
知识拓展:手机软件及应用软件种类
从开发的角度上,手机软件可以分成应用软件、用户界面、操作系统、底层与设备驱动以及通信协议等几个方面。测试是手机软件开发的另外一个重要领域,分为协议测试、白箱
测试以及系统测试。
应用软件包括游戏、WAP浏览器,Web浏览器、e-mail信箱管理器、MP3播放器、MPEG播放器、Flash播放器、日程管理、电子辞典、语音录音、语音识别以及汉字输入等。
用户界面包括待机界面、呼叫控制、MMS界面、短消息/EMS界面等等一切操作手机时所能够看到的、听到的和摸到的过程控制。开发用户界面涉及到对GUI和通信过程的理解。
每个手机里面都有一个嵌入式多任务操作系统,如Nucleus, AMX等等。这个系统不仅要管理好所有的任务,而且要提供纠错环境。
底层部分包含语音编解码、信令在无线接口上进行传输编解码、数据编解码等等内容。设备驱动指的是LCD驱动、Flash驱动、GPIO驱动、MIDI芯片驱动、通用串口驱动、USB驱动、电源管理单元驱动等等方面。
通信协议包含完成空中传输过程第2层、第3层协议、补充业务协议、数据传输协议、以及SIM/UIM协议等等。扩展一点,TCP/IP协议,WAP协议也可以归在这一类。
除此以外最新的手机还支持Java等应用环境的整合。
[第6页]
知识拓展:软件工程师的种类
软件工程师是软件研发与维护专业人员的统称,按照所处的领域不同可以分为系统分析员、软件策划师、系统架构师、软件设计师、程序员、测试员和维护管理员等。
[第7页]
知识拓展:常用传统/流行方法说明
本书既介绍软件研发常用的传统方法,以便掌握软件开发的基本步骤、方法和文档书写规范,也介绍面向对象等流行方法。在实际工作中,各种软件工程方法各有其特点,应当根据具体情况进行选择,也可将不同方法结合起来,取长补短合理利用,在提高软件开发效率的同时,提高软件的质量。
知识拓展:结构化分析与设计方法
结构化分析与设计(Structured Analysis and Structured Design,SASD)方法是1978年由E.Yourdon和L.L.Constantine提出的,是80年代使用最广泛的软件开发方法。
[第8页]
知识拓展:面向对象方法的特点
面向对象方法在分析和设计时使用相同的概念和表示方法,两者之间没有明显的界限。最终产品是由许多基本独立的对象组成的,这些对象具有简单、易于理解、易于开发、易于维护的特点,并且具有可重用性。
[第9页]
知识拓展:可视化开发方法由来
在20世纪90年代,随着图形用户界面的兴起及其元素生成不便,使用户界面在软件系统中所占的比例逐渐扩大,为此Windows提供了应用程序设计接口API(Application Programming Interface)和数百函数,极大地方便了图形用户界面的开发。然而,大量的函数参数需使用更多的有关常量,使基于Windows API的开发变得很难,因此,Borland C++推出了Object Windows编程,将API的各部分用对象类进行封装,提供了大量预定义的类,并为这些定义了许多成员函数。利用子类对父类的继承性,
以及实例对类的函数的引用,应用程序的开发可省略大量类的定义、大量成员函数的定义或只需作少量修改即可定义子类。Object Windows还提供了许多标准的缺省处理,极大地减少了应用程序开发工作量。由于非专业人员较难掌握,所以利用Windows API或Borland C++的Object Windows开发了一批可
视开发工具。
知识拓展:软件工程开发工具
在1.1.2中提到的计算机辅助软件工程CASE,实际是为软件开发提供的一组优化集成高效的软件开发工具。目前,软件开发环境进入了第三代ICASE(Integrated Computer-Aided Software Engineering)。系统集成方式从数据交换,到公共用户界面,再到信息中心库方式。不仅提供数据集成和控制集成,还提供了一组用户界面管理设施和一大批工具,如垂直工具集(支持软件生存期各阶段,保证生成信息的完备性和一致性)、水平工具集(用于不同的软件开发方法)以及开放工具槽。ICASE的进一步发展则是与其他软件开发方法的结合,如与面向对象技术、软件重用技术结合,以及智能化的I-CASE。近几年已出现了能实现全自动软件开发的ICASE。最终目标是实现应用软件的全自动开发,即开发人员只要写好“软件的需求规格说明书”,软件开发环境就自动完成从需求分析开始的所有的软件开发工作,自动生成供用户直接使用的软件及有关文档。
在应用成熟的数据库领域,目前已有可以实现基本全部自动生成的应用软件,如MSE 公司的Magic系统。只要求软件开发人员填写一系列表格(涉及软件实现的各种功能),系统就会自动生成应用软件。可节省90%以上的软件开发和维护的工作量,还能将应用软件的开发工作转交给熟练的用户。
软件开发人员在软件开发的各个阶段还可根据不同的需要,选择不同合适的工具。目前,软件工具发展迅速,目标是实现软件研发各阶段的自动化、智能化和集成化。
[第10页]
知识拓展:软件工程的CASE
CASE是一组工具和方法的集成,是多年来在软件工程管理、开发方法、开发环境和软件工具等方面研究和发展的成果,吸取了CAD(计算机辅助设计)、软件工程、操作系统、数据库、网络和其他计算机领域的原理和技术,是对软件方法的辅助平台。
[第11页]
知识拓展:软件过程四种角度组成
软件过程从合同、管理、工程和支持四种角度,可分为获取过程、供应过程、管理过程、开发过程、
运作过程、维护过程和支持过程。为了具体实现软件过程,需要根据软件项目需求等实际情况,在软件生存周期内,通过确定软件开发模型(模式),将方法和技术结合,在软件工具的支持下依次进行开发进程并循序渐进。
[第11页]
特别理解:软件过程的其他理解
软件过程是指软件生存周期所涉及的一系列相关过程。过程是活动的集合;活动是任务的集合;任务要起着把输入进行加工然后输出的作用。活动的执行可以是顺序的、重复的、并行的、嵌套的或者是有条件地引发的。
软件过程可概括为三类:基本过程类、支持过程类和组织过程类。基本过程类包括获取过程、供应过程、开发过程、运作过程、维护过程和管理过程。支持过程类包括文档过程、配置管理过程、质量保证过程、验证过程、确认过程、联合评审过程、审计过程以及问题解决过程。组织过程类包括基础设施过程、改进过程以及培训过程。
软件过程主要针对软件生产和管理进行研究。为了获得满足工程目标的软件,不仅涉及工程开发,而且还涉及工程支持和工程管理。对于一个特定的项目,可以通过剪裁过程定义所需的活动和任务,并可使活动并发执行。与软件有关的机构,根据需要和目标,可采用不同的过程、活动和任务。
[第12页]
知识拓展:B. Boehm的重要观点
B. Boehm指出,遵循前六条基本原理,能够实现软件的工程化生产。按照第七条原理,不仅要积极主动地采纳新的软件技术,而且要注意不断总结经验。
[第13页]
知识拓展:印度软件产业成功关键
近年来,印度的软件产业迅速发展,其成功关键是严格按照国际规范进行科学管理。一般教材主要讨论软件开发技术,较少讨论软件管理技术,但软件管理仍然是软件开发成功的关键因素之一。在实际开发过程中,同时还应兼顾具体开发原则:抽象(abstraction)、信息隐藏(information hiding)、模块化(modularity)、局部化(localization)、一致性(consistency)、完整性(completeness)和可预测性(verifiability)。
[第14页]
知识拓展:软件开发过程各阶段关系
软件开发过程中每一阶段的工作都应以前一阶段的结果为依据,并作为下一阶段的前提。每个阶段结束时都要有技术审查和管理复审,从技术和管理两方面对这个阶段的开发成果进行检查,及时决定工作是否继续,停工或返工,主要检查是否有高质量的文档资料,前一个阶段复审通过了,后一个阶段才能开始。应防止到开发最后,才发现前期工作存在的严重问题,造成难以挽回的损失或失败的结面。
[第14页]
汇编语言清华大学出版社知识拓展:软件三个时期的不同阶段
计划时期分为问题定义、可行性研究、需求分析3个阶段。
开发时期分为概要设计、详细设计、软件实现、软件测试4个阶段。
运行时期则需要不断进行运行维护,需要不断修改错误、排除故障,或以用户需求、运行环境改变进行改更调整。
[第15页]
知识拓展:软件三个时期阶段划分案例
【案例1-5】“网上商品销售管理信息系统”由项目问题定义、软件开发和运行维护三个时期组成,各时期可划分成几个阶段。
(1)软件定义时期。①问题定义阶段是对软件研发主要问题的初步调研与确认(调研论证计划申报)。②可行性研究。对前一阶段提出的问题,寻技术上可行且在经济上有较高效益的解决方案。
(2)软件开发时期主要包括5个阶段:①需求分析。调研搞清具体需求,主要是确定目标系统必须具备哪些具体的功能、性能、可靠性、接口等。②总体设计。设计软件结构,确定程序的模块组成和模块间的关系。③详细设计。针对单个模块的设计,如查询、统计等。④编码。按照选定的语言,把模块的过程性描述翻译为源程序。⑤测试。通过各种类型的测试(及相应的调试)使软件达到预定的要求。
(3)软件运行时期。主要工作是做好软件系统的运行维护与管理。使软件在整个生存周期内正常使用和延长使用寿命。
[第19页]
知识拓展:软件开发其他模型
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论