您好,欢迎访问三七文档
程序设计&软件工程基础一、程序设计的概念程序设计:利用计算机解决具体问题的全过程。程序设计的基本过程:①分析所求解的问题②抽象数学模型③设计合适的算法和数据结构④编写程序⑤调试运行程序设计基础二、程序设计方法1.结构化程序设计(StructuredProgramming)为了完成一些大规模、高复杂度的程序设计任务,SP(和软件工程)思想被提倡。强调数据类型、程序结构,强调可靠性、可维护性甚于程序的效率。其主要思想如下:(1)注意程序的可读性(2)采用自顶向下、逐步求精的设计方法。(3)程序语言只包括3种结构(单入口,单出口)(4)模块化程序设计基础基本结构:顺序结构选择结构循环结构程序设计基础程序模块1程序模块2程序模块2条件程序模块1成立不成立条件程序模块成立不成立2.面向对象程序设计(Object-OrientedProgramming)20世纪80年代OOP由理论转向实践,90年代开始盛行。(1)软件规模越来越大,(美国航天飞机系统4000万条代码),人们不得不寻求更高效、更可靠的开发技术。(2)OOP抓住软件开发的本质,OOP开发的软件易重用、易修改、易测试、易扩充。程序设计基础对象:用来描述客观事物的实体。每个对象有各自的内部属性和操作方法。程序设计基础整个程序是由一系列相互作用的对象构成的,对象之间的交互通过发送消息来实现。属性:频道颜色音量方法:调节频道调节颜色调节音量电视机电视机对象类:具有相同的属性和操作方法,并遵守相同规则的对象的集合。类是对象集合的抽象,规定了这些对象的公共属性(即数据结构)和方法(操作数据的函数)。对象是类的一个实例。程序设计基础OOP特点:封装、继承、多态性程序设计基础三、程序设计语言文章汉语、英语字、词、语法结构写文章程序计算机语言数据表示、表达式、语句结构编程序计算机语言:人与计算机通讯的语言程序:利用计算机语言编写的能够完成一定功能的一组代码。程序设计语言=计算机语言1.语言的分类应用范围通用语言、专用语言系统程序设计语言、科学计算语言事务处理语言、实时控制语言程序设计方法结构化语言模块化语言面向对象语言与硬件的联系程度机器语言汇编语言高级语言→与计算机硬件基本无关依赖于计算机硬件(低级语言)程序设计基础⑴机器语言从本质上说,计算机只能识别0和1两个数字,因此,计算机能够直接识别的指令是由一连串的0和1组合起来的二进制编码。机器指令=操作码+操作数机器语言:指计算机能够直接识别的指令的集合。即以二进制代码表示的机器指令集合,它是计算机能够直接识别和执行的语言。程序设计基础指令序号机器语言程序指令功能11011000000001001把一加数9送到累加器AL中20000010000001000把累加器AL中的内容与另一数相加,结果仍存放在AL中311110100停止操作•优点:占用内存少,执行速度快;•缺点:面向机器,通用性差,不易阅读和记忆,编程工作量大,难以维护。程序设计基础[例]用Intel8086指令系统编写机器语言程序,完成“9+8”序号汇编语言程序语句功能1MOVAL,9把加数9送累加器AL中2ADDAL,8把累加器AL中的内容与另一数相加,结果存入AL,即完成9+8运算3HLT停止操作•优点:比机器语言程序容易阅读和修改•缺点:面向机器,通用性差。程序设计基础⑵汇编语言汇编语言:用符号代替机器指令所产生的语言。例如,8086汇编语言实现“9+8”源程序:用汇编语言编写的程序。汇编程序:负责翻译的软件。主要作用→源程序转换成用二进制代码表示的目标程序。连接程序:将目标程序与库文件或其他目标程序连接起来形成可执行程序。程序设计基础汇编语言源程序目标程序可执行程序汇编程序连接程序⑶高级语言高级语言:用接近自然语言和数学语言的语法、符号描述基本操作的程序设计语言FORTRAN、Pascal、C、C++、Delphi、Java、C#例如用C++实现“9+8”程序设计基础优点:符合人类习惯,简单易学通用性强,便于维护源程序:用高级语言编写的程序。翻译程序:将源程序翻译成用二进制代码表示的目标程序。翻译程序的工作方式:①解释方式:边解释边执行②编译方式:编译程序、运行程序程序设计基础高级语言源程序执行结果解释程序解释方式程序设计基础编译方式可执行程序高级语言源程序编译程序目标程序连接程序2.程序设计语言的选择选择编程语言涉及很多因素:①人的因素:编程小组精通这门语言吗?②任务需要:选择的语言能否实现任务的全部功能?能跨平台吗?有数据库接口功能吗?能直接控制声卡等硬件吗?③客户指定。例如要通过串行口控制一个外部设备,C+汇编语言是最明智的选择。了解一些流行的语言,对于做出合理选择会有帮助。程序设计基础18一、软件的定义软件:计算机系统中的程序及其文档。程序:计算任务的处理对象和处理规则的描述。文档:为了便于了解程序所需的阐明性资料。程序必须装入机器内部才能工作文档供人阅读,不一定装入机器软件工程基础1.软件危机概念观点1软件产品的生产总是超出预算,落后于计划进度,而且产品质量不可靠。观点2在软件的开发和维护过程中所遇到的一系列严重问题。软件的生产过程不像硬件那样规范,受人的因素和外界影响很大,因此在软件生产的各阶段都会引入不同程度的错误,致使成本上升,甚至导致软件失败。三、软件危机与软件工程2.软件危机的表现•软件开发和维护费用急剧上升•不重视文档资料•产品质量不可靠•软件产品成本高于硬件产品3.软件开发中的问题•软件生产技术进展缓慢•软件成本和质量难以控制•对软件开发的错误认识•难以准确、全面把握用户需求•不重视阶段审查和复审•软件复杂且规模庞大•软件维护费用上升4.软件工程概念软件工程(SoftwareEngineering,SE)一门研究用工程化方法构建和维护有效的、实用的和高质量软件的学科。软件工程在软件开发与维护过程中采用工程的原理、方法、技术并使用正确的管理方法来指导软件生产的全过程。主要内容软件开发方法软件开发过程软件开发工具软件管理5.软件工程的基本准则B.W.Boehm综合各方意见,于1983年提出了软件工程的基本准则1.用分阶段的生命周期计划严格管理据统计,在不成功的软件项目中有50%左右是由于计划不周造成的。应该把软件生命周期划分为若干阶段,并制定出相应的切实可行的计划,严格按照计划对开发和维护进行管理。2.坚持进行阶段评审设计的错误占软件错误的63%,编码错误只占37%。而且在后期纠正错误的代价非常高。因此,必须严格坚持阶段评审,及早发现和纠正错误3.实行严格的产品质量控制在现实中由于外部原因要求对需求等进行修改是难免的。但必须有严格的管理制度和措施。4.采用现代程序设计技术和软件工程技术如结构化程序分析(StructuredAnalysis)和结构化设计(StructuredDesign)等。5.结果应能清楚地审查由于软件是一种看不见摸不着的逻辑产品,对它的检验和审查很困难。因此,应提供可视化的检验标准和方法。6.开发人员应少而精软件开发小组的人员应该是素质高,人员不宜过多。人员素质低和人员过多,都会导致软件的错误率高,且开发效率下降,成本增加。7.承认不断改进软件工程的必要性软件工程是一门不断迅速发展的学科,必须学习和跟踪先进的技术和方法,也要不断总结经验、改进方法,要不断进行技术创新。四、软件生命周期软件生命周期是从时间的角度出发,从软件目标的提出、定义、开发、维护,直到最终被丢弃的整个过程。计划时期→开发时期→运行时期1.计划时期问题的定义:提出软件项目的目标和规模可行性研究:对项目进行可行性调研和论证,确定项目是否能够或者值得开发2.开发时期开发时期要具体分析、设计和实现计划时期定义的软件。需求分析:做什么概要设计:建立目标系统的总体结构详细设计:怎样做编码:选择程序设计语言进行描述。测试:单元测试、综合测试、确认测试和系统测试或者验收测试。3.运行时期交付使用→维护工作维护的主要任务:通过各种必要的维护活动延长系统的生命周期。软件开发的原则与方法结构化软件开发的原则结构化:用一组规范的步骤、准则和工具来进行工作最成熟、最广泛的方法(1)用户参与(2)先逻辑,后物理(3)自顶向下逐步求精功能分解与抽象(4)工作成果描述标准化软件开发的方法(1)系统流程图(2)结构分析法(3)结构化设计法(4)数据结构法(5)层次输入—处理—输出方法(HIPO法)一、问题定义问题是指用户的基本要求,就是确切地定义用户要求解决的问题,即确定问题的性质、工程的目标和规模。问题定义的目的是要在短时间内,对用户的要求有一个比较准确的估计,对要实现的系统规模做到心中有数。但仅有这些还不够,还要搞清用户不打算干什么,在这个系统中哪些内容不用实现。工作的宗旨是搞清要做什么并划清要实现的系统的范围边界。在问题定义阶段,分析员应尽可能站在较高的角度去抽象、概括所要做的事情。分析员对问题有了明确认识之后,应该把自己的认识写成书面报告,提交给用户和使用部门的负责人审查,以检验分析员对所要解决的问题的理解是否正确。因为分析员对问题的理解为今后开发工作确定了方向。分析员对问题理解正确与否,关系到系统成败。问题定义(续)在问题定义阶段,分析员应该对工程成本做出粗略的预算,并对下阶段可行性研究所需要时间和成本做出较精确的估计。对问题定义的书面报告应该尽可能清楚简洁,最好写在一页内。这份报告通常应包括工程项目的名字,对问题概括定义、项目的目标,项目的规模,对可行性研究的具体建议(既需要用的时间和成本)等等。一旦分析员和用户及使用部门的负责人对所要解决的问题,取得完全一致的看法且在报告书上签了字,问题定义阶段工作就宣告完成,可行性研究就可以开始。二、可行性研究可行性研究就是分析员站在较高的角度去调查现行系统及用户提出的目标,并寻找是否有一种手段能够在现有条件下实际地达到项目目标。同时向用户指出该系统实现的意义,使用户去权衡花费这样的代价去实现这样的系统是否值得。可行性研究的目的就是用最小的代价在尽可能短的时间内,确定问题是否能够解决,从而确定问题是否值得去解。如何才能达到这个目的呢?进行客观分析,通过对几种可能解法,分析其利弊,才能判断原定系统的目标和规模是否现实,系统带来的效益是否大到值得投资开发这个系统。因此,可行性研究实质上是进行一个大大压缩简化了的软件分析和设计过程,也就是在较高层上,以较抽象的方式进行软件分析和设计的过程。可行性研究应在以下三方面进行:①技术可行性;②经济可行性;③操作可行性。可行性研究(续)1.技术可行性对技术可行性研究,首先应从对现行系统进行调查入手。因为现行系统是信息的重要来源。新的目标系统必须能完成现行系统的基本功能;另一方面,新系统必须能解决旧系统中存在的问题。所以,应先对现行系统的组成部分、功能和存在问题进行调查研究。但这种调查研究不可能做得很细,对一些内容细节必须先暂时忽略,抓住主要的问题。此时,分析员应把调查到的现行系统的情况画成高层数据流程图。其次,导出新系统的高层逻辑模型(数据流程图)。新系统的高层的逻辑模型建立在现行系统的高层数据流程图的基础上。因为通过前一步的工作,分析员对目标系统(新系统)应该具的基本功能和所受的约束,已有一定的了解,使用数据流程图描绘数据在系统中流动和处理的情况,从而概括地表达出对新系统的设想。用数据流程图和数据字典来定义新系统的高层逻辑模型。可行性研究(续)其三,重新定义问题。新系统的逻辑模型实质上表达了分析员对新系统必须做什么的看法。此时,分析员应该和用户一起复查问题定义、工程规模和目标。这次复查应该把数据流程图和数据字典作讨论的基础。如果分析员对问题有误解或者用户曾经遗漏了某些要求,那么现在是发现和改正这些错误的时候了。其四,导出供选择的解法。分析员应从他所建议的系统逻辑模型出发,推导出若干个较高层次的解决办法,供比较和选择。最简单的途径,是从技术角度出发,考虑解决问题的不同方案。这些不同方案可以在数据流程图上划分不同的自动化边界而得到。所以分析员在确定了几组不同的自动化边界之后,再针对每组边界,考虑如何
本文标题:5软件工程基础
链接地址:https://www.777doc.com/doc-162507 .html