软件工程 周志钊 zhouzhizhao08@163.com.

Slides:



Advertisements
Similar presentations
三级偏软考点. 第一章必考点 1. 计算机的进位数制 (1) 计算机中所有数据是二进制 0,1 表示 (2) 在现实生活中人们普遍使用十进制 如何把十进制转换成计算机所识别的二 进制?整数是除 2 取余法,小数是乘 2 取 整法.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
初级会计电算化 (用友T3) 制作人:张爱红.
Tool Command Language --11级ACM班 金天行.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
实用操作系统概念 张惠娟 副教授 1.
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
Hadoop I/O By ShiChaojie.
面向对象建模技术 软件工程系 林 琳.
存储系统.
SOA – Experiment 3: Web Services Composition Challenge
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第二章 Java语言基础.
逆向工程-汇编语言
数据挖掘工具性能比较.
动态规划(Dynamic Programming)
CPU结构和功能.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
第6章 软件编码 本章内容结构 本章引言 学习目标 教学内容 本章小结 思考和练习 课堂讨论 2019年4月9日.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
微机系统的组成.
$9 泛型基础.
VisComposer 2019/4/17.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
项目二:HTML语言基础.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
长春理工大学 电工电子实验教学中心 数字电路实验 数字电路实验室.
3.16 枚举算法及其程序实现 ——数组的作用.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
第七、八次实验要求.
SpringerLink数据库使用说明 上海师范大学图书馆
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
滤波减速器的体积优化 仵凡 Advanced Design Group.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
顺序结构程序设计 ——关于“字符串”和数值.
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
第二次课后作业答案 函数式编程和逻辑式编程
Presentation transcript:

软件工程 周志钊 zhouzhizhao08@163.com

代码设计 代码:是代表事物名称、属性、状态等的符号,为了便于计算机处理,一般用数字、字母或它们的组合来表示。 代码的功能: 为事物提供了个概要而不含糊的认定,便于数据存储和检索。 使用代码可以提高处理的效率和精度。 代码提高了数据的全局一致性。 代码是人和计算机的共同语言,是二者交换信息的工具。

代码设计实例

代码设计实例

代码设计实例

代码设计 代码的设计原则 (1) 具备唯一确定性。每一个代码都仅代表唯一的实体或属性。 (2) 标准化与通用性。凡国家和主管部门对某些信息分类和代码有统一规定和要求的,则应采用标准形式的代码,以使其通用化。 (3) 可扩充且易修改。要考虑今后的发展,为增加新代码留有余地。当某个代码在条件或代表的实体改变时,容易进行变更。   

代码设计 (4) 短小精悍即选择最小值代码。代码的长度会影响所占据的内存空间、处理速度以及输入时的出错概率,因此要尽量短小。 (5) 具有规律性、便于编码和识别。代码应具有逻辑性强,直观性好的特点,便于用户识别和记忆。

代码设计 代码的结构 (一) 顺序码:一种以连续数字代表编码对象的代码。如1代表厂长,2代表科长,3代表科员,4 代表工人等。 (二) 层次码:又名区间码, 数据分成若干组,每一区间代表一个组,码中数字的值和位置都代表一定意义。如邮政编码、居民身份证编码。

代码设计

代码设计 区间码又可分为: 多面码 :一个数据项可能具有多方面的特性。如果在码的结构中,为这些特性各规定一个位置,就形成多面码。 例如:代码3212表示材料为钢的Φ1.0mm圆头的镀铬螺钉。

代码设计 代码词典,便于对数据进行识别、分类和排序。

代码设计 上下关联区间码:由几个意义上相关的区间码组成,其结构一般由左向右排列。 十进制码:相当于图书馆中的十进制分类码。用组合的数字代表特定的学科分类。如:140—物理学,140.15—理论物理学,140.1510—物理数学。

代码设计 (三) 助记码:将编码对象的名称、规格等作为代码的一部分,以帮助记忆 。助记码适用于数据项数目较少的情况,否则容易引起联想出错 如:TVB14 14寸黑白电视机 TVC20 20寸彩色电视机

