第 1章 概论
1,1 程序设计语言
1,2 程序的基本概念
1,3 软件的基本概念
1,4 应用系统软件的开发
1,1 程序设计语言一,程序设计语言的历史德国工程师 楚泽 (Konrad Zuse),唯一想到利用程序设计语言来解决问题的人程序语言列表,汇编语言,ASP,BASIC,C,C++、
C#,COBOL,Delphi,Fortran,FoxBase,FoxPro、
HTML,Java,JavaScript,LISP,PASCAL,Perl、
PHP,Prolog,SQL,Visual Basic,Visual C,
Visual Foxpro,VBScript
二,程序设计语言的分类程序设计语言可以从不同的角度进行分类。
从 发展过程 分机器语言、汇编语言、高级语言、第四代语言、
第五代语言从 应用范围 分通用语言、专用语言从 程序设计方法 分结构化语言、模块化语言、面向对象语言。
把高级语言程序翻译成机器语言程序有两种做法:
编译 和 解释相应的翻译工具也分别叫做 编译器 和 解释器 。
1,1,2 高级程序设计语言概述机器码 → 汇编语言 → 高级语言编译,解释
1.编译器工作原理编译器逐行扫描高级语言程序源程序,编译过程如下:
①词法分析 (Lexical Analysis)。
②语法分析 (Syntax Analysis)。
③语义分析 (Semantic Analysis)。
④中间代码生成。
⑤优化。
⑥代码生成。
高级语言源程序经编译后得到目标码程序,还不能立即装入机器执行,因为程序中如果用到标准函数
(它们生成的目标码已存放在模块库中),还需对编译后得到的目标模块进行连接。
常见的程序设计语言,如 C/C++,Pascal、
Fortran等都是编译型语言。
源程序,c 目标程序,obj 可执行文件,exe 结果编译 连接 执行
2,高级语言程序的解释执行源代码逐句读入,分析检查后把每一语句压入执行堆栈,并立即解释执行 。
采用解释执行的语言:操作系统的命令,Visual
Basic,Java,JavaScript都是解释执行的 (其中有些语言也可以编译执行 )。
解释执行的优缺点:解释器不大,工作空间也不大,
不过,解释执行难于优化,效率较低,这是这类语言的致命缺点 。
3,高级程序设计语言的基本特征
1) 变量,表达式和赋值
2) 程序的控制结构
3) 数据类型
4) 指针类型
5) 过程
6) 输入 /输出
1,1,3程序设计语言的评价标准
(1)用户界面好,操作简便 ;
(2)对硬件,软件环境要求低 ;
(3)对硬件资源利用的程度高 ;
(4)代码质量高,目标程序运行速度快,可靠性高,结构化性能高,可读性好 ;
(5)应用范围广泛 ;
(6)调用其它软件容易 ;
(7)自身发展快 。
1,1,4程序设计语言的选择标准
1) 应用范围在科学计算领域,FORTRAN常常是首选语言 。
在事务处理方面,Visual Basic语言是较理想的选择在实时处理方面,选择汇编语言及 C语言较合适 。
在开发系统软件方面,可选择 Visual C++,Visual J++,Borland
C++,Visual Basic,JBuilder,Delphi及 C++ Builder等语言 。
如果开发的软件中含有大量的数据操作,则可采用 SQL,Visual
Foxpro等数据库语言 。
在网络开发中,Web服务器软件可以选择 Microsoft公司的 IIS、
Apache组织开发的 Apache服务器等 。
2)算法及计算复杂性
3)数据结构
4)效率
1,2 程序的基本概念
1,程序是程序设计语言的抽象符号的集合
2,程序是对数据施行算法的过程
3,程序具有层次性
1,3 软件的基本概念软件的定义,计算机程序,方法,规则,程序有关的各种文档以及在计算机上运行所必需的数据的总称 。
软件不仅是程序,还包括其功能和性能的说明性信息 。
软件不仅有功能和性能要求,还有质量,成本,交货期,使用寿命要求 。
软件危机的表现
开发成本难以控制,进度不可预计;
软件系统的质量和可靠性很差,难以满意;
软件文档相当缺乏,软件系统不可维护;
软件开发生产率很低,软件产品供不应求。
软件产品成本十分昂贵。
软件危机产生的原因
软件本身的特点,
-- 软件是一种逻辑实体,而不是具体的物理实体,具有高度的抽象性;
-- 软件是一个逻辑上复杂而规模上庞大的系统,涉及技术、管理等多方面的问题;
-- 软件的生产方式与硬件明显不同:产品的质量控制在设计和制造阶段的不同;产品的生产方式不同;设计和制造阶段的资金和人力投入,技术复杂度不同;
-- 软件的运行和维护阶段,没有传统意义上的机械磨损、老化问题。
-- 软件与硬件有关,对软件有可移植性的要求。
-- 软件工作涉及许多社会因素。
对软件开发与维护存在许多错误认识和做法,忽视软件需求分析的重要性;对软件与程序的概念不清;轻视软件维护。
软件开发与维护的方法不正确,对系统需求没有清楚和准确的认识就进入开发阶段,
忽视对软件开发过程的管理; ……
1 软件危机 磨合调整 磨损用坏
t
失效率硬、软件产品失效率曲线软件危机的表现
开发成本难以控制,进度不可预计;
软件系统的质量和可靠性很差,难以满意;
软件文档相当缺乏,软件系统不可维护;
软件开发生产率很低,软件产品供不应求。
软件产品成本十分昂贵。
软件危机产生的原因
软件本身的特点,
-- 软件是一种逻辑实体,而不是具体的物理实体,具有高度的抽象性;
-- 软件是一个逻辑上复杂而规模上庞大的系统,涉及技术、管理等多方面的问题;
-- 软件的生产方式与硬件明显不同:产品的质量控制在设计和制造阶段的不同;产品的生产方式不同;设计和制造阶段的资金和人力投入,技术复杂度不同;
-- 软件的运行和维护阶段,没有传统意义上的机械磨损、老化问题。
-- 软件与硬件有关,对软件有可移植性的要求。
-- 软件工作涉及许多社会因素。
对软件开发与维护存在许多错误认识和做法,忽视软件需求分析的重要性;对软件与程序的概念不清;轻视软件维护。
软件开发与维护的方法不正确,对系统需求没有清楚和准确的认识就进入开发阶段,
忽视对软件开发过程的管理; ……
1,软件危机 磨合调整 磨损用坏
t
失效率硬、软件产品失效率曲线软件的定义( Boehm):软件是程序以及开发、使用和维护程序需要的所有文档。
早 中 晚引入同一变动付出的代价随时间变化的趋势改正一个问题的估计费用

