软件技术课程学习简介一、课程理论学习内容
1,VB程序设计语言
2.数据库原理
3,VB数据库设计
4.网络编程基础,补充内容 ASP技术二、课程实验学习内容
1.要求掌握科研课题开题报告的一般写作方法
2.完成一个微小型的微机应用系统的软件设计。
课题按照小组为单位进行,每个课题组 1~ 3名同学。
3.学习科研课题结题报告的一般写作方法软件技术课程学习简介三、课程理论学习要求
VB程序设计语言、数据库原理,VB数据库设计、网络编程基础各章的基本概念和基本操作方法。
考核方式:机考四、课程实验学习要求
1.学习科研课题开题报告的一般写作方法,开题报告每个课题小组写一份。
2.学习一个在可视化软件平台下,设计一个微小型的微机应用系统。
3.学习科研课题结题报告的一般写作方法,结题报告每个同学写一份。
软件技术课程学习简介考核内容:检查一个微小型的微机应用系统软件设计的完成情况。
1.评价标准
创新性、合理性( 5)
难度、复杂性( 15)
完整性( 20)
完成情况( 20)
界面可操作性( 20)
开题报告和结题报告( 20)
软件技术课程学习简介考核内容:检查一个微小型的微机应用系统软件设计的完成情况。
2.考核方法
为了最终成绩的公平性,由课题小组组长组成的评议小组,给出一个平时成绩。
每次实验课,由实验老师检查进度,并进行记录。
课题完成答辩,每个同学当堂演示你完成的内容检查内容,并对于你所使用平台工具的基本技术理论、课题中使用技术,以及功能和性能等方面的问题进行提问。
第 1章 概论
1,1 程序设计语言
1,2 程序的基本概念
1,3 软件的基本概念
1,4 应用系统软件的开发
1,1 程序设计语言程序设计语言的分类
程序设计语言可以从不同的角度进行分类。
从 发展过程 分,第一代语言 (机器语言 ),第二代语言
( 汇编语言 ),第三代语言 ( 高级语言 ),第四代与第五代计算机语言 (可视化,面向对象,网络 )
从 应用范围 来分,分为通用语言与专用语言;再可细分为系统程序设计语言,科学计算语言,事务处理语言,实时控制语言,脚本语言,教学用语言以及用于解决非确定性问题的语言等 。
从 程序设计方法 上来分,分为结构化语言、模块化语言与面向对象语言。
1,1,3程序设计语言的评价标准
程序设计语言 7种基本评价标准:
(1)用户界面好,操作简便 ;
(2)对硬件,软件环境要求低 ;
(3)对硬件资源利用的程度高 ;
(4)代码质量高,目标程序运行速度快,可靠性高,
结构化性能高,可读性好 ;
(5)应用范围广泛 ;
(6)调用其它软件容易 ;
(7)自身发展快 。
如果一种程序设计语言,能在上述 7个方面都有较高的得分,那它就是一种比较理想的语言 。
1,1,4程序设计语言的选择标准
开发软件时的程序设计语言 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)算法及计算复杂性
FORTRAN,Pascal,C,C++等语言都能支持较复杂的算法与计算。
而绝大多数数据库语言都只能支持较简单的算法与计算。
3)数据结构
C,C++,Pascal语言都提供了数组,记录数据结构及带指针的动态数据结构 。 它们适合于设计系统程序以及需要复杂数据结构的应用程序 。
4)效率
有些实时应用系统要求具有很快的响应速度,可以选择汇编语言或 C语言 。 有时应用系统中只是某一部分要求具有很快的响应速度,在这种情况下,可以选用汇编语言来编写这一部分程序,
1,2 程序的基本概念
1,程序是由程序设计语言的抽象符号的集合
程序设计语言有面向机器的汇编语言,以及面向过程和面向对象的高级程序设计语言 。
2,程序是对数据施行算法的过程
算法决定了程序的质量,同样的数据用不同的算法实现,其所需的时空开销大不相同 。 要达到时间和空间性能的最佳,需要遵循一定的算法来编写程序 。 在不同情况下需要选用不同算法来达到效率,质量的最佳 。
面向对象的程序也需要算法,从对象的角度来看,
程序是对对象的行为和状态及对象间关系的描述 。
在面向对象的程序里,同样需要算法,因为,状态和属性是用数据表示的,状态改变的方法就包含了算法 。 只是面向对象语言提供了更高抽象的对象概念 。
1,3 软件的基本概念
软件的定义,计算机程序,方法,规则,程序有关的各种文档以及在计算机上运行所必需的数据的总称 。
软件不仅是程序,还包括其功能和性能的说明性信息 。 软件不仅有功能和性能要求,还有质量,成本,
交货期,使用寿命要求 。
1,软件质量的评价标准软件的质量 10条主要的标准 。
1) 可理解性 (Understandablity)
一个软件产品具有可理解性,主要指的是该软件的用途对用户来说是十分清楚的 。 除了软件的功能之外,软件各部分之间,各子系统之间的分工,
及其相互关系也应该是清楚的 。 当用户按规定调用软件的某个部分时,软件应能按用户的要求作出明确的响应,解决用户的问题 。
2) 可靠性 (Reliablity)
软件产品的可靠性主要是指在软件整个生命周期内,它能否按照设计的要求,实现所需要的各功能 。 即软件设计的功能是否能正确实现,运行中会有多少隐藏的错误出现,错误出现的后果是什么等 。
3) 效率 (Efficiency)
软件产品的效率指的是完成给定功能时所需占用的资源 (时间和空间 )。 在这里,资源主要指的是存储空间,CPU时间,接口占用等等 。
4) 可维护性 (Maintainablity)
软件产品的可维护性是指为了满足新的要求,软件产品应该是很容易修改和维护的 。
5) 完整性 (Completencess)
完整性要求软件自成体系,即软件应该具备问题处理的全部环节 (如输入,编辑,处理,输出等等 )。
此外,完整性还要求软件应具有相应的容错能力,
即自动排除错误和恢复工作的能力 。
6) 简明性 (concisess)
软件的简明性指的是其本身和其表现形式的 "能见度 ",使用户对发生的事情一目了然,知道是否出了问题,问题出在什么地方,以及如何解决问题 ;简明性的另一层含义是指用软件书写的程序具有较少的命令行数 。
7) 可移植性 (Portability)
可移植性是指软件在多种类型的计算机配置上都能容易而有效地操作 。 广义地说,软件应在任何硬件配置与操作系统下都能正常有效地运行 。
8) 可测试性 (Testablity)
软件的可测试性是指对该软件的技术性能及质量是否能够确定测试的手段和方法 。 一个可测试性好的软件,能够比较容易地对它确定出测试的方法,以便对它的技术性能作出评价 。
9) 结构性 (Structuredness)
软件相互依赖的部分,其结构应具有确定的形式 。
一般所说的结构性指的是模块化的程度,其编制是否符合结构化和模块化的原则等 。 当然,在追求高可靠性,高运行效率时可能会使结构性能变差 。
10) 友好性 (Friendliness)
一个优秀的软件产品应该具有友好的用户界面 。
有丰富的操作提示和联机帮助信息,使用户能够随时得到提示和帮助 。
2,软件的特征
软件主要包括程序和相关文档 。
从静态角度来看,程序是求解客观问题的逻辑描述,需检查程序的语法是否符合规则形式要求;
从动态角度来看,需要验证程序的所有逻辑流结构和数据结构是否正确 。 是否能够完成特定的操作和数据处理 。
软件的核心是其运行过程中动态变化的处理过程 。
软件生产属于资金密集和人力密集的行业 。 大型软件开发投入人力较多,时间长,费用高 。
1) 软件是一种逻辑产品
软件和硬件是截然不同的两种产品和概念 。 软件是一种逻辑产品,具有无形性,是脑力劳动的结晶 。
软件产品在设计和生产过程中,首先要抽象出问题求解的数学模型或逻辑模型,再把这些模型转化为求解模型,然后根据求解模型写出程序,经过调试和运行程序,最后得到求解的结果 。
整个开发过程是通过人脑进行的逻辑思维完成的,
其无形化的特征给软件的开发,生产过程的管理带来不便,进度难以控制,开发质量难以评价和保证 。
如果在软件运行中发现错误,很可能是一个在开发阶段隐藏的,在测试阶段没能检测出来的故障 。 因此,软件维护通常意味着修改原来的设计,这就在客观上决定了软件维护是相当复杂的工作 。
2) 软件产品的质量需通过实践来验证
软件产品在设计,编程和实现过程中的各个阶段其质量难以保证和检验,只有在实际问题求解过程中被证实是可行的,才能成为产品 。
3) 软件产品的成本构成具有上升的趋势
在软件产品生存周期中,其成本构成中人力资源占了相当大的比重 。 这其中,设计和生产只占很小比重,而维护却占了很大比重,据统计数据表明,软件维护的费用占软件总费用的 55%~70%。
软件的费用具有上升的趋势 。 这是因为实际问题的复杂性决定了实用软件的系统规模庞大,软件结构复杂 。 例如,庞大系统中各个模块之间逻辑接口的定义,数据结构的描述,所有开发人员的协调和组织等等 。
4) 软件产品的故障率随着软件维护而下降
在软件产品生存周期中,软件在其生命周期的初始阶段存在较高的故障率,当开发过程中的错误被纠正后,其故障率下降到一定的水平并保持相对稳定,直到该软件被废弃不用 。
软件是只有过时而无,磨损,的商品 。 所谓过时往往是它所在的硬件环境升级,导致配套软件必须做相应的升级,否则不能再用;或者同类软件产品功已更新换代,使得本产品不具备竞争力 。
3,软件的分类按软件功能划分和按软件规模划分 。
1) 按软件的功能划分
按功能划分,软件通常可以分为系统软件和应用软件两大类 。 如下图所示 。
软件系统软件应用软件操作系统网络系统编译系统工具软件信息管理实时控制科学计算人工智能专用领域嵌入式软件多媒体技术
(1)系统软件:
系统软件定义,是为计算机系统提供基本功能服务的程序集合;
系统软件的功能,支持计算机系统的正常运行,
并实现用户提交的各种操作 。
系统软件的主要特征,与计算机硬件系统有很强的交互性,能对共享资源进行调度管理,能解决并发性操作处理中存在的协调问题 。
系统软件的用户接口,一般为用户提供多样化的外部接口,便于用户管理和使用系统资源 。
系统软件主要包括:操作系统,网络系统,计算机语言编译 (解释 )系统以及实用工具软件系统等 。
操作系统是计算机软件系统的核心,是对计算机系统的全部硬,软件资源 (如 CPU,内存,硬盘,
打印机等外部设备和各种软件 )进行统一管理,调度和分配的软件系统,并向上层软件提供服务,
各种应用程序都是在操作系统的支持下运行的,
用户是通过操作系统对计算机进行操作的 。
操作系统,包括 CPU及进程管理,内存 管理,外设管理,文件系统管理 。
网络系统,承担着整个网络范围内的任务管理和资源管理,帮助用户共享整个网络中的信息资源,
对网络内的共享设备进行访问,并支持网络中各个站点之间的通信,使网络中各个部分遵守协议,
协调一致,有条不紊地工作 。
程序设计语言编译系统,把该语言编写的程序
,翻译,成计算机能直接执行的机器指令 。
工具软件,帮助操作系统更有效地完成计算机系统的管理和维护,提高工作效率,实现普通用户无法实现的一些操作 。
数据库管理系统,DBMS是专门用于数据库定义,
管理和维护的系统软件,是用户和数据库间的接口 。
微机 Windows平台的数据库管理系统有 Access、
Visual FoxPro,Paradox等,常见的大型关系数据库系统有 SQL Server,Infomix,Oracale以及
Sybase等 。
随着多媒体,Internet和 WWW 技术的发展,现在的大型数据库大都支持多媒体数据类型,并以各种方式提供了对 WWW的支持,使异地,异构机之间的数据共享成为现实 。
(2)应用软件是为满足用户不同领域和不同问题的应用需求而设计的软件,可以拓宽计算机系统的应用领域 。 应用软件主要包括下列几类软件:
① 管理软件系统 (Management Information System,
MIS)软件
MIS 的 核 心 是 数 据 库 管 理 系 统 ( DataBase
Management System,DBMS)。
MIS的特点是有一个或多个数据库,存放所有业务的信息,而应用程序是离散的,如工资,会计,
仓库,生产计划调度,彼此只有数据联系 。
② 实时 (Real-time)控制软件
实时控制软件是对现实世界中随时 (极短时间内 )发生的事件进行监测,分析和控制的软件,其包括从外部环境收集信息 (模拟量数据要通过 A/D、
D/A变换 ),分析后按应用要求转移信息,处理后作出响应 (到外部的输出 ),实时处理要求即时响应用户的服务请求,并在较短时间内完成数据处理 。
③ 科学计算数据处理软件
科学计算数据处理软件,应用在数值领域,解决数值算法的速度和精度 。 包括可视化计算,大量图形的计算机辅助设计,以及在多处理机系统中实现并行计算和系统仿真等技术 。
④ 人工智能软件
人工智能软件建立在基于知识库以及相应规则的专家系统上 。
专家系统也称为基于知识的问题求解系统 。
实用的人工智能软件有模式识别,定理证明,专家系统,辅助决策支持,图像语音识别,神经网络系统等 。 近年来图像,声音识别,自学习,人工神经网络也发展迅速,例如,语音输入和机器语言翻译等 。
⑤ 嵌入式 (Embeded)软件
嵌入式软件:用于工业产品的自动化和智能化,
在每个工业产品中嵌入一个的单片机,其中的软件可根据传感器传入的数据控制该产品行为 。 这些软件首先在宿主机 (host)上以某种语言开发,经交叉编译后成为单片机的机器码程序,"烧入 "单片机,故为嵌入式 。 应用程序的开发,调试,修改和升级全在宿主机上完成 。 近年来,Java芯片和 Java嵌入式应用发展特别迅速 。
⑥ 多媒体软件
多媒体软件包括多媒体数据传输和多媒体数据处理,例如,图形处理,图像处理,动画制作,
音频视频播放,音频视频编辑,电视会议,多媒体写作工具以及桌面排版等应用软件 。
2,按软件规模划分
软件系统可以划分为 6种不同的规模系统规模 人年 源程序代码微型系统 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百万行
1,4 应用系统软件的开发初学者在软件开发中存在的问题
没有准确,完整地了解用户的实际需求,就急于编程 。
重编程,轻需求分析;
重开发,轻维护;
重程序,轻文档 。
这样做的后果就是在软件系统中,埋藏,了许多故障隐患,直接危害着系统的可靠性和稳定性 。
而在软件开发过程中,问题发现得越早,解决它所花费的代价就越小;而问题发现得越晚,解决它所花费的代价就越高 。
在进行软件设计时应当注意以下几点:
( 1) 注重分析解决问题 。
软件开发过程实际上就是用程序语言来描述解决问题的方法和步骤 。 所以软件开发的基本过程是分析用户的需求,找出需要解决的问题,发现解决问题的方法 。
( 2) 掌握应用系统设计方法 。
分析和综合是处理复杂系统的基本方法,面对一个大的系统,应该学会使用分解与综合的应用系统设计方法,把复杂问题分解为若干子问题,分散难点,各个击破,再把设计出的各个子模块综合为一大系统 。
( 3) 广泛了解当前的最新计算机应用技术 。
由于计算机技术发展飞速,每年都有新的技术或者已有技术的升级版本出现,选准适合的新技术来实现设计目标,具有事半功倍的效果 。 实现一个系统,往往会使用几种程序设计语言或者工具软件 。
( 4) 学会建立抽象模型 。
软件设计需要根据物理模型抽象出其逻辑模型,
通过建立的模型描述抽象事物间的关系 。 例如,
建立系统需要分析模型,解题需要算法模型,在算法中采用符号语言代替计算机动作;在程序文档中采用规格说明抽象软件行为 。
( 5) 力求系统结构清晰 。
现在的软件越来越复杂,需要重视程序结构,数据结构,结构化数据,程序的体系结构等软件设计的关键技术,在编写程序代码前,要对系统结构有一个清晰明了概念,设计出一个好的结构可以使解决问题的步骤变得清晰,简洁,高效 。
( 6) 注意形式化,一致性和规范化 。
程序语言,数学公式都是形式系统,只有按照约定的形式符号才能让计算机理解编程意图 。 随着软件系统的越来越复杂,开发人员越来越多,需要符号定义,表示风格,文档格式尽可能规范和一致 。 以利于模块的综合,开发和调试 。
( 7) 重视书写程序文档 。
以便帮助阅读和发现程序中的错误 。
一些不正确的观念
观念之一,我们拥有一套讲述如何开发软件的书籍,书中充满了标准与示例,可以帮助我们解决软件开发中遇到的任何问题。
客观情况,好的参考书无疑能指导我们的工作。
充分利用书籍中的方法、技术和技巧,可以有效地解决软件开发中大量常见的问题。但实践者并不能因此依赖于书籍,这是因为:( 1)现实的工作中,由于条件千差万别,即使是相当成熟的软件工程规范,常常也无法套用。( 2)软件技术日新月异,没有哪一种软件标准能长盛不衰。祖传秘方在某些领域很吃香,而在软件领域则意味着落后。
观念之二,既然需求分析很困难,不管三七二十一先把软件做了再说,反正软件是灵活的,随时可以修改。
客观情况,对需求把握得越准确,软件的修修补补就越少。有些需求在一开始时很难确定,在开发过程中要不断地加以改正。软件修改越早代价越少,修改越晚代价越大,就跟治病一样道理。
进度安排存在的问题
( 1)主管臆断制定了不现实的期限,按照不合理的进度表开展工作。
( 2)客户的需求发生了变化,但没有对进度表作出相应的修改。
( 3)低估了项目的规模与难度,导致投入的人力和物力不足。
( 4)并未预见到存在难以克服的技术障碍。
( 5)开发人员之间不能很好的交流、协作,导致各阶段任务难以如期完成。
一些有益的建议
( 1)进度表要经过开发小组的讨论,在得到大部数人的支持后才能实施。避免出现一厢情愿的局面。
( 2)进度安排并不见得一定要符合逻辑顺序。应尽可能地先做技术难度高的事,后做难度低的事。也就是辛苦在前,轻松在后。
( 3)开发一个大的软件项目,应该将进度表分为若干个里程碑。一个里程碑之内的多个任务可以同步进行。
( 4)进度表中必须留有缓冲时间,并将缓冲时间用到不确定的事情上。因为人们对即将要做的事情知之甚少,所以要留一些时间以防不测。 Microsoft
公司的一些开发小组甚至制定了,50% 缓冲规则,。
零缺陷质量管理的观念高目标
做一个项目通常需要多个人的协作。假设项目的总质量(最高为 1)是十个开发人员的工作质量之积。
如果每个人的质量目标是 0.95,那么十个人的累积质量不会超过 0.19。如果每个人的质量目标是 0.9分,
那么十个人的累积质量不会超过 0.03。只有每个人都做到 1,项目总质量才会是 1。
软件的质量因素
,运行正确,的程序不见得就是高质量的程序。这个程序也许运行速度很低并且浪费内存;也许代码写得一塌糊涂,除了开发者本人谁也看不懂也不会使用。正确性只是反映软件质量的一个因素而已。
软件的质量因素很多,如正确性、精确性、可靠性、
容错性、性能、效率、易用性、可理解性、简洁性、
可复用性、可扩充性、兼容性等等(还可以列出十几个)。这些质量因素之间,你中有我,我中有他,。
为了便于理解,可以参照武侠小说中的武学分类,
将质量因素粗略地分成几大派 。
正确性与精确性易用性可理解性与简洁性性能与效率可复用性与可扩充性少林派、武当派华山派昆仑派峨嵋派崆峒派正确性与精确性
正确性与精确性排在质量因素的第一位,因为如果软件运行不正确或者不精确,就会给用户造成不便甚至造成损失 。
即使一个软件能 100% 地按需求规格执行,但是如果需求分析错了,那么对客户而言这个软件也存在错误 。
即使需求分析完全符合客户的要求,但是如果软件没有 100% 地按需求规格执行,那么这个软件也存在错误 。 开发一个大的软件项目,程序员要为,正确,,,精确,四个字竭尽精力 。
容错性和可靠性
容错性和可靠性是与正确性、精确性相关的质量因素
容错性承认软件系统存在不正确与不精确的因素,
为了防止潜在的不正确与不精确因素引发灾难,系统为此设计了安全措施。在一些高风险的软件系统,
如航空航天、武器、金融等系统中,容错性设计非常重要。
可靠性是指在一定的环境下,在给定的时间内,系统不发生故障的概率 。 我们无法对软件进行彻底地测试,无法根除软件中潜在的错误 。 平时软件运行得好好的,说不准哪一天就不正常了,如,2000年,
问题 。
性能与效率
用户都希望软件的运行速度高些 ( 高性能 ),并且占用资源少些 ( 高效率 ),,干活要快点,吃得要少点,。
程序员可以通过优化算法,数据结构和代码组织来提高软件系统的性能与效率 。 优化的关键工作是找出限制性能与效率的,瓶颈,,不要在无关痛痒的地方瞎忙乎 。
易用性
易用性是指用户感觉使用软件的难易程度。用户可能是操作软件的最终用户,也可能是那些要使用源代码的程序员。现代人的生活节奏快,所以把易用性作为重要的质量因素无可非议。
导致软件易用性差的根本原因是开发人员犯了,错位,的毛病:他以为只要自己用起来方便,用户也一定会满意。
软件的易用性要让用户来评价。
可理解性与简洁性
可理解性表达了人们一种质朴的愿望:我化钱买了它,总得让我明白它是什么东西。
可理解性也是对用户而言的。开发人员只有在自己思路清晰时才可能写出让别人能理解的程序。编程时还要注意不可滥用技巧,应该用自然的方式编程。
我们的确不知道自己的得意之举究竟是锦上添花,
还是画蛇添足。
简洁是一种美,不管是自己还是用户都会有同感。
一个原始的应用问题可能很复杂,但高水平的人就能够把软件系统设计得很简洁。如果软件系统臃肿不堪,它迟早会出问题。简洁是人们对工作,精益求精,的结果。
可复用性与可扩充性
将具有一定集成度并可以重复使用的软件组成单元称为软构件 (Software Component)。
复用的一种方式是原封不动地使用现成的软构件,另一种方式是对现成的软构件进行必要的扩充后再使用 。 可复用性好的程序一般也具有良好的可扩充性 。
复用方法简化了软件开发过程,减少了总的开发工作量与维护代价,既降低了软件的成本又提高了生产率 。 另一方面,由于软构件是经过反复使用验证的,自身具有较高的质量 。 因此由软构件组成的新系统也具有较高的质量 。
软件复用不仅要使自己拿来方便,还要让别人拿去方便,
是,拿来拿去主义,。 面向对象方法,能很好地用于实现大规模的软件复用 。
软件产品从 定义,开发,使用和维护,直到最终被废弃所经历的周期,称为 软件生存周期 。
在生存周期的各个阶段有其具体的任务 。 为完成各个阶段的任务,又有各自不同的技术方法和操作步骤 。
只有科学地按生存周期各个阶段的任务,技术方法和操作步骤去实施,才能保证软件产品的质量 。 而急于求成,不按科学方法实施,不愿学习和采用新的开发技术和开发工具,则势必 "事倍功半 ",甚至断送它 。