代码设计 代码校验: 一种是事先在计算机中建立一个“代码字典”,然后将输入的代码与字典中的内容进行比较,若不一致说明输入的代码有错。 另外一种做法,是设校验位。 校验位通过事先规定的数学方法计算出来。校验位一般可以发现以下错误:抄写错误、易位错误、双易错误、随机错误等。

代码设计 常用的确定校验位值的方法: 算术级数法、几何级数法、质数法。 用几何级数法设计代码检验位的方案如下:原代码 共4位,从左到右取权16,8,4,2;对乘积和以11为模取 余作为校验码,试问原代码为6137的校验位是多少?

代码设计 原代码 1 2 3 4 5 权 6 5 4 3 2 乘积之和 6+10+12+12+10 = 50 以11为模去除乘积之和,把得出的余数作为校验码: 50/11 = 4…6

代码设计 常用的代码形式: 1、数字码即以纯数字符号形式编码。 如身份证上江苏省常州市天宁区的代码:320402 优点:易校对、易处理 缺点:不便记忆 2、字符码即以纯字符形式编码。 如铁路客车车次代码:T(特快)、K(空调)等 优点:辅助记忆 缺点:校对不易,不易反映分类结构 3、混合码即以数字和字符混合形式编码。 如国际标准、国标代码ISO9001、GB19002等 优点:易于识别和表现其系列性 缺点:不易校对

软件编码与实现 在下列细节设计的基础上,用一种程序设计语言来将设计转换为程序,得到的结果是源程序代码。 程序设计语言的特性及选择 程序设计风格 程序设计效率 冗余编程 软件容错技术

程序设计语言分类 从描述客观系统的角度来分: (1)面向过程语言 数据结构+算法 (2)面向对象语言 对象+消息 例:Delphi、Visual Basic、JAVA、C++。

程序设计语言特性 1. 工程特性 1)可移植性 2)开发工具的可利用性 3)软件的可重用性 4)可维护性 技术特性 心理特性

程序设计语言的选择 一般情况下,我们采用高级语言来编程。 选择具体高级语言类型的原则: (1)系统的应用领域 (2)用户的要求 (3)软件的执行环境 (4)目标系统的性能要求 (5)程序员的知识水平 (6)软件的可移植性要求

程序设计语言的选择 1. 项目的应用领域 1)科学工程计算 (1)FORTRAN语言: (2)Pascal语言: (3)C语言: 1. 项目的应用领域 1)科学工程计算 (1)FORTRAN语言: (2)Pascal语言: (3)C语言: (4)PL/1语言: (5)C++语言:

程序设计语言的选择 2)数据处理与数据库应用 (1)COBOL语言: (2)SQL语言: (3)4GL语言: 4GL的主要特征是: ① 友好的用户界面: ② 兼有过程性和非过程性双重特性: ③ 高效的程序代码: ④ 完备的数据库: ⑤ 应用程序生成器: Labview Matlab

程序设计语言的选择

程序设计语言的选择

程序设计语言的选择

程序设计语言的选择 3)实时处理 (1)汇编语言: (2)Ada语言: 4)系统软件 汇编语言、C语言、Pascal语言和Ada语言。 5)人工智能 (1)LISP: (2)PROLOG:

程序设计语言的选择 2. 软件开发的方法 编程语言的选择依赖于开发的方法,采用4GL语言适合用快速原型模型来开发。面向对象的语言: 2. 软件开发的方法 编程语言的选择依赖于开发的方法,采用4GL语言适合用快速原型模型来开发。面向对象的语言: (1)C++: (2)Java: 3. 软件开发的环境 4. 算法和数据结构的复杂性 5. 软件开发人员的知识

程序设计风格 良好的编码风格有以下几个方面: 程序内部的文档化 数据说明 语句构造 输入/输出 效率

