510 likes | 628 Views
第 1 单元 软件概述 主讲:刘志强. 开场白. 计算机软件基础 Fundamentals of Computer software. 西安交通大学 计算机教学实验中心. 《软件基础》 教学大纲. 一、课程的目的和任务 二、课程基本要求 三、课程基本内容 四、实验内容 五、时间分配 六、考试方法. 一、课程的目的和任务.
E N D
第1单元 软件概述 主讲:刘志强 开场白 计算机软件基础 Fundamentals of Computer software 西安交通大学 计算机教学实验中心
《软件基础》教学大纲 一、课程的目的和任务 二、课程基本要求 三、课程基本内容 四、实验内容 五、时间分配 六、考试方法
一、课程的目的和任务 《软件基础》是非电类专业的一门技术基础课,涉及“计算机操作系统”、“数据结构”、“数据库系统原理”和“软件工程”四门课程的经典内容,通过该课程的学习,使学生掌握开发应用软件所必需的软件基础知识,为今后结合本专业开发应用软件打下必要的基础。
二、课程基本要求 了解计算机软件的基本概念,理解有关的常用技术术语。 了解程序设计中常用的数据结构及相应算法,初步掌握对不同类型的问题求解选择适当的数据结构。 了解应用软件开发的最基本的环境;掌握操作系统的基本概念和基本功能,了解计算机系统硬、软件资源如何控制管理。 了解如何以近代软件工程的观点开发应用软件的基本概念和方法。 了解数据库的基本概念,初步掌握数据库系统的开发方法。
三、课程基本内容 1、数据结构 2、操作系统原理 3、数据库系统原理 4、软件工程
1、 数据结构 数据结构是计算机的专业技术基础课。它研究的主要问题有: 分析数据(计算机加工的对象)的特征 选择适当逻辑存储结构和物理存储结构 在存储结构的基础上实现对数据的操作
2、 操作系统原理 是研究计算机工作原理的一门学科: 研究的主要问题: • 提高系统资源的利用率 • 更有效地组织、协调、管理计算机内部的工作流程 • 为用户提供更友好、便捷的操作界面
3、数据库系统原理 是一门综合性软件技术课。它研究的主要问题是: • 描述数据记录(用数据描述语言) • 实现对数据记录的管理操作 • 实现对数据库的应用管理
4、软件工程 是一门交叉学科;它包括计算机科学、数学、工程学和管理等学科。 主要研究: • 克服、解决“软件危机” • 改进“软件生产”的方法、工具 • 提高软件的生产率
四、实验内容 本课程实验内容提要: 1、操作系统及应用;Windows’(2000) 的操作。 2、数据结构程序设计;用程序设计语言实现“二叉树链表”的操作。 3、数据库系统及应用;用ACCESS 实现 “学生成绩”数据库的操作。
五、时间分配 1、课时分配: 44学时 课程名称 分配学时 操作系统 8 16 数据结构 数据库系统 软件工程 10 10 2、机时分配: 20学时 实验名称 分配机时 操作系统及应用 4 数据结构程序设计 8 数据库及应用 8
六、说明 1、考核方法 期末笔试+大作业+平时实验的综合成绩 2、教材 《计算机软件技术基础》 人民邮电出版社 3、参考书 《面向对象的理论与C++实践》 清华大学出版社 《软件工程导论》 清华大学出版社 《ACCESS2000实用教程 》 清华大学出版社 《数据结构—OO方法与C++描述》清华大学出版社 《大学计算机基础》 高等教育出版社
《软件基础》概述 什么是“软件”? 软件的特征 软件的分类 软件的发展 软件危机
软件(Software) 随着信息化、网络化和数字化时代的到来,社会对“软件”的需求激增。如今,世界发达国家都把软件列为国家发展的关键技术领域。 美国国家关键技术委员会将软件列为六大关键技术之一; 欧洲共同体将“软件和信息处理”列为关键技术; 我国把信息产业放在优先发展的地位,看作是中国发展高新技术、赶超世界先进水平的一次千载难逢的机遇。
软件的基本概念 什么是软件? 计算机系统由计算机硬件和软件构成。 计算机神奇的功能是在软件的“指挥”下创造出来的。 软件是各种程序和有关资料的总称。 程序是: • 为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合 • 是人们求解问题的逻辑思维活动的代码化描述 程序的最重要的目的是: 便于阅读、交流
软件的特征 软件是逻辑产品 软件产品质量的体现方式不同 软件产品的失败曲线不同 软件产品的成本构成不同 软件产品不存在同类零件替换 软件产品的静态和动态属性
软件是逻辑产品 软件产品是: • 具有产值、价格、质量和功能的特性 • 看不见,是逻辑的、无形的 • 是脑力劳动的结晶
软件产品质量体现方式不同 质量体现方式不同: • 实用、可靠、可操作性; • 可维护性强 • 方便用户 • 不会折旧、损坏、老化
软、硬件比例示意图(成本构成) 12% 需求率 生产率 4% 开发人员 开发中:硬件成本小,人力成本大 生产中:生产成本小,维护成本大 计算机系统中:软件成本逐渐增大。
软件产品不存在同类零件替换 当硬件产品中某个部件损坏后,可以用相同的备用部件更换,使硬件系统恢复正常工作。 而软件产品却没有相同的备用部件可言,因为软件出现的每一个故障,要么是由于设计考虑不周造成的,要么是编程错误造成的。 由于软件无备用部件可供更换,因而软件维护比硬件维护要复杂得多,成本也高得多。
软件产品的静态和动态属性 软件是由程序和相关文档资料组成的。 程序是具有双重属性的: 它是求解客观问题的逻辑描述,是供阅读和交流的,它的表示是静态的; 程序最终是通过运行去执行特定的操作和数据处理,它又具有极其复杂和丰富内涵的动态属性。 程序的双重决定判别程序是否正确也要有双重标准: • 静态的程序正确与否是检查它的语法和句法是否符合规则要求; • 动态的程序正确与否则要动态的测试程序的所有逻辑流结构和数据结构是否正确。
软件分类 软件按不同方式可以划分为不同的类型: • 按功能划分 • 按规模划分
按功能划分软件分类 操作系统 网络系统 语言编译器 工具软件 系统软件 软件 管理软件 实时软件 科学计算、数据处理 嵌入式软件 人工智能软件 专用领域软件 应用软件
系统软件 是支持计算机系统正常运行并实现用户操作的那部分软件。 一般是在计算机系统购买时随机携带的,也可以根据需要另行安装。 系统软件的主要特征是: • 与硬件有很强的交互性 • 能对资源共享进行调度管理 • 能解决并发操作处理中存在的协调问题 • 其中的数据结构复杂,外部接口多样化,便于用户反复使用
应用软件 应用软件是为满足用户不同领域、不同问题的应用需求而提供的那部分软件。 它可以拓宽计算机系统的应用领域,放大硬件的功能。 应用软件具有无限丰富和美好的开发前景。
按规模划分软件分类 分类 程序规模 模块数 开发时间 开发人数 极小 500行以下 10~20 1~4周 1人 小 1K~2K行 25~50 1~6月 1人 中 5K~50K行 250~1000 1~2年 2~5人 大 50K~100K行 1000以上 2~3年 5~20人 甚大 1M行 4~5年 100~1000人 极大 1M~10M行 5~10年 2000~5000
软件的发展 软件伴随计算机技术的发展经历了三个阶段: 程序设计阶段 软件设计阶段 软件工程阶段
程序设计阶段 程序设计阶段(1946年~1955年) 特点: • 尚无软件的概念,程序设计主要围绕硬件进行开发 • 规模很小、工具简单 • 无明确分工(开发者和用户) • 程序设计追求节省空间和编程技巧,无文档资料 • 主要是用于科学计算
软件设计阶段 软件设计阶段(1956年~1970年) 特点: • 硬件环境相对稳定,出现“软件作坊”的开发组织 • 开始使用产品软件(可购买),从而建立了软件的概念 • 系统规模越来越庞大,高级编程语言层出不穷,应用领域不断拓宽 • 开发者和用户有了明确分工,社会对软件的需求量剧增 • 但是软件开发技术没有重大突破,生产效率低下,从而导致“软件危机”产生。
软件工程阶段 软件工程阶段(1970年~至今) 由于软件危机的产生,迫使人们不得不研究、改变软件开发的技术手段和管理方法。从此软件生产进入软件工程时代。 特点: • 硬件已向“四化”(巨型、微型、网络、智能)发展,数据库技术已成熟并广泛应用,第三、四代语言出现。 • 第一代软件技术——结构化程序设计在数值计算领域取得优异成绩; • 第二代软件技术——软件测试技术、方法、原理用于软件生产过程; • 第三代软件技术——处理需求定义技术,用于软件需求分析和描述。
软件危机 硬件生产率大幅提高 软件规模越来越大 软件生产率很低 硬、软件供需失衡 矛盾引发“软件危机”
硬件生产率大幅提高 如今,计算机的发展已进入一个新的历史阶段; 硬件产品已系列化、标准化,“即插即用”。 硬件产品的生产可以采用最高精尖的现代化工具和手段、自动成批生产。生产效率几百万倍的提高。 生产能力过剩。
软件生产随规模增大、复杂度增大 以美国宇航局的软件系统为例: 1963年 水星计划系统 200万条指令 1967年 双子星座计划系统 400万条指令 1973年 阿波罗计划系统 1000万条指令 1979年 哥伦比亚航天飞机系统4000万条指令 假设1个人一年生产一万条有效指令,那么是否4000人生产一年,或400人生产10年就能完成任务呢?答案是否定的。一万条指令的复杂度决不仅仅是100条指令复杂度的100倍。
软件生产率很低 伴随计算机的普及,整个社会对计算机应用的需求越来越大。 但软件的生产却还沿用“手工作坊”的生产方式,人工编程生产。生产效率仅提高了几倍。 生产能力极其低下。
硬、软件供需失衡 社会大量需求,生产成本高,生产过程控制复杂,生产效率低等等因素构成软件生产的恶性循环。 由此产生“软件危机”。
矛盾引发“软件危机” 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 为了研究、解决软件危机,诞生了一门新兴学科——软件工程学。它把软件作为工程对象,从技术措施和组织管理两个方面来研究、解决软件危机。
软件危机的具体体现 (1)软件开发进度难以预测 (2)软件开发成本难以控制 (3)用户对软件功能难以满足 (4)软件产品质量无法保证 (5)软件产品难以维护 (6)软件通常缺少适当的文档资料
(1)软件开发进度难以预测 拖延工期几个月甚至几年的现象并不罕见,这种现象降低了软件开发组织的信誉。 以丹佛新国际机场为例 • 该机场规模是曼哈顿机场的两倍,宽为希思机场的10倍,可以全天侯同时起降三架喷气式客机; • 投资1.93亿美元建立了一个地下行李传送系统,总长21英里,有4,000台遥控车,可按不同线路在20家不同的航空公司柜台、登机门和行李领取处之间发送和传递行李; • 支持该系统的是5,000个电子眼、400台无线电接受机、56台条形码扫描仪和100台计算机 • 按原定计划要在1993年万圣节前启用,但一直到1994年6月,机场的计划者还无法预测行李系统何时能达到可使机场开放的稳定程度。
(2)软件开发成本难以控制 投资一再追加,令人难于置信。往往是实际成本比预算成本高出一个数量级。 而为了赶进度和节约成本所采取的一些权宜之计又往往损害了软件产品的质量,从而不可避免地会引起用户的不满。
(3)用户对产品功能难以满足 开发人员和用户之间很难沟通、矛盾很难统一。往往是软件开发人员不能真正了解用户的需求,而用户又不了解计算机求解问题的模式和能力,双方无法用共同熟悉的语言进行交流和描述。 在双方互不充分了解的情况下,就仓促上阵设计系统、匆忙着手编写程序,这种“闭门造车”的开发方式必然导致最终的产品不符合用户的实际需要。
(4)软件产品质量无法保证 系统中的错误难以消除。软件是逻辑产品,质量问题很难以统一的标准度量,因而造成质量控制困难。 软件产品并不是没有错误,而是盲目检测很难发现错误,而隐藏下来的错误往往是造成重大事故的隐患。
(5)软件产品难以维护 软件产品本质上是开发人员的代码化的逻辑思维活动,他人难以替代。除非是开发者本人,否则很难及时检测、排除系统故障。 为使系统适应新的硬件环境,或根据用户的需要在原系统中增加一些新的功能,又有可能增加系统中的错误。
(6)软件缺少适当的文档资料 文档资料是软件必不可少的重要组成部分。 实际上,软件的文档资料是开发组织和用户的之间权利和义务的合同书,是系统管理者、总体设计者向开发人员下达的任务书,是系统维护人员的技术指导手册,是用户的操作说明书。 缺乏必要的文档资料或者文档资料不合格,将给软件开发和维护带来许多严重的困难和问题。
最典型失败系统的例子 IBM公司开发OS/360系统,共有4000多个模块,约100万条指令,投入5000人年,耗资数亿美元,结果还是延期交付。在交付使用后的系统中仍发现大量(2000个以上)的错误。
软件危机产生的原因 产生软件危机有两个方面的原因: • 与软件本身的特点有关;是内在因素、客观的存在,只能因势利导加以解决。 • 与软件开发和维护的技术方法有关;是外在因素,可以完善、提高。
软件特点的因素(内因) 软件是逻辑产品,是代码化了的人的思维活动。在总体构思时,别人无法管理和干预。在写出程序、并在机器上运行之前,进展情况难以掌握,开发质量也无法评估。这些都给管理和控制带来不便。 软件是特定问题在计算机上的运行描述。实际问题的复杂性决定了一个实用软件系统规模往往十分庞大。大有大的难处。程序规模越大,控制、管理难度也就越大。
软件开发维护技术方法的因素 开发人员和用户之间的矛盾。许多软件系统开发失败的主要原因是开发人员在没有准确、完整地了解了用户的需求后就急于编程;用户对需求也往往不能准确、完整地提出。 软件开发各阶段任务不明确,方法不科学。软件产品有其生命周期。在周期的各个阶段有其具体的任务,如何完成任务,各个阶段有不同的技术方法和操作步骤。只有科学的按生命周期各阶段的任务去组织实施,才能保证质量,降低成本;急于求成,不按科学规律、方法实施,只能“事倍功半”,事与愿违。 重编程,轻分析;重开发,轻维护;重程序,轻文档。软件产品的使用寿命很长。在这期间要对软件进行必要的修改。据统计数据表明,软件维护的费用占总费用的55%~70%。软件工程的一个重要目标就是提高软件的可维护性,减少软件维护的代价。
解决软件危机的途径 (1)采用现代化、社会化的组织管理方式; (2)使用成功的技术和方法(面向过程、面向对象、自顶向下等); (3)使用更好的软件开发工具(汇编、C、VC、各种数据库管理系统等); 为了解决软件危机就要从技术措施和组织管理两个方面去研究,不断总结经验教训,提高软件生产效率,降低软件开发和维护的成本。 开发软件选用最好的开发工具是至关重要的,即选择、设置良好的软件工程支撑环境。工具选用的好,它可以“放大”人的智力,大大加快软件开发速度,提高软件质量。
单元小结 • 软件的特征 • 软件的发展 • 软件危机及表现