美元

改正一个问题的估计工作量

人·


20
200
1000
2000
0.05
0.5
2.5
5.0
RA SD DD CD IT ST RT
Bell 实验室统计结果 (US)
软件产品需要分阶段的定义、设计和开发,严格的产品质量控制,完整的文档记录 。
50 60 70 80 90
硬件软件解决软件危机的途径
将软件开发看成是一种组织严密、管理严格、各类人员协同配合共同完成的工程项目。
研究和推广成功的软件开发技术和方法。
开发和使用好的软件工具。
基本概念,
软件生命周期:软件所经历的定义、开发、使用和维护直到废弃所经历的时期。
程序设计环境:源程序编辑,编译或解释,链接,调试和运行工具的集合。
软件工程环境:软件定义,设计和实现,测试和维护等各个阶段所使用的软件工具的集合。
2,软件工程
1,软件工程的基本原理
用分阶段的生命周期计划严格管理
6类计划 – 项目概要计划,里程碑计划,项目控制计划,产品控制计划,
验证计划,运行维护计划。
坚持进行阶段评审
1)经验数据说明,大部分错误是在编码之前造成的,在整个软件设计错误中,
设计错误占 63%,而编码错误占 37%。
2)错误发现和改正得越晚,所需付出的代价就越高。
实行严格的产品控制主要实行基准配置管理。
软件配置成分,软件开发各个阶段产生的文档和代码。
基准配置,经过评审后的软件配置成分。
采用现代程序设计技术提高开发和维护的效率,如结构化分析 SA和结构化设计 SD技术。
结果应能清楚地审查
开发小组的人员应少而精
1)软件开发的进度并非与参与开发人员的数量成正比,有时恰恰相反。
2)软件产品的质量绝对与开发人员的素质相关。
承认不断改进软件工程实践的必要性
2,软件工程的传统途径 —生命周期方法学
生命周期方法学的基本内容从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的漫长周期依次划分为若干个阶段,每个阶段有相对独立的任务,然后逐步完成每个阶段的任务。
生命周期方法学的应用方法从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发;前一个阶段任务的完成是后一个阶段工作的前提和基础,而后一个阶段任务通常是使前一阶段提出的解法更进一步的具体化,加进了更多的实现细节。
阶段过渡方法每一个阶段的开始和结束都有严格标准,前一阶段结束的标准是后一阶段工作开始的标准。 技术审查和管理复审。
基本概念文档及其作用。
3,生命周期各阶段的基本任务问题定义 → 可行性研究 → 需求分析 → 总体设计(概要设计) → 详细设计 →
编码和单元测试 → 综合测试 → 软件维护。
4,瀑布模型问题定义 特点,1) 阶段间具有顺序性和依赖性
2) 推迟实现的观点
3) 质量保证的观点。可行性研究需求分析总体设计详细设计编码与单元测试综合测试软件维护软件定义时期软件开发时期软件维护时期问题定义可行性研究需求分析总体设计详细设计编码与单元测试综合测试软件维护要解决的问题是什么? 问题性质、工程目 标和规模的报告 分析员:实际用户 +负责人是否有解决办法? 分析员高层逻辑模型,准确和具体的工程规模和目标,
成本 /效益分析等可行性报告为了解决的问题,目标系统必须做什么?
准确确定系统的功能系统的逻辑模型
(数据流图 +数据字典 +简要算法)
如何解决这些问题模块划分软件结构如何具体地实现系统:每个模块的流程图
(程序的详细规格说明) 通过各种类型的测试,
使软件达到预定的要求写出正确的容易理解和容易维护的程序模块通过各种必要的维护活动使系统持久地满足用户的需要
3,技术审查和管理复审
1,必要性
管理复审和技术复审
错误传播模型原始要求正确的规格说明 错误的规格说明正确的设计 错误的设计 对错误说明的设计正确编码 错误编码 对错误设计的编码 对错误说明的编码正确功能 可改正的错误 不可改正的错误 潜伏的错误需求分析设计编码测试错误的扇形传播模型
4,软件质量的评价标准
1) 可理解性 (Understandablity)
2) 可靠性 (Reliablity)
3) 效率 (Efficiency)
4) 可维护性 (Maintainablity)
5) 完整性 (Completencess)
6) 简明性 (concisess)
7) 可移植性 (Portability)
8) 可测试性 (Testablity)
9) 结构性 (Structuredness)
10) 友好性 (Friendliness)
5,软件的特征软件主要包括程序和相关文档 。
1) 软件是一种逻辑产品
2) 软件产品的质量需通过实践来验证
3) 软件产品的成本构成具有上升的趋势
4) 软件产品的故障率随着软件维护而下降
6,软件的分类软件系统软件应用软件操作系统网络系统编译系统工具软件信息管理实时控制科学计算人工智能专用领域嵌入式软件多媒体技术
1) 按软件的功能划分按功能划分,软件通常可以分为系统软件和应用软件两大类 。 如下图所示 。
系统规模 人年 源程序代码微型系统 1人研制 1~4周 500行小型系统 1人研制 1~6个月 1000~2000行中型系统 2~5人研制 1~2年 5000~10000行较大型系统 5~20人研制 2~3年 50000~100000行大型系统 100~1000人研制 4~5年 1 百万行;
极大型系统 2000~5000人研制 5~10年 1 百万 ~10百万行
2,按软件规模划分软件系统可以划分为 6种不同的规模
1,4 应用系统软件的开发软件产品从定义,开发,使用和维护,直到最终被废弃所经历的周期,称为 软件生存周期 。
在生存周期的各个阶段有其具体的任务 。 为完成各个阶段的任务,又有各自不同的技术方法和操作步骤 。
只有科学地按生存周期各个阶段的任务,技术方法和操作步骤去实施,才能保证软件产品的质量 。 而急于求成,不按科学方法实施,不愿学习和采用新的开发技术和开发工具,则势必 "事倍功半 ",甚至断送它 。
初学者在软件开发中 存在的问题:
没有准确,完整地了解用户的实际需求,就急于编程 。
重编程,轻需求分析;
重开发,轻维护;
重程序,轻文档 。
这样做的后果就是在软件系统中,埋藏,了许多故障隐患,直接危害着系统的可靠性和稳定性 。
而在软件开发过程中,问题发现得越早,解决它所花费的代价就越小;而问题发现得越晚,解决它所花费的代价就越高 。
在进行软件设计时应当注意以下几点:
( 1) 注重分析解决问题 。
( 2) 掌握应用系统设计方法 。
( 3) 广泛了解当前的最新计算机应用技术 。
( 4) 学会建立抽象模型 。
( 5) 力求系统结构清晰 。
( 6) 注意形式化,一致性和规范化 。
( 7) 重视书写程序文档 。
1.汇编语言属于面向 ________语言,高级语言属于面向
________语言。
2.用高级语言编写的程序称为 _______程序,它可以通过
________程序翻译一句执行一句的方式执行,也可以通过
________程序一次翻译产生 ________程序,然后执行。
3.软件由 和 组成;把高级语言程序翻译成机器语言程序有两种做法,它们是 和 。
4.二进制语言是属于( )
①面向机器语言 ②面向问题语言 ③面向过程语言 ④面向汇编语言
5.下列语言中不属于面向过程的语言是( )
①高级语言 ②低级语言
③ C语言 ④ PASCAL语言练习题