程序设计风格 1. 源程序文档化 编写源程序文档化的原则为: 1)标识符应尽量具有实际意义 2) 程序应加注释 主要内容有: 1. 源程序文档化 编写源程序文档化的原则为: 1)标识符应尽量具有实际意义 2) 程序应加注释 主要内容有: (1)说明每个模块的用途、功能。 (2)说明模块的接口形式、参数描述及从属模块的清单。

程序设计风格 (3)该模块的数据描述:特殊的数组或变量的说明、约束或其他信息。 (4)开发历史:指程序的编写者、审阅者姓名及日期、修改说明及日期。

程序设计风格 2. 数据说明 为了使数据定义更易于理解和维护,一般有以下的书写原则: 2. 数据说明 为了使数据定义更易于理解和维护,一般有以下的书写原则: (1)数据说明顺序应规范,将同一类型的数据书写在同一段落中,从而有利于测试、纠错与维护。例如按常量说明、类型说明、全程量说明及局部量说明顺序。 (2)当一个语句中有多个变量声明时,将各变量名按字典顺序排列,便于查找。 (3)对于复杂的和有特殊用途的数据结构,要加注释,说明在程序中的作用和实现时的特点。

程序设计风格 3. 语句构造 不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。 3. 语句构造 不同层次的语句采用缩进形式,使程序的逻辑结构和功能特征更加清晰。 避免复杂、嵌套的判定条件,避免多重的循环嵌套,一般嵌套的深度不要超过三层。 利用括号使逻辑表达式或算术表达式的运算次序清晰直观; 尽可能使用库函数; 让编译程序作简单的优化。

程序设计风格 4. 输入和输出 (1)输入操作步骤和输入格式尽量简单,提示信息要明确,易于理解。 4. 输入和输出 (1)输入操作步骤和输入格式尽量简单,提示信息要明确,易于理解。 (2)输入一批数据时,尽量少用计数器来控制数据的输入进度,使用文件结束标志。 (3)应对输入数据的合法性、有效性进行检查,报告必要的输入信息及错误信息。 (4)交互式输入时,提供明确可用的输入信息,指明可以使用的选择值或界限值 。 (5)当程序设计语言有严格的格式要求时,应保持输入格式的一致性。

程序设计风格 5. 效率 效率一般指对处理机时间和存储空间的使用效率,对效率追求要注意下面几个方面: 5. 效率 效率一般指对处理机时间和存储空间的使用效率,对效率追求要注意下面几个方面: (1)效率是一个性能要求,需求分析阶段就要对效率目标有一个明确的要求。 (2)追求效率应该建立在不损害程序可读性或可靠性基础之上。在程序可靠和正确的基础上追求效率。 (3)选择良好的设计方法才是提高程序效率的根本途径,设计良好的数据结构与算法,都是提高程序效率的重要方法。编程时对程序语句做调整是不能从根本上提高程序效率的。

程序设计风格 例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

程序设计风格 算法改进: 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

程序设计效率 1、代码效率:对代码效率影响最大的是算法的效率。编码风格也影响速度和内存。体现在以下的几个方面: (1)编码前,简化算术表达式和逻辑表达式。 (2)循环内部的语句和表达式越少越好。 (3)应尽量避免使用多维数组。 (4)应尽量避免使用指针和复杂的列表。 (5)采用效率高的算术运算。 (6)要避免采用混合数据类型。 (7)应当采用占用内存少的数据类型。

程序设计效率 2、内存效率: 内存效率必须注意考虑操作系统内存管理的分页特征,而根据代码的局域性或通过结构化构造功能域的设计方法才是减少程序在运行时产生频繁的页面置换和提高内存效率的最好办法。 优化算法是内存高效的关键。 有时则必须选择使用汇编语言。

