《[经济学]软件工程_贺志军》由会员分享,可在线阅读,更多相关《[经济学]软件工程_贺志军(71页珍藏版)》请在金锄头文库上搜索。
1、第1讲 软件和软件工程,贺志军 北师大珠海分校信息技术学院励耘楼small 308,软件工程 之,用工程化的方法来开发软件,Copyright Zhijun He,软件和软件工程,2,本讲内容,计算机软件(概念、特点、分类、语言) 软件危机(表现和根源) 软件工程(概念、研究内容、发展历程、实践框架),Copyright Zhijun He,软件和软件工程,3,计算机软件,什么是计算机软件 计算机软件的特点,Copyright Zhijun He,软件和软件工程,4,可执行部分,不可执行部分,什么是计算机软件?,计算机系统中的程序及其文档的集合,文档是为了便于了解程序所需的阐明性资料,文档一般
2、是给人看的,不一定装入计算机,程序,Copyright Zhijun He,软件和软件工程,5,什么是程序(1/2),程序: 由程序设计语言所描述的、能为计算机所识别、理解和处理的语句序列 程序例子 Main( ) int i, j; / 变量定义 char Str10; i = i + j ; / 语句说明 ,Copyright Zhijun He,软件和软件工程,6,什么是程序(2/2),程序设计语言具有良好、严格语法和语义 目前程序设计语言主要有以下几种类型 面向机器: 如汇编语言、机器语言等 面向过程: 如Fortran, Pascal, C等等 面向对象: 如Java等等 面向问题:
3、 如结构化查询语言SQL等等,Evolution of software,早期 第二阶段 第三阶段 第四阶段 面向批处理 多用户 分布式系统 强大的桌面系统 有限的分布 实时 嵌入“智能” 面向对象技术 自定义软件 数据库 低成本硬件 专家系统 软件产品 消费者的影响 人工神经网络 并行计算 网络计算机,1950,1960,1970,1980,1990,2000,Copyright Zhijun He,软件和软件工程,8,软件的发展,1946-1956年 从计算机问世到实用的高级程序语言出现前 存储容量比较小,运算速度比较慢 采用个体工作方式,用低级语言编写程序 应用领域主要是以数值数据处理为
4、主的科学计算,其特点是输入、输出量较小 衡量程序质量的标准主要是功效,即运行时间省、占用内存小 主要研究内容是科学计算程序、服务性程序和程序库,研究对象是顺序程序,Copyright Zhijun He,软件和软件工程,9,1956-1968年 从实用的高级程序语言出现到软件工程出现前 存储器容量大,外围设备得到迅速发展,出现了高级程序设计语言 应用领域包括数据处理(非数值数据),其特点是计算量不大,但输入、输出量却较大 高速主机与低速外围设备的矛盾突出,出现了操作系统、并发程序、数据库及其管理系统 20世纪60年代初提出了软件一词,开始认识到文档的重要性 研究高级程序设计语言、编译程序、操作
5、系统、支持编程的工具及各种应用软件 工作方式逐步从个体方式转向合作方式 出现软件危机,Copyright Zhijun He,软件和软件工程,10,1968年-至今 从软件工程出现到现在 硬件向巨型机和微型机二个方向发展,出现了计算机网络,软件方面提出了软件工程,出现了“计算机辅助软件工程”(CASE) 计算机的应用领域渗透到各个业务领域,出现了嵌入式应用,其特点是受制于它所嵌入的宿主系统 开发方式逐步由个体合作方式转向工程方式 软件工程方面的研究主要包括软件开发模型、软件开发方法及技术、软件工具与环境、软件过程、软件自动化系统等 软件方面研究以智能化、自动化、集成化、并行化、以及自然化为标志
6、的软件开发新技术,Copyright Zhijun He,软件和软件工程,11,程序模型演化,追求更具表达能力、更符合人类思维模式、易构造、易演化的计算模型 软件基本模型= 实体元素连接和交互,Copyright Zhijun He,软件和软件工程,12,程序开发技术演化,尽可能提高软件开发的效率和质量 凝练共性并复用,Copyright Zhijun He,软件和软件工程,13,软件特点,开发而成非制造产生的, 逻辑产品 (智力, 无形)非物理产品 维护困难和复杂(完善, 纠错,.) 不会老化磨损,只会失效,维护引起的副作用,Copyright Zhijun He,软件和软件工程,14,软件
7、失效曲线,Copyright Zhijun He,软件和软件工程,15,软件特点,生产只需复制 软件开发性质如成本、进度等难以估计 软件的开发更加依赖于开发人员的业务素质、智力、人员的合作、组织和管理 软件的开发和运行常受到计算机硬件的限制,对计算机硬件有着不同程度的依赖性 软件的开发至今尚未完全实现自动化 软件成本相当昂贵 相当多的软件工作涉及到社会因素,Copyright Zhijun He,软件和软件工程,16,软件的分类,按工作范围和使用特点分: 系统软件:系统软件是一组为其他程序服务的程序。一些系统软件(如编译器、编辑器和文件管理程序)处理复杂的但也是确定的信息结构。其他的系统应用(
8、如操作系统、驱动程序和通讯进程等)则处理大量的非确定的数据。不管哪种情况,系统软件均具有以下特点:与计算机硬件频繁交互;多用户支持;需要精细调度、资源共享及灵活的进程管理的并发操作;复杂的数据结构;及多外部接口。,Copyright Zhijun He,软件和软件工程,17,软件的分类,商业软件:商业信息处理是最大的软件应用领域。具体的“系统”(如工资表、帐目支付和接收、存货清单等)均可归为管理信息系统(MIS)软件,它们可以访问一个或多个包含商业信息的大型数据库。该领域的应用将已有的数据重新构造,变换成一种能够辅助商业操作和管理决策的形式。除了传统的数据处理应用之外,商业软件应用还包括交互式
9、的和客户机/服务器式的计算(如POS 事务处理)。,Copyright Zhijun He,软件和软件工程,18,软件的分类,实时软件:管理、分析、控制现实世界中发生的事件的程序称为实时软件。实时软件的组成包括:一个数据收集部件,负责从外部环境获取和格式化信息;一个分析部件,负责将信息转换成应用时所需要的形式;一个控制/输出部件,负责响应外部环境;及一个管理部件,负责协调其他各部件,使得系统能够保持一个可接受的实时响应时间(一般从1 毫秒到1 分钟),应该注意到术语“实时”不同于“交互”或“分时”。一个实时系统必须在严格的时间范围内响应。而一个交互系统(或分时系统)的响应时间可以延迟,且不会带
10、来灾难性的后果。,Copyright Zhijun He,软件和软件工程,19,软件的分类,工程和科学计算软件:工程和科学计算软件的特征是“数值分析”算法。此类应用含盖面很广,从天文学到火山学;从汽车压力分析到航天飞机的轨道动力学;从分子生物学到自动化制造。不过,目前工程和科学计算软件已不仅限于传统的数值算法。计算机辅助设计、系统仿真和其他交互应用已经开始具有实时软件和系统软件的特征。,Copyright Zhijun He,软件和软件工程,20,软件的分类,嵌入式软件:智能产品在几乎每一个消费或工业市场上都是必不可少的,嵌入式软件驻留在只读内存中,用于控制这些智能产品。嵌入式软件能够执行很有
11、限但专职的功能(如微波炉的按钮控制),或是提供比较强大的功能及控制能力(如汽车中的数字控制,包括燃料控制、仪表板显示,刹车系统等),Copyright Zhijun He,软件和软件工程,21,软件的分类,个人计算机软件:个人计算机软件市场是在过去十年中萌芽和发展起来的。字处理、电子表格、计算机图形、多媒体、娱乐、数据库管理、个人及商业金融应用、外部网络或数据库访问,这些仅仅是成百上千这类应用中的几种,Copyright Zhijun He,软件和软件工程,22,软件的分类,人工智能软件:人工智能(AI)软件利用非数值算法去解决复杂的问题,这些问题不能通过计算或直接分析得到答案。一个活跃的AI
12、 领域是专家系统,也称为基于知识的系统。AI 软件的其他应用领域还包括模式识别(图象或声音)、定理证明和游戏。最近,AI 软件的一个新分支,称为人工神经网络,得到了很大进展。神经网络仿真人脑的处理结构(生物神经系统的功能),这有可能导致一个全新类型的软件登场,它不仅能够识别复杂的模式,而且还能从过去的经验中自行学习进步。,Copyright Zhijun He,软件和软件工程,23,按软件工作方式划分: 实时处理软件 分时软件 交互式软件 批处理软件 按软件服务对象的范围划分: 项目软件 产品软件,Copyright Zhijun He,软件和软件工程,24,按使用的频度进行划分: 一次使用
13、频繁使用 按软件失效的影响进行划分: 高可靠性软件 一般可靠性软件,Copyright Zhijun He,软件和软件工程,25,软件语言 software language,软件语言是用于书写计算机软件的语言。 它主要包括: 需求定义语言 功能性语言 设计性语言 实现性语言(即程序设计语言) 文档语言,Copyright Zhijun He,软件和软件工程,26,需求定义语言 requirements definition language,需求定义语言用来书写软件需求定义。 软件需求定义是软件功能需求和非功能需求的定义性描述。软件功能需求刻画软件“做什么”,软件非功能需求刻画诸如功能性限制
14、、设计限制、环境描述、数据与通信规程及项目管理等 典型的需求定义语言有PSL语言(Problem Statement Language问题陈述语言),Copyright Zhijun He,软件和软件工程,27,功能性语言 functional language,功能性语言用来书写软件功能规约(functional specification) 软件功能规约是软件功能的严格而完整的陈述。通常它只刻画软件系统“做什么”的外部功能,而不涉及系统“如何做”的内部算法。 典型的功能性语言有广谱语言、Z语言。,Copyright Zhijun He,软件和软件工程,28,设计性语言 design lan
15、guage,设计性语言用来书写软件设计规约(design specification) 软件设计规约是软件设计的严格而完整的陈述。一方面,它是软件功能规约的算法性细化,刻画软件“如何做”的内部算法,另一方面,它是软件实现的依据。 典型的设计性语言有PDL语言(Program Design Language),Copyright Zhijun He,软件和软件工程,29,实现性语言,实现性语言用来书写计算机程序 实现性语言也称编程语言或程序设计语言(programming language) 程序设计语言可按语言的级别、对使用者的要求、应用范围、使用方式、成分性质等多种角度进行分类,Copyri
16、ght Zhijun He,软件和软件工程,30,按语言级别分:低级语言和高级语言 低级语言是与特定计算机体系结构密切相关的程序设计语言,如机器语言、汇编语言。其特点是与机器有关,功效高,但使用复杂,开发费时,难维护。 高级语言是不反映特定计算机体系结构的程序设计语言,它的表示方法比低级语言更接近于待解问题的表示方法。其特点是在一定程度上与具体机器无关,易学、易用、易维护。但高级语言程序经编译后产生的目标程序的功效往往较低。,Copyright Zhijun He,软件和软件工程,31,按用户要求分:过程式语言和非过程式语言 过程式语言(procedural language)是通过指明一列可执行的运算及运算次序来描述计算过程的程序设计语言。如FORTRAN、COBOL、C等。 非过