Download presentation
Presentation is loading. Please wait.
1
软件工程 周志钊
2
代码设计 代码:是代表事物名称、属性、状态等的符号,为了便于计算机处理,一般用数字、字母或它们的组合来表示。 代码的功能:
为事物提供了个概要而不含糊的认定,便于数据存储和检索。 使用代码可以提高处理的效率和精度。 代码提高了数据的全局一致性。 代码是人和计算机的共同语言,是二者交换信息的工具。
3
代码设计实例
4
代码设计实例
5
代码设计实例
6
代码设计 代码的设计原则 (1) 具备唯一确定性。每一个代码都仅代表唯一的实体或属性。
(2) 标准化与通用性。凡国家和主管部门对某些信息分类和代码有统一规定和要求的,则应采用标准形式的代码,以使其通用化。 (3) 可扩充且易修改。要考虑今后的发展,为增加新代码留有余地。当某个代码在条件或代表的实体改变时,容易进行变更。
7
代码设计 (4) 短小精悍即选择最小值代码。代码的长度会影响所占据的内存空间、处理速度以及输入时的出错概率,因此要尽量短小。
(5) 具有规律性、便于编码和识别。代码应具有逻辑性强,直观性好的特点,便于用户识别和记忆。
8
代码设计 代码的结构 (一) 顺序码:一种以连续数字代表编码对象的代码。如1代表厂长,2代表科长,3代表科员,4 代表工人等。
(二) 层次码:又名区间码, 数据分成若干组,每一区间代表一个组,码中数字的值和位置都代表一定意义。如邮政编码、居民身份证编码。
9
代码设计
10
代码设计 区间码又可分为: 多面码 :一个数据项可能具有多方面的特性。如果在码的结构中,为这些特性各规定一个位置,就形成多面码。
例如:代码3212表示材料为钢的Φ1.0mm圆头的镀铬螺钉。
11
代码设计 代码词典,便于对数据进行识别、分类和排序。
12
代码设计 上下关联区间码:由几个意义上相关的区间码组成,其结构一般由左向右排列。
十进制码:相当于图书馆中的十进制分类码。用组合的数字代表特定的学科分类。如:140—物理学,140.15—理论物理学, —物理数学。
13
代码设计 (三) 助记码:将编码对象的名称、规格等作为代码的一部分,以帮助记忆 。助记码适用于数据项数目较少的情况,否则容易引起联想出错
如:TVB 寸黑白电视机 TVC 寸彩色电视机
14
代码设计 代码校验: 一种是事先在计算机中建立一个“代码字典”,然后将输入的代码与字典中的内容进行比较,若不一致说明输入的代码有错。
另外一种做法,是设校验位。 校验位通过事先规定的数学方法计算出来。校验位一般可以发现以下错误:抄写错误、易位错误、双易错误、随机错误等。
15
代码设计 常用的确定校验位值的方法: 算术级数法、几何级数法、质数法。 用几何级数法设计代码检验位的方案如下:原代码
共4位,从左到右取权16,8,4,2;对乘积和以11为模取 余作为校验码,试问原代码为6137的校验位是多少?
16
代码设计 原代码 权 乘积之和 = 50 以11为模去除乘积之和,把得出的余数作为校验码: 50/11 = 4…6
17
代码设计 常用的代码形式: 1、数字码即以纯数字符号形式编码。 如身份证上江苏省常州市天宁区的代码:320402
优点:易校对、易处理 缺点:不便记忆 2、字符码即以纯字符形式编码。 如铁路客车车次代码:T(特快)、K(空调)等 优点:辅助记忆 缺点:校对不易,不易反映分类结构 3、混合码即以数字和字符混合形式编码。 如国际标准、国标代码ISO9001、GB19002等 优点:易于识别和表现其系列性 缺点:不易校对
18
软件编码与实现 在下列细节设计的基础上,用一种程序设计语言来将设计转换为程序,得到的结果是源程序代码。 程序设计语言的特性及选择
程序设计风格 程序设计效率 冗余编程 软件容错技术
19
程序设计语言分类 从描述客观系统的角度来分: (1)面向过程语言 数据结构+算法 (2)面向对象语言 对象+消息
例:Delphi、Visual Basic、JAVA、C++。
20
程序设计语言特性 1. 工程特性 1)可移植性 2)开发工具的可利用性 3)软件的可重用性 4)可维护性 技术特性 心理特性
21
程序设计语言的选择 一般情况下,我们采用高级语言来编程。 选择具体高级语言类型的原则: (1)系统的应用领域 (2)用户的要求
(3)软件的执行环境 (4)目标系统的性能要求 (5)程序员的知识水平 (6)软件的可移植性要求
22
程序设计语言的选择 1. 项目的应用领域 1)科学工程计算 (1)FORTRAN语言: (2)Pascal语言: (3)C语言:
1. 项目的应用领域 1)科学工程计算 (1)FORTRAN语言: (2)Pascal语言: (3)C语言: (4)PL/1语言: (5)C++语言:
23
程序设计语言的选择 2)数据处理与数据库应用 (1)COBOL语言: (2)SQL语言: (3)4GL语言: 4GL的主要特征是:
① 友好的用户界面: ② 兼有过程性和非过程性双重特性: ③ 高效的程序代码: ④ 完备的数据库: ⑤ 应用程序生成器: Labview Matlab
24
程序设计语言的选择
25
程序设计语言的选择
26
程序设计语言的选择
27
程序设计语言的选择 3)实时处理 (1)汇编语言: (2)Ada语言: 4)系统软件 汇编语言、C语言、Pascal语言和Ada语言。
5)人工智能 (1)LISP: (2)PROLOG:
28
程序设计语言的选择 2. 软件开发的方法 编程语言的选择依赖于开发的方法,采用4GL语言适合用快速原型模型来开发。面向对象的语言:
2. 软件开发的方法 编程语言的选择依赖于开发的方法,采用4GL语言适合用快速原型模型来开发。面向对象的语言: (1)C++: (2)Java: 3. 软件开发的环境 4. 算法和数据结构的复杂性 5. 软件开发人员的知识
29
程序设计风格 良好的编码风格有以下几个方面: 程序内部的文档化 数据说明 语句构造 输入/输出 效率
30
程序设计风格 1. 源程序文档化 编写源程序文档化的原则为: 1)标识符应尽量具有实际意义 2) 程序应加注释 主要内容有:
1. 源程序文档化 编写源程序文档化的原则为: 1)标识符应尽量具有实际意义 2) 程序应加注释 主要内容有: (1)说明每个模块的用途、功能。 (2)说明模块的接口形式、参数描述及从属模块的清单。
31
程序设计风格 (3)该模块的数据描述:特殊的数组或变量的说明、约束或其他信息。
(4)开发历史:指程序的编写者、审阅者姓名及日期、修改说明及日期。
32
程序设计风格 2. 数据说明 为了使数据定义更易于理解和维护,一般有以下的书写原则:
2. 数据说明 为了使数据定义更易于理解和维护,一般有以下的书写原则: (1)数据说明顺序应规范,将同一类型的数据书写在同一段落中,从而有利于测试、纠错与维护。例如按常量说明、类型说明、全程量说明及局部量说明顺序。 (2)当一个语句中有多个变量声明时,将各变量名按字典顺序排列,便于查找。 (3)对于复杂的和有特殊用途的数据结构,要加注释,说明在程序中的作用和实现时的特点。
33
程序设计风格 3. 语句构造 不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。
3. 语句构造 不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。 避免复杂、嵌套的判定条件,避免多重的循环嵌套,一般嵌套的深度不要超过三层。 利用括号使逻辑表达式或算术表达式的运算次序清晰直观; 尽可能使用库函数; 让编译程序作简单的优化。
34
程序设计风格 4. 输入和输出 (1)输入操作步骤和输入格式尽量简单,提示信息要明确,易于理解。
4. 输入和输出 (1)输入操作步骤和输入格式尽量简单,提示信息要明确,易于理解。 (2)输入一批数据时,尽量少用计数器来控制数据的输入进度,使用文件结束标志。 (3)应对输入数据的合法性、有效性进行检查,报告必要的输入信息及错误信息。 (4)交互式输入时,提供明确可用的输入信息,指明可以使用的选择值或界限值 。 (5)当程序设计语言有严格的格式要求时,应保持输入格式的一致性。
35
程序设计风格 5. 效率 效率一般指对处理机时间和存储空间的使用效率,对效率追求要注意下面几个方面:
5. 效率 效率一般指对处理机时间和存储空间的使用效率,对效率追求要注意下面几个方面: (1)效率是一个性能要求,需求分析阶段就要对效率目标有一个明确的要求。 (2)追求效率应该建立在不损害程序可读性或可靠性基础之上。在程序可靠和正确的基础上追求效率。 (3)选择良好的设计方法才是提高程序效率的根本途径,设计良好的数据结构与算法,都是提高程序效率的重要方法。编程时对程序语句做调整是不能从根本上提高程序效率的。
36
程序设计风格 例6-1:判断一个给定的数是否为素数。 Dim n%, i% n = Val (InputBox("输入一个正整数n"))
For i = 2 To n - 1 If n Mod i = 0 Then Exit For Next i If i > n - 1 Then picture1.Print n; "是素数" Else picture2.Print n; "不是素数" End If
37
程序设计风格 算法改进: Dim n%, i% n = Val (InputBox("输入一个正整数n"))
For i = 2 To Int (Sqr (n)) If n Mod i = 0 Then Exit For Next i If i > Int (Sqr (n)) Then Picture1.Print n; "是素数“ Else picture2.Print n; "不是素数" End If
38
程序设计效率 1、代码效率:对代码效率影响最大的是算法的效率。编码风格也影响速度和内存。体现在以下的几个方面:
(1)编码前,简化算术表达式和逻辑表达式。 (2)循环内部的语句和表达式越少越好。 (3)应尽量避免使用多维数组。 (4)应尽量避免使用指针和复杂的列表。 (5)采用效率高的算术运算。 (6)要避免采用混合数据类型。 (7)应当采用占用内存少的数据类型。
39
程序设计效率 2、内存效率: 内存效率必须注意考虑操作系统内存管理的分页特征,而根据代码的局域性或通过结构化构造功能域的设计方法才是减少程序在运行时产生频繁的页面置换和提高内存效率的最好办法。 优化算法是内存高效的关键。 有时则必须选择使用汇编语言。
40
程序设计效率 3、I/O效率: 从编码的角度来看,人们总结了一些简单的指导原则来提高输入/输出的效率:
所有的输入/输出都应该有缓冲,以降低用于通信的开销(例如:Cache、硬盘、显卡、光驱缓存) ; 对辅助存储器(如磁盘)的访问,应选用最简单最直接的存取方式; 涉及到辅助存储器的输入/输出时,应该以块为单位进行传送; 这些指导原则适用于软件工程的设计和编码两个阶段。
41
冗余编程 冗余(redundancy)是改善系统可靠性的一种重要技术。
广义地说,冗余是指所有对于实现系统规定功能来说是多余的那部分资源,包括硬件、软件、信息和时间。 对于一个系统,提供两套或更多的硬件,使之与原始系统并行工作。这种方式称为并行冗余,也称热备用或主动式冗余。 提供多套的硬件资源,但是只有一套资源在运行,只有当它失效时,备用的资源才开始运行。该方式称备用冗余,也称冷备用或被动式冗余。
42
冗余编程 对于软件,就不能简单地照搬硬件冗余的情况。若想通过采用两个程序文本相同的程序在计算机上运行来实现软件冗余,将达不到软件冗余的目的。因为在两台计算机上程序如果是一样的,则一个软件上的任何错误都会在另一个软件上出现。要想采用冗余软件,就必须设计出两个功能相同,但源程序不同的程序。 在设计冗余软件时,不仅采用不同的算法和设计来实现同一个计算,而且编程人员也应该不同。
43
冗余编程 冗余编程的费用可控制,因为软件的描述、设计和大部分测试以及文档编制的费用是两个程序共享的。
冗余编程引起的副作用是由于文本增加而带来的存储空间的增加,以及运行时间的延长。 可以采用海量存储器和覆盖技术,并仅仅在关键部分采用冗余计算,使成本减到最小。
44
软件容错技术 提高软件质量和可靠性的技术大致可分为两类:
一类是避开错误(fault–avoidance)技术,即在开发的过程中不让差错潜入软件的技术。 另一类是容错(fault–tolerance)技术,即对某些无法避开的差错,使其影响减至最小的技术。 避开错误技术主要体现在提高软件的质量管理,也就是软件工程中所讨论的先进的软件分析和开发技术以及管理技术。
45
软件容错技术 容错软件: (1)规定功能的软件,如果在一定程度上对自身错误(软件错误)具有屏蔽能力,则称此软件为具有容错功能的软件,即容错软件。 (2)规定功能的软件,如果在一定程度上能从错误状态自动恢复到正常状态,则称之为容错软件。 (3)规定功能的软件,程序存在错误而且发生时,仍然能在一定程度上完成预期的功能,则把该软件称为容错软件。
46
软件容错技术 1. 结构冗余 1)静态冗余 静态冗余通过冗余结果的表决和比较来屏蔽系统中出现的错误。其中三模冗余TMR(Triple Modular Redundancy)和多模冗余最常用。
47
软件容错技术 其表决输出为: U=(U1∧u2)∨(U2∧U3)∨(U1∧U3)
因在运行时无需对错误进行处理,也不必进行模块切换,故称静态冗余。
48
软件容错技术 2)动态冗余 动态冗余的特点是在系统运行出错后才运行冗余模块。 动态冗余的逻辑结构:
49
软件容错技术 M1,M2,……,Mn是n个具有功能相同,但独立设计的不同模块。其中M1称为主模块,M2~Mn称为备用模块。当M1出错时,由M2顶替M1工作,M3~Mn又成为M2的备用模块,依次类推。只有所有n个模块相继都出错后,系统才会失效。
50
软件容错技术 3)混合冗余 结合静态冗余和动态冗余的长处,就可以得到混合冗余结构。 H(N,K)系统结构
51
软件容错技术 2. 信息冗余 3. 时间冗余 信息冗余是保证信息在传输过程中不出错的重要技术方法。 (校验码、纠错码)
2. 信息冗余 信息冗余是保证信息在传输过程中不出错的重要技术方法。 (校验码、纠错码) 3. 时间冗余 主要是利用对指令的重复执行(指令复执)或程序的重复运行(程序复算)来消除错误带来的影响。
Similar presentations