程序设计效率 3、I/O效率: 从编码的角度来看,人们总结了一些简单的指导原则来提高输入/输出的效率: 所有的输入/输出都应该有缓冲,以降低用于通信的开销(例如:Cache、硬盘、显卡、光驱缓存) ; 对辅助存储器(如磁盘)的访问,应选用最简单最直接的存取方式; 涉及到辅助存储器的输入/输出时,应该以块为单位进行传送; 这些指导原则适用于软件工程的设计和编码两个阶段。

冗余编程 冗余(redundancy)是改善系统可靠性的一种重要技术。 广义地说,冗余是指所有对于实现系统规定功能来说是多余的那部分资源,包括硬件、软件、信息和时间。 对于一个系统,提供两套或更多的硬件,使之与原始系统并行工作。这种方式称为并行冗余,也称热备用或主动式冗余。 提供多套的硬件资源,但是只有一套资源在运行,只有当它失效时,备用的资源才开始运行。该方式称备用冗余,也称冷备用或被动式冗余。

冗余编程 对于软件,就不能简单地照搬硬件冗余的情况。若想通过采用两个程序文本相同的程序在计算机上运行来实现软件冗余,将达不到软件冗余的目的。因为在两台计算机上程序如果是一样的,则一个软件上的任何错误都会在另一个软件上出现。要想采用冗余软件,就必须设计出两个功能相同,但源程序不同的程序。 在设计冗余软件时,不仅采用不同的算法和设计来实现同一个计算,而且编程人员也应该不同。

冗余编程 冗余编程的费用可控制,因为软件的描述、设计和大部分测试以及文档编制的费用是两个程序共享的。 冗余编程引起的副作用是由于文本增加而带来的存储空间的增加,以及运行时间的延长。 可以采用海量存储器和覆盖技术,并仅仅在关键部分采用冗余计算,使成本减到最小。

软件容错技术 提高软件质量和可靠性的技术大致可分为两类: 一类是避开错误(fault–avoidance)技术,即在开发的过程中不让差错潜入软件的技术。 另一类是容错(fault–tolerance)技术,即对某些无法避开的差错,使其影响减至最小的技术。 避开错误技术主要体现在提高软件的质量管理,也就是软件工程中所讨论的先进的软件分析和开发技术以及管理技术。

软件容错技术 容错软件: (1)规定功能的软件,如果在一定程度上对自身错误(软件错误)具有屏蔽能力,则称此软件为具有容错功能的软件,即容错软件。 (2)规定功能的软件,如果在一定程度上能从错误状态自动恢复到正常状态,则称之为容错软件。 (3)规定功能的软件,程序存在错误而且发生时,仍然能在一定程度上完成预期的功能,则把该软件称为容错软件。

软件容错技术 1. 结构冗余 1)静态冗余 静态冗余通过冗余结果的表决和比较来屏蔽系统中出现的错误。其中三模冗余TMR(Triple Modular Redundancy)和多模冗余最常用。

软件容错技术 其表决输出为: U=(U1∧u2)∨(U2∧U3)∨(U1∧U3) 因在运行时无需对错误进行处理,也不必进行模块切换,故称静态冗余。

软件容错技术 2)动态冗余 动态冗余的特点是在系统运行出错后才运行冗余模块。 动态冗余的逻辑结构:

软件容错技术 M1,M2,……,Mn是n个具有功能相同,但独立设计的不同模块。其中M1称为主模块,M2~Mn称为备用模块。当M1出错时,由M2顶替M1工作,M3~Mn又成为M2的备用模块,依次类推。只有所有n个模块相继都出错后,系统才会失效。

软件容错技术 3)混合冗余 结合静态冗余和动态冗余的长处,就可以得到混合冗余结构。 H(N,K)系统结构

软件容错技术 2. 信息冗余 3. 时间冗余 信息冗余是保证信息在传输过程中不出错的重要技术方法。 (校验码、纠错码) 2. 信息冗余 信息冗余是保证信息在传输过程中不出错的重要技术方法。 (校验码、纠错码) 3. 时间冗余 主要是利用对指令的重复执行(指令复执)或程序的重复运行(程序复算)来消除错误带来的影响。