第13章_软件工程与程序设计基础知识

合集下载

第13章软件工程标准

第13章软件工程标准

对于使用文档的人员而言他们所关心的文件的种类 随他们所承担的工作而异。
管理人员:可行性分析(研究)报告, 项目开发计划, 软件配置管理计划, 软件质量保证计划, 开发进度月报, 项目开发总结报告;
用 户: 软件产品规格说明, 软件版本说明, 用户手册, 操作手册。
开发人员: 软件需求规格说明, 接口需求规格说明, 软件(结构)设计说明, 接口设计说明书, 数据库(顶层)设计说明, 测试计划, 测试报告;
问题的出现
软件需求中存在的模糊以及需求的变更,影响着软件产品的质量。 目前广为采用的手工开发方式难于避免出现差错。 软件开发过程中各个环节的接口处不易保证正确性。 软件测试技术具有局限性。 软件质量管理的实际困难。 软件质量指标许多尚未量化。 目前许多软件机构的产品质量责任尚未落实到人 不规范的开发习惯难于纠正。 人员之间的沟通容易出现问题。 软件项目组中人员流动会影响产品质量。
ISO 9000系列标准与GB/T 19000
直到1987年公布的ISO 9000系列标准,是国际上影响 最为深远的质量管理标准当属国际标准化组织。这一国际标 准发源于欧洲经济共同体,但很快就波及美国、日本及世界 各国。中国对此也十分重视,采取了积极态度。一方面确定 对其等同采用,发布了与其相应的质量管理国家标准系列 GB/T 19000。
的软件工程规范。
二、软件质量认证
1. 软件质量认证的产生背景 2. 软件质量认证的标准 3. 软件质量认证的作用 4. ISO9000标准的构成
1、软件质量认证的产生背景
软件产品的质量直接影响到国民经济信息系统和国际装 备系统的可靠性与安全运行,在国内外软件市场激烈的竞争 中,提高软件质量已经成为一个软件企业生存发展的关键问 题,软件企业或从事软件工程项目的机构在实践工作中在软 件质量问题上应认识到,软件自身的特点和目前软件开发模 式,使隐藏在软件内部的质量缺陷是不可避免

软件工程基础知识

软件工程基础知识

考点1 软件工程基本概念【考点精讲】1.软件定义与软件特点软件指的是计算机系统中与硬件相互依存的另一部分,包括程序、数据和相关文档的完整集合。

程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令序列。

数据是使程序能正常操纵信息的数据结构。

文档是与程序的开发、维护和使用有关的图文资料。

可见,软件由两部分组成:(1)机器可执行的程序和数据;(2)机器不可执行的,与软件开发、运行、维护、使用等有关的文档。

根据应用目标的不同,软件可分应用软件、系统软件和支撑软件(或工具软件)。

名称 描述应用软件为解决特定领域的应用而开发的软件系统软件计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件支撑软件(或工具软件)支撑软件是介于两者之间,协助用户开发软件的工具性软件2.软件工程为了摆脱软件危机,提出了软件工程的概念。

软件工程学是研究软件开发和维护的普遍原理与技术的一门工程学科。

所谓软件工程是指,采用工程的概念、原理、技术和方法指导软件的开发与维护。

软件工程学的主要研究对象包括软件开发与维护的技术、方法、工具和管理等方面。

软件工程包括3个要素:方法、工具和过程。

名称 描述方法方法是完成软件工程项目的技术手段工具工具支持软件的开发、管理、文档生成过程过程支持软件开发的各个环节的控制、管理考点2 软件生命周期【考点精讲】1.软件生命周期概念软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期。

一般包括可行性分析研究与需求分析、设计、实现、测试、交付使用以及维护等活动,如图3-1所示。

1软件生命周期分为3个时期共8个阶段,(1)软件定义期:包括问题定义、可行性研究和需求分析3个阶段;(2)软件开发期:包括概要设计、详细设计、实现和测试4个阶段;(3)运行维护期:即运行维护阶段。

软件生命周期各个阶段的活动可以有重复,执行时也可以有迭代,如图3-1所示。

2.软件生命周期各阶段的主要任务图3-1 软件生命周期在图3-1中的软件生命周期各阶段的主要任务是:任务 描述问题定义确定要求解决的问题是什么可行性研究与计划制定决定该问题是否存在一个可行的解决办法,指定完成开发任务的实施计划需求分析对待开发软件提出需求进行分析并给出详细定义。

学堂在线_清华大学_软件工程_第十三章 软件系统测试

学堂在线_清华大学_软件工程_第十三章 软件系统测试

测试的局限性
测试的不彻底性
• 测试只能说明错误的存在,但不能说明错误不存在 • 经过测试后的软件不能保证没有缺陷和错误
测试的不完备性
• 测试无法覆盖到每个应该测试的内容 • 不可能测试到软件的全部输入与响应 • 不可能测试到全部的程序分支的执行路径
测试作用的间接性
• 测试不能直接提高软件质量,软件质量的提高要依靠开发 • 测试通过早期发现缺陷并督促修正缺陷来间接地提高软件质量
单元测试
单元测试(Unit Testing)是对软件基本组成单元进行的测试,其测试对象是软件 设计的最小单位(模块或者类)。
单元测试
单元测试
单元测试
单元测试
单元测试
单元测试一般由编写代码的开发人员执行,用于检测被测代码的功能是否正确。
集成测试
集成测试(Integration Testing)是在单元测试的基础上,将所有模块按照总体 设计的要求组装成为子系统或系统进行的测试。
• 组织测试团队 • 设计测试用例 • 开发测试工具和脚本 • 准备测试数据
• 获得测试版本 • 执行和实施测试 • 记录测试结果 • 跟踪和管理缺陷
• 分析测试结果 • 评价测试工作 • 提交测试报告
软件测试活动
规格说明书 审查
系统和程序 设计审查
单元测试 单元测试
功能规格
软件测试概念
清华大学软件学院 刘强
关于软件质量的问题
The average software product released on the market is not error free.
Win98 发布日的尴尬
“Bug”的由来
“Bug”的由来
Grace Murray Hopper

程序设计基础知识点

程序设计基础知识点

第三部分程序设计基础程序、程序设计、程序设计语言的定义⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列.⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分.程序设计往往以某种程序设计语言为工具,给出这种语言下的程序.程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段.⑶程序设计语言:程序设计语言用于书写计算机程序的语言.语言的基础是一组记号和一组规则.根据规则由记号构成的记号串的总体就是语言.在程序设计语言中,这些记号串就是程序.程序设计语言有3个方面的因素,即语法、语义和语用.高级语言和低级语言的概念及区别⑴高级语言:高级语言High-level programming language是高度封装了的编程语言,与低级语言相对.它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示例如汉字、不规则英文或其他外语,从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容.⑵低级语言:低级语言分机器语言二进制语言和语言符号语言,这两种语言都是面向机器的语言,和具体机器的指令系统密切相关.机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序.⑶区别:高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差了解知识:CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码.越低级的语言,形式上越接近机器指令,语言就是与机器指令一一对应的.而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,使编写程序的过程更符合人类的思维习惯,并且极大了简化了人力劳动.也就是说用高级语言写一句,会被转换成许多底层操作,大部分的工作交给了负责转换的机器即编译器,从而人力得到了解放.编译程序的概念及作用⑴编译程序Compiler,compiling program也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序.⑵作用:它以高级程序设计语言书写的源程序作为输入,而以语言或机器语言表示的目标程序作为输出.计算机求解问题的过程分析问题确定计算机做什么→设计算法寻找解决问题的途径和方法,即要计算机怎么做→编写程序将算法翻译成计算机程序设计语言→上机运行和测试程序正确性的含义程序正确性证明就是采用严格的数学方法评价一个程序是否达到了预定的性能,即对于任何一组允许的输入信息,程序执行后能得到一组和这组信息对应的正确的输出信息.程序错误的几种类型程序错误,即英文的Bug,也称为缺陷,是指在软件运行中因为程序本身有错误而造成的功能不正常、死机、数据丢失、非正常中断等现象.⑴语法错误⑵逻辑错误程序调试、程序测试的概念以及区别⑴程序调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程.这是保证计算机信息系统正确性的必不可少的步骤.编完计算机程序,必须送入计算机中测试.⑵程序测试:program testing是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行.了解知识:程序测试的方法灰盒测试,确实是介于白盒测试与黑盒测试之间的,可以这样理解,灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不象白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法.白盒测试,又称结构测试.他的前提是可以把程序看成在一个透明的白盒子里,测试者完全知道程序的结构和处理算法.这种方法按照程序内部逻辑设计测试用例,检测程序中的主要执行通路是否能按照预定要求正确工作.白盒测试根据软件的内部逻辑设计设施用例,常用的技术是逻辑覆盖,即考察用测试数据运行被测程序是对程序逻辑的覆盖程度.主要的覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、组合条件覆盖和路径覆盖.黑盒测试根据关键需求说明书所规定的功能来设计测试用例,它不考虑软件的内部结构和处理算法.常用的黑盒测试技术包括等价类划分、边值分析、错误推测和因果图等.⑶区别:①目的不同软件测试的目的是发现错误,至于找出错误的原因和错误发生的地方不是软件测试的任务,而是调试的任务.调试的目的是为了证明程序的正确,因此它必须不断地排除错误.它们的出发点不一样.前者是挑错,是一种挑剔过程,属于质盘保证活动.后者是排错,是一种排除过程,是编码活动的一部分.②指导原则和方法不同软件测试的输出是预知的,其软件测试用例必须包括预期的结果,而调试的输出大多是不可预见的,需要调试者去解释、去发现产生的原因.③操作者不同因为心理状态是软件测试程序的障碍,所以执行软件测试的人一般不是开发人员,以使软件测试更客观、更有效,而调试人员一般都是开发人员.结构化程序设计概念及类型结构化程序设计structured programming是进行以模块功能和处理过程设计为主的详细设计的基本原则.结构化程序设计的三种基本结构是:顺序结构、选择结构和循环结构.顺序结构表示程序中的各操作是按照它们出现的先后顺序执行的.选择结构表示程序的处理步骤出现了分支,它需要根据某一特定的条件选择其中的一个分支执行.选择结构有单选择、双选择和多选择三种形式.循环结构表示程序反复执行某个或某些操作,直到某条件为假或为真时才可终止循环.在循环结构中最主要的是:什么情况下执行循环哪些操作需要循环执行循环结构的基本形式有两种:当型循环和直到型循环.当型循环:表示先判断条件,当满足给定的条件时执行循环体,并且在循环终端处流程自动返回到循环入口;如果条件不满足,则退出循环体直接到达流程出口处.因为是"当条件满足时执行循环",即先判断后执行,所以称为当型循环.直到型循环:表示从结构入口处直接执行循环体,在循环终端处判断条件,如果条件不满足,返回入口处继续执行循环体,直到条件为真时再退出循环到达流程出口处,是先执行后判断.因为是"直到条件为真时为止",所以称为直到型循环.面向对象程序设计概念面向对象编程Object OrientedProgramming,OOP,面向对象程序设计是一种计算机编程架构.OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成.OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性.为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息.面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递.通过这些概念面向对象的思想得到了具体的体现.ASCII字符集ASCIIAmerican Standard Code for Information Interchange,美国标准信息交换代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言.它是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646.标准ASCII 码也叫基础ASCII码,使用7 位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号, 以及在美式英语中使用的特殊控制字符.大小规则1数字0~9比字母要小.如"7"<"F";2数字0比数字9要小,并按0到9顺序递增.如"3"<"8"3字母A比字母Z要小,并按A到Z顺序递增.如"A"<"Z"4同个字母的大写字母比小写字母要小.如"A"<"a".记住几个常见字母的ASCII码大小:“换行LF”为10;“回车CR”为13;空格为32;"0"为48; "A"为65;"a"为97.标识符、关键字的概念在编程语言中,标识符就是程序员自己规定的具有特定含义的词,比如类名称,属性名称,变量名等.关键字就是程序发明者规定的有特殊含义的单词,又叫保留字 .注释语句的作用注释语句在程序的开始或中间,不具有任何功能实现的作用,仅仅是对程序进行说明的语句.注释语句在程序运行过程中不运行,却是程序编写时的重要内容,对于理解程序很重要.表达式的组成及类型表达式,是由数字、算符、数字分组符号括号、自由变量和约束变量等以能求得数值的有意义排列方法所得的组合.类型:算术表达式:是最常用的表达式,又称为数值表达式.它是通过算术运算符来进行运算的数学公式.加法、减法、乘法、除法、求余关系表达式:用关系运算符将两个表达式连接起来的式子,称关系表达式.关系表达式的值是逻辑值“真”或“假”.=等于、<小于、<=小于等于、>大于、>=大于等于、<>不等于逻辑表达式:用逻辑运算符将关系表达式或逻辑量连接起来的有意义的式子称为逻辑表达式.逻辑表达式的值是一个逻辑值,即“true”或“false”.NOT非、AND与、OR或子程序和函数的概念子程序:在计算机科学中,子程序英语:Subroutine, procedure, function, routine, method, subprogram, callable unit,是一个大型程序中的某部份代码,由一个或多个语句块组成.它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性.函数:在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用.要善于利用函数,以减少重复编写程序段的工作量.许多程序设计语言中,可以将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,所以,函数也可以说是许多代码的集合,这就是程序中的函数.数据、数据元素、数据对象、数据项的概念数据:数据就是数值,也就是我们通过观察、实验或计算得出的结果.数据有很多种,最简单的就是数字.数据也可以是文字、图像、声音等.数据可以用于科学研究、设计、查证等.数据元素:数据元素data element是计算机科学术语.它是数据的基本单位,数据元素也叫做结点或记录.在计算机程序中通常作为一个整体进行考虑和处理.有时,一个数据元素可由若干个数据项组成,例如,一本书的书目信息为一个数据元素,而书目信息的每一项如书名、作者名等为一个数据项.数据项是数据的不可分割的最小单位.数据对象:Data Object是性质相同的数据元素的集合,是数据的一个子集,数据对象是一种运行时的概念.可以是外部实体例如,产生或使用信息的任何事物、事物例如,报表、行为例如,打电话、事件例如,响警报、角色例如,教师、学生、单位例如,会计科、地点例如,仓库或结构例如,文件等.总之,可以由一组属性来定义的实体都可以被认为是数据对象.数据项:数据项又称数据元素data element,是数据的基本单位,一个数据可由若干个数据项data item组成,数据项是数据的不可分割的最小单位.数据的逻辑结构、存储结构数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构.逻辑结构形式地定义为K,R或D,S,其中,K是数据元素的有限集,R是K上的关系的有限集.了解知识:逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构.表和树是最常用的两种高效数据结构,许多高效的算法能够用这两种数据结构来设计实现.表是线性结构的全序关系,树偏序或层次关系和图局部有序weak/local order是非线性结构.数据结构在计算机中的表示映像称为数据的物理存储结构.它包括数据元素的表示和关系的表示.数据运算数据运算是对数据依某种模式而建立起来的关系进行处理的过程.最基本的数据运算有:①算术运算,如:加、减、乘、除、乘方、开方、取模等;②关系运算,如:等于、不等于、大于、小于等;③逻辑运算,如:与、或、非、恒等、蕴含等.数据结构的两大逻辑结构和四种常用的存储表示方法数据的逻辑结构分两大类:线性结构和非线性结构了解知识:线性结构是一个有序数据元素的集合.常用的线性结构有:线性表,栈,队列,双队列,数组,串.常见的非线性结构有:二维数组,多维数组,广义表,树二叉树等,图.数据的存储方法有四种:顺序存储方法、链接存储方法、索引存储方法和散列存储方法了解知识:1顺序存储方法:该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现.由此得到的存储表示称为顺序存储结构Sequential Storage Structure,通常借助程序语言的数组描述.该方法主要应用于线性的数据结构.非线性的数据结构也可通过某种线性化的方法实现顺序存储.2链接存储方法:该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示.由此得到的存储表示称为链式存储结构Linked Storage Structure,通常借助于程序语言的指针类型描述.3索引存储方法:该方法通常在储存结点信息的同时,还建立附加的索引表.索引表由若干索引项组成.若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引Dense Index.若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引Spare Index.索引项的一般形式是:关键字、地址关键字是能唯一标识一个结点的那些数据项.稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置.4散列存储方法:该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址.四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像.同一逻辑结构采用不同的存储方法,可以得到不同的存储结构.选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求.算法和程序的关系算法是对特定问题求解步骤的描述,它是指令的有限序列.算法与程序的关系:算法和程序都是指令的有限序列 ,但是,程序是算法,而算法不一定是程序.算法和程序的区别主要在于:1 在语言描述上,程序必须是用规定的程序设计语言来写,而算法很随意;2 在执行时间上,算法所描述的步骤一定是有限的,而程序可以无限地执行下去.所以:程序 = 数据结构 + 算法常用数据类型种类及特性不同的变成语言,数据类型的说法有差异.一般而言包含:数字型或者数值型,常有 Integer整型、Long 长整型、Single单精度浮点型、Double双精度浮点型和 Currency货币型.文本型:常有String 字符串型逻辑型:若变量的值只是“true/false”、“yes/no”、“on/off”信息,则可将它声明为Boolean 类型.常量和变量的概念“常量”在程序运行时,不会被修改的量.换言之,常量虽然是为了硬件、软件、编程语言服务,但是它并不是因为硬件、软件、编程语言而引入.变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念.变量可以通过变量名访问.字符串的概念及应用字符串或串String是由数字、字母、下划线组成的一串字符.一般记为 s=“a1a2···an”n>=0.它是编程语言中表示文本的数据类型.在程序设计中,字符串string为符号或数值的一个连续序列,如符号串一串字符或二进制数字串一串二进制数字.数组、数组元素、下标变量数组:就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标.组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量.数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式.这些按序排列的同类数据元素的集合称为数组.数组元素是组成数组的基本单元.数组元素也是一种变量, 其标识方法为数组名后跟一个下标.下标表示了元素在数组中的顺序号.数组元素通常也称为下标变量.了解知识:数组元素的一般形式为:数组名下标,其中下标只能为整型常量或整型表达式.。

软件工程知识点总结

软件工程知识点总结

软件工程(简要知识点)一、. 软件过程五个模型对比(瀑布模型、快速原型、增量、螺旋、喷泉模型)二、可行性研究:1、任务:用最小的代价在尽可能短的时间内确定问题是否能够解决。

2、四个方面:技术、经济、操作可行性、法律3、数据流图四种成分:1、源点/终点2、处理3、数据存储4、数据流三、需求分析:1、任务:确定系统必须完成哪些工作,对目标系统提出完整、清晰、具体的要求。

2、结构化方法就是面向数据流自顶向下逐步求精进行需求分析的方法。

3、实体联系图:1、数据对象2、属性3、联系(1:1、1:N 、M:N )四、总体设计:1.任务:回答“概括的说,系统应该如何实现”,用比较抽象概括的方式确定系统如何完成预定的任务,也就是说应该确定系统的物理配置方案,并且进而确定组成系统的每个程序结构。

2. 系统设计阶段(确定系统具体实施方案)、结构设计阶段(确定软件结构)3.模块独立:内聚和耦合4. 耦合表示一个软件结构内各个模块之间的互连程度,应尽量选用松散耦合的系统 问题定义(确定题目)可行性研究需求分析 概要设计详细设计编码和单元测试 综合测试系统设计 系统实现 软件定义 软件开发 运行维护:主要任务是使软件持久地满足用户的需要软件生命周期:5. 内聚(Cohesion): 一个模块内各元素结合的紧密程度6.面向数据流的设计方法:变换流和事务流五、详细设计:1.任务:确定应该怎样具体的实现所要求的系统,也就是说经过这个阶段的设计工作应该得出对目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。

2.过程设计的工具(程序流程图、盒图、PAD图、判定表、判定树)七、测试:1、单元测试:又称模块测试。

每个程序模块完成一个相对独立的子功能,所以可以对该模块进行单独的测试。

由于每个模块都有清晰定义的功能,所以通常比较容易设计相应的测试方案,以检验每个模块的正确性。

2、集成测试:在单元测试完成后,要考虑将模块集成为系统的过程中可能出现的问题,例如,模块之间的通信和协调问题,所以在单元测试结束之后还要进行集成测试。

软件工程各章名词解释

软件工程各章名词解释

名词解释一个三分 五个十五分第一章 绪论1. 软件2. 文档3. 软件工程4. 软件工程过程5. 软件生存周期6. 软件生存周期模型第二章 软件可行性研究与项目开发计划1. 投资回收2. 纯收人第三章 软件需求分析1. 需求分析2. 数据流3. 数据字典4. 加工5. 数据流图第四章 软件概要设计1. 模块2. 模块化3. 抽象4. 信息隐蔽5. 模块独立性6. 耦合性7. 无直接耦合8. 数据耦合9. 标记耦合10. 控制耦合11. 公共耦合12. 内容耦合13. 内聚性14. 偶然内聚15. 逻辑内聚16. 时间内聚17. 通信内聚18. 顺序内聚19. 功能内聚第五章 软件详细设计1. PAD2. 过程设计语言(PDL)第六章 软件编码1. 程序设计风格2. 程序可移植性第七章 软件测试1. 语句覆盖2. 判定覆盖3. 条件覆盖4. 判定/条件覆盖5. 条件组合覆盖6. 路径覆盖7. 环路复杂性8. 黑盒测试9. 白盒测试10. 驱动模块11. 桩模块12. 单元测试13. 集成测试14. 确认测试15. 调试第八章 软件维护1. 维护2. 校正性维护3. 适应性维护4. 完善性维护5. 预防性维护6. 软件可维护性第九章 软件开发的增量模型1. 原型第十章 面向对象的方法1. 对象2. 类3. 消息4. 方法5. 继承性6. 单重继承7. 多重继承8. 多态性9. 抽象10. 信息隐藏11. 链12. 关联第十一章 软件质量与质量保证1. 软件可靠性2. 效率3. 可维护性4. 可移植性5. 可互操作性6. 适应性7. 可重用性8. 软件设计质量9. 软件程序质量10. 冗余第十二章 软件工程管理1. 软件配置管理2. 软件配置项3. 基线4. 文档第十三章 软件开发环境1. 软件开发环境2. 软件工具3. CASE4. CASE生存期5. CASE工作台软件工程自考名词解释答案第一章 绪论1. 计算机程序及其说明程序的各种文档.2. 文档是有关计算机程序功能,设计,编制,使用的方案或图形资料.3. 用科学知识和技术原理来定义,开发,维护软件的一门学科.4. 软件工程过程规定了获取,供应,开发,操作和维护软件时,要实施的过程,活动和任务.5. 软件生存周期是指一个软件从得出开发要求开始直到该软件报废为止的整个时期.6. 软件生存周期模型是描述软件开发过程中各种活动如何执行的模型.第二章 软件可行性研究与项目开发计划1. 投资回收期就是使累计的经济效益等于最初的投资费用所需的时间.2. 在整个生存周期之内的累计经济效益(折合成现在值)与投资之差.第三章 软件需求分析1. 需求分析是指开发人员要准确理解用户的要求,进行细致的调查分析,将用户非不甘落后将用户非不甘落后 需求陈述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程.2. 数据流是数据在系统内传播的路径,因此由一组成分固定的数据项组成.3. 数据字典(Data Dic onary, 简称DD)就是用来定义数据流图中的各个成分的具体含义的,它以一种准确的,无二义性的说明方式为系统的分析,设计及维护提供了有关元素的一致的定义和详细的描述.4. 加工又称为数据处理,是对数据流进行某些操作或变换.5. 数据流图,简称DFD,是SA方法中用于表示系统逻辑模型的一种工具,它以图形的方式描绘数据在系统中流动和处理的过程.第四章 软件概要设计1. 模块在程序中是数据说明,可执行语句等程序对象的集合,或者是单独命名和编址的元素,在软件的体系结构中,模块是可组合,分解和更换的单元.2. 模块化是指解决一个复杂问题自顶向下逐层把软件系统划分成若干模块的过程.每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个要求的功能.3. 抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同的特性而暂不考虑它的细节,不考虑其他因素.4. 信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些信息的其他模块来说,是不能访问的.5. 模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单.6. 耦合性也称块间联系.指软件系统结构中各模块间相互联系紧密程序的一种度量.7. 无直接耦合指两个模块之间没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息.8. 数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递.9. 标记耦合指两个模块之间传递的是数据结构,如高级语言的数组名,记录名,文件名等这些名字即为标记,其实传递的是这个数据结构的地址.10. 控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关,标志等),被调模块通过该控制变量的值有选择地执行块内某一功能.11. 公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合.公共数据环境可是是全程变量或数据结构,共享的通信,内存的公共覆盖区及任何存储介质上的文件,物理设备等(也有将共享外部设备分类为外部耦合).12. 当一个模块直接使用另一个模块的内部数据,或通过非正常口转入另一个模块内部,这种模块之间的耦合为内容耦合.13. 内聚块又称块内联系指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量.14. 偶然内聚指一个模块内的各处理元素之间没有任何联系.15. 逻辑内聚指模块内执行个逻辑上相似的功能,通过参数确定该模块完成哪一个功能.16. 把需要同时执行的动作组合在一起形成的模块为时间内聚模块.17. 通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据.18. 顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入.19. 功能内聚指模块内所有元素共同完成一个功能,缺一不可.因此模块不能再分割.第五章 软件详细设计1. PAD图指问题分析图(Problem Analysis Diagram),是一咱算法描述工具,它是一种由左往右展开的二维树型结构.PAD图的控制流程为自上而下,从左到右地执行.2. 过程设计语言(Process Design Language,简称PDL),也称程序描述语言(Program Descrip on Language),又称为伪码.它是一种用于描述模块自法设计和处理细节的语言.第六章 软件编码1. 程序设计风格指一个人编制程序时所表现出来的特点,习惯逻辑思路等.2. 指程序从一个计算机环境移值到另一个计算机环境的容易程序.第七章 软件测试1. 语句覆盖是指设计足够的测试用例,使被测程序中每个语句至少执行一次.2. 判定覆盖指设计足够的测试用例,使得被测程序中每个判定表达式至少获得一次”真”和”假”值,从而使程序的每一个分支至少都通过一次.3. 条件覆盖指设计足够的测试用例,使得判定表达工中每个条件的各种可能的值出现一次.4. 判定/条件覆盖标准指设计足够的测试用例,使得判定表达式中的每个条件的所有可能取值至少出现一次,并使每个判定表达式所有可能的结果也至少出现一次.5. 条件组合覆盖是比较强的覆盖标准,它是指设计足够的测试用例,使得每个判定表达式中条件的各种可能的值的组合都至少出现一次.6. 路径覆盖是指设计足够的测试用例,覆盖被测程序中所有可能的路径.7. McCabe定义程序图的环路为程序图中区域的个数.区域个数为边和结点圈定的封闭区域数加上图形外的区域数1.8. 黑盒测试是功能测试又称为功能测试或数据驱动测试.9. 白盒测试是对程序中尽可能多和逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致.10. 驱动模块是用来模拟被测模块的上级调用模块的模块,功能要比真正的上级模块简单得多,它只完成接受测试数据,以上级模块调用被测模块的格式驱动被模块,接收被测模块的测试结果并输出.11. 桩模块用来代替被测试模块所调用的模块它的作用是返回被测模块所需的信息.12. 单元测试指对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误.13. 集成测试是指在单元测试的基础上,将所有模块按照设计要求组装成一个完整的系统进行测试,故也称组装测试或联合测试.14. 确认测试又称有效性测试.是为了检查软件的功能与性能是否与需求规格说明书中确定的指标相符合所进行的测试.15. 调试是为了确定错误的原因和位置,并改正错误所进行的工作,因此调试也称为纠错.第八章 软件维护1. 在软件运行/维护阶段对软件产品所进行的修改就是维护.2. 为了识别和纠正错误,修改软件性能上的缺陷,应进行确定和修改错误的过程,这个过程就称为校正性维护.3. 随着计算机的飞速发展,计算机硬件,软件及数据环境在不断发生变化,为了使应用软件适应这种变化而修改软件的过程称为适应性维护.4. 在犯罪分子件运行时期中,用户往往会对软件提出新的功能要求与性能要求.这种增加软件功能,增强软件性能,提高软件运行效率而进行的维护活动称为完善性维护.5. 为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护.6. 软件可维护性是指软件能够被理解,校正,适应及增强功能的容易程度.第九章 软件开发的增量模型1. 软件开发中的原型是软件的一个早期可运行的版本,它反映了最终系统的重要特性.第十章 面向对象的方法1. 对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则,计划或事件.2. 具有相同或相似性质的对象的抽象就是类具有相同或相似性质的对象的抽象就是类3. 对象之间进行通信的构造叫做消息.4. 类中操作的实现过程叫做方法,一个方法有方法名,参数,方法体.5. 继承性是子类自动共享父类数据结构和方法的机制这是类之间的一种关系.6. 在类层次中,子类只继承一个父类的数据结构和方法,称为单重继承.7. 在类层次中,子类继承了多个父亲的数据结构和方法,称为多重继承.8. 多态性是指相同的操作或函数,过程可作用于多用户种类型的对象上并获得不同结果.不同的对象收到同一消息可以产生不同的结果,这种现象称为多态性.9. 抽象是指强调实体的本质,内在的属性,忽略一些无关紧要的属性.10. 信息隐蔽是指所有软件部件内部都有明确的范围以及清楚的外部边界每个软件部件都有友好的界面接口,软件部件的内部实现与外部可访问性分离.11. 链表示对象间的物理与概念联结.12. 关联表示类之间的一种关系,就是一些可能的链的集合.第十一章 软件质量与质量保证1. 软件按照设计要求,在规定时间和条件下不出故障,持续运行的程度.2. 为了完成预定功能,软件系统所需的计算机资源和程序代码数量的程度.3. 找到并改正程序中的一个错误所需代价的程度.4. 将一个软件系统从一个计算机系统或环境移植到另一个计算机系统或环境中运行时所需的工作量.5. 将一个系统耦合到另一个系统所需的工作量.6. 修改或改进一个已投入运行的软件所需工作量的程度.7. 一个软件能再次用于其他相关应用的程度.8. 设计的规格说明书要符合用户的要求.9. 程序要按照设计规格说明所规定的情况正确执行.10. 冗余是指实现系统规定功能是多余的那部分资源,包括硬件,软件,信息和时间.第十二章 软件工程管理1. 软件配置管理,简称SCM,是一组管理整个软件生存期各阶段中变更的活动是一组管理整个软件生存期各阶段中变更的活动2. 软件配置项是软件工程中产生的信息项,它是配置管理的基本单位.3. 基线是软件生存期中各开发阶段的一个特定点,它的作用是把开发各阶段工作的划分更加明确化,使本来连续的工作在这些点上断开,以便于检查与肯定阶段成果.4. 文档是指某种数据媒体和其中所记录的数据.在软件工程中,文档用来表示对需求,工程或结果进行描述,定义,规定,报告或认证的任何书面或图示的信息.它们描述和规定了软件设计和实现的细节,说明使用软件的操作命令.第十三章 软件开发环境1. 软件开发环境是相关的一组软件工具集合,它支持一定的软件开发方法或按照一定的软件开发模型组织而成.2. 软件工具是指为支持计算机软件的开发,维护,模拟,移植或管理而研制的程序系统.3. CASE是一组工具和方法的集合,可以辅助软件开发生命周期各阶段进行软件开发.4. 一个组织中的CASE系统从被始需求到完全废弃这一生存期.5. 一个CASE工作台是一组工具集,支持像设计,实现或测试等特定的软件开发阶段.。

程序设计基础

程序设计基础

程序设计基础
程序设计基础可以理解为计算机编程的基础知识和技能。

它包括了一系列概念、原理、语法和技巧,用于编写计算机程序。

学习程序设计基础通常需要掌握以下内容:
1. 编程语言:选择一门合适的编程语言进行学习,比如C、C++、Python、Java等。

不同的编程语言有不同的特点和用途,初学者可以选择一门容易上手的语言进行学习。

2. 编程概念:了解基本的编程概念,如变量、数据类型、算术运算、逻辑运算、条件
语句、循环语句、函数等。

这些概念是编程的基础,掌握它们可以更好地理解和编写
程序。

3. 数据结构:学习不同的数据结构,如数组、链表、栈、队列、树、图等。

了解数据
结构可以帮助我们更有效地组织和管理数据,提高程序的性能和效率。

4. 算法设计:学习常见的算法设计和分析方法,如递归、分治、动态规划等。

了解算
法可以帮助我们解决实际问题,提供高效的解决方案。

5. 软件工程:学习软件工程的基本原理和方法,如需求分析、设计、编码、测试和维
护等。

了解软件工程可以帮助我们更好地组织和管理程序开发过程,提高程序的质量
和可维护性。

除了上述内容,学习程序设计基础还需要进行实践,通过编写实际的程序来加深理解
和掌握。

可以选择一些简单的编程项目进行练习,逐步提升自己的编程能力。

同时,
阅读相关的编程书籍、在线教程和参与编程社区也是很有帮助的。

第13章 软件工程管理

第13章 软件工程管理

a 4m b L 6
6
一、代码行技术(续)
优点:代码行较容易计算,现有许多软件估算模型基 于代码行 缺点: 仅用代码行代表整个软件不太合理; 用不同语言实现时代码行差别很大; 不适用于非过程语言。
7
13.1 度量软件规模(续)
二、功能点技术 功能点技术依据对软件信息域特性和软件复杂 性的评估结果,估算软件规模。这种方法用功能点 (FP)为单位,度量软件的规模。
25
三、COCOMO模型(续) (3)详细COCOMO模型(COCOMO2):
估算公式
E a KLOC f i
b i 1
17
,T=3.0E0.33+0.2×(b-1.01)
其中E=开发所需的人力(人月); a=模型系数(开发模式:组织式、嵌入式、半独立式); KLOC=估计的代码行数; b=模型指数(对应着开发模式); fi(i=1…17)是成本因素,包括生产因素、计算机因素、人员因素、工程 因素等17个方面。
9
二、功能点技术(续)
2、估算功能点的步骤 (1)计算未调整的功能点数UFP 把产品信息域的每个特性(即Inp、Out、Inq、Maf和Inf) 都分类成简单级、平均级或复杂级。根据其等级,为每个特 性都分配一个功能点数。用下式计算未调整的功能点数UFP UFP=a1×Inp+a2×Out+a3×Inq+a4×Maf+a5×Inf其中, ai(1≤i≤5)是信息域特性系数,其值由相应特性的复杂级 别决定,如表13.1所示。
26
三、COCOMO模型(续)
模型系数 开发模式 组织式 半独立式 嵌入式 模型系数 a 3.2 3.0 2.8
27
三、COCOMO模型(续) COCOMO2采用了更加精细得多的b分级模型,这个模 型使用5个分级因素Wi(1≤i≤5): 划分成从甚低(Wi=5) 到特高(Wi=0)的6个级别 b= 1.01 1.01 Wi b的取值范围为1.01~1.26。 5个分级因素如下所述: (1) 项目先例性: 该项目的新奇程度。 (2) 开发灵活性: 约束多少。 (3) 风险排除度: 重大风险已被消除的比例。 (4) 项目组凝聚力: 开发人员相互协作度。 (5) 过程成熟度: 按照能力成熟度模型

第13章 面向对象软件开发方法

第13章  面向对象软件开发方法
2012/4/25
面象对象程序设计
第13章 面向对象软件开发方法
2. 建立设计模型 在建立设计模型阶段,首先对分析模型进行详细分析 和阐述并且奠定实现的基础,从分析模型的面向客观边界 的观点转到面向实现的计算机观点上来。设计活动在两个 抽象级别上进行,其一是,系统设计,其二是,对象设计。 系统设计着重于构建一个完全的软件产品或得到一个系统 所需的软件布局。对象设计强调具体对象的详细结构。 系统设计的步骤如下。 (1) 将系统分解为各子系统; (2) 确定问题中固有的并发性; (3) 将各子系统分配给处理器及任务;
13.1.2 面向对象的OMT方法
OMT是对象建模技术( Object Modeling Technique ) 的简称,是由Rambaugh. J 及其同事首先提出的。OMT 是一种软件工程方法学,支持整个软件生存期。该方法覆 盖了问题构成、分析、设计和实现等阶段。OMT方法学提 供了组织开发的过程,这种过程使用一些协调技术完成系 统的演化,它的基础是开发系统的3种模型,然后对这3种 模型加以细化和优化,最后构成设计。其中,对象模型由 系统中的对象及其关系组成,动态模型描述系统中对象对 事件的响应及对象间的相互作用,功能模型则确定对象值 上的各种变换及变换上的约束。下面分别对分析和设计的 活动进行介绍。
2012/4/25
面象对象程序设计
第13章 面向对象软件开发方法
2. 建立设计模型 在Coad方法中,设计模型是在分析模型的基础上建立 起来的。Coad方法的设计模型由4类部件构成,对它们的 设计活动形成了相当于传统设计方法的总体设计的内容。 其中,每个部件的设计又分为主题词、对象和类、结构、 属性及外部服务5个层次。它们是和在分析模型中对这5个 层次的识别活动对应的。这5个层次从纵向反映了系统模 型的渐进和迭代的建模过程,而4类部件的设计从横向反 映了系统模型的组成。设计模型可以用一个二维的矩阵来 表示,如图13.1所示。

2020年10月自考计算机专业《软件工程》自学课件第十三章 软件项目管理

2020年10月自考计算机专业《软件工程》自学课件第十三章 软件项目管理
E=5.5+0.73×(KLOC)1.16 (3)Boehm简单模型
E=3.2×(KLOC)1.05 (4)Doty模型(在KLOC>9的情况下)
E=5.288×(KLOC)1.047
2. 面向FP的估算模型
(1)Albrecht & Gaffney模型 E=-13.39+0.0545FP
(2)Kemerer模型 E=60.62+7.728×10-8FP3
LET=23-2=21
类似地,事件9的最迟时刻为
LET=21-1=20
事件8的最迟时刻为
LET=min{21-6,20-0}=15
图13.4中每个圆圈内右下角的数字就是该事件的最迟时刻。
13.3.5 关键路径
➢ 关键路径上的事件(关键事件)必须准时发生, 组成关键路径的作业(关键作业)的实际持续时 间不能超过估计的持续时间,否则工程就不能准 时结束。
这个例子说明了工程网络比Gantt图优越的地方: 它显式地定义事件及作业之间的依赖关系,Gantt 图只能隐含地表示这种关系。但是Gantt图的形式 比工程网络更简单更直观,为更多的人所熟悉, 因此,应该同时使用这两种工具制定和管理进度 计划,使它们互相补充取长补短。
13.4 人员组织
13.4.1 民主制程序员组 民主制程序员组通常采用非正式的组织方式,
估算功能点的步骤
(1)计算未调整的功能点数UFP
UFP=a1×Inp+a2×Out+a3×Inq+a4×Maf+a5×Inf 其中,ai(1≤i≤5)是信息域特性系数
(2)计算技术复杂性因子TCF
14
DI Fi i 1
技术复杂性因子TCF由下式计算: TCF=0.65+0.01×DI
因为DI的值在0~70之间,所以TCF的值在 0.65~1.35之间。

程序设计与软件工程基础知识要点

程序设计与软件工程基础知识要点

程序设计与软件工程基础知识要点程序设计和软件工程是计算机科学的重要组成部分,它们涉及到计算机程序的设计、开发和维护。

在本文中,我们将介绍程序设计和软件工程的基础知识要点。

以下是我们将要讨论的内容:一、程序设计基础知识要点1. 算法和数据结构:程序设计的核心是算法和数据结构。

算法是解决问题的方法和步骤,而数据结构是存储和组织数据的方式。

程序员需要熟悉不同类型的算法和数据结构,并且根据问题的要求选择合适的算法和数据结构。

2. 编程语言:编程语言是程序员用来编写计算机程序的工具。

常见的编程语言包括C++、Java、Python等。

程序员需要掌握至少一种编程语言,并且熟悉其语法和特性。

3. 编程范式:编程范式是程序设计的模式或风格。

常见的编程范式包括面向对象编程、函数式编程等。

根据问题的要求,程序员可以选择合适的编程范式来开发程序。

4. 调试和测试:调试和测试是程序开发过程中的关键步骤。

调试是查找和修复程序错误的过程,而测试是验证程序的正确性。

程序员需要学会使用调试工具和编写测试用例来提高程序的质量。

二、软件工程基础知识要点1. 软件开发生命周期:软件开发生命周期是指软件从概念到退役的整个过程。

常见的软件开发生命周期模型包括瀑布模型、敏捷开发等。

了解软件开发生命周期可以帮助程序员组织和管理开发过程。

2. 需求分析和规格说明:需求分析是明确软件系统的需求和功能,规格说明是对软件系统的详细描述。

程序员需要与其他团队成员合作,了解用户需求并编写规格说明。

3. 模块化和重用:模块化是将程序划分为相互独立的模块,并且模块之间存在明确的接口和关系。

重用是指利用已有的模块来构建新的软件系统。

程序员需要编写可重用的代码,并且合理组织程序结构。

4. 软件测试和质量保证:软件测试是验证软件系统是否满足规格说明的过程,质量保证是确保软件系统达到一定质量标准的活动。

程序员需要学会编写测试用例、进行软件测试并修复问题。

总结:本文介绍了程序设计和软件工程的基础知识要点,包括程序设计中的算法和数据结构、编程语言、编程范式以及调试和测试等内容,以及软件工程中的软件开发生命周期、需求分析和规格说明、模块化和重用、软件测试和质量保证等内容。

程序设计基础 软件技术专业

程序设计基础 软件技术专业

程序设计基础软件技术专业
程序设计基础是软件技术专业的核心课程之一,它为学生进一步学习高级程序设计语言、数据结构和算法等课程奠定了坚实的基础。

这门课程通常包括以下几个方面的内容:
1. 计算机基本概念
- 计算机硬件组成
- 软件概念
- 算法和数据表示
2. 程序设计基础
- 程序设计基本思想
- 程序逻辑结构
- 常见算法和数据结构
3. 程序设计语言
- 语法和语义
- 变量、数据类型和运算符
- 控制结构(顺序、选择、循环)
- 函数和过程
- 数组、字符串和结构体
4. 程序设计实践
- 开发环境安装和使用
- 程序设计案例分析
- 程序编码和调试
通过本课程的学习,学生将掌握计算机程序设计的基本理论和方法,能够利用所学知识进行简单程序的设计和实现。

这为后续专业课程的学习以及未来的软件开发工作奠定了坚实的基础。

软件工程复习资料

软件工程复习资料

第一章概论1.软件工程的主要内容:为了有限的资金、资源和时间条件下开发满足客户要求的高质量软件,就需要研究与软件开发和管理相关的模型、方法、技术、过程、工具和环境等。

2.计算机软件:指的是计算机系统中的程序及其文档,3.程序:指的是计算任务的处理对象和处理规则的描述.4.计算任务:任何以计算机为处理工具的任务都是计算任务。

5.处理对象:是数据(如数字、文字、图形、图像、声音等,它们只是表示,而无含义)或信息(数据及相关的含义)。

6.处理规则:一般指处理的动作和步骤.7.文档:是为了便于了解程序所需的阐述性资料.8.软件工程:是应用计算机科学,数学及管理科学等原理,开发软件的工程。

软件工程借鉴传统工程的原则、方法、以提高质量、降低成本为目的。

其中,计算机科学、数学用于构造模型与算法,工程科学用于制定规范、设计范型、评估成本及确定权衡,管理科学用于计划、资源、质量、成本等管理。

9.杨芙清院士指出软件工程的框架可概括为:目标、过程和原则。

10.软件工程目标:只生产具有正确性、可用性和开销合宜的产品。

正确性:指软件产品达到预期功能的程度。

可用性:只软件基本结构、实现及文档为用户可用的程度。

开销合宜:只软件开发,运行的整个开销满足用户要求的程度。

11.软件工程原则包括围绕工程设计、工程支持和工程管理所提出的4条基本原则:(1)选取适宜的开发模型(2)采用合适的设计方法(3)提供高质量的工程支撑(4)重视软件工程的管理。

12.软件的生存周期:软件孕育、诞生、成长、衰亡的生存过程。

软件生存周期是指软件产品或软件系统从产生、投入使用到被淘汰的全过程。

软件生存周期大致可以分为6个阶段:计算机系统工程、需求分析、设计、编码、测试、运行和维护。

13.软件过程:是生产一个最终满足需求且达到工程目标的软件产品所需的步骤。

过程是活动的集合,活动是任务的集合。

14.软件过程有3层含义:(1)、个体含义:指软件产品或系统存在生存周期中的某一类活动的集合,如软件开发过程、软件管理过程等。

软件工程基础知识点总结

软件工程基础知识点总结

软件工程基础部分知识点总结知识点一软件工程的基本概念1、软件定义:是计算机系统中与硬件相互依存的另一部分;是包括程序、数据以及相关文档的完整集合..1程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令语句序列..2数据是使程序能够正常操作信息的数据结构..3文档是与程序开发、维护和使用有关的图文资料..国标GB计算机软件的定义:与计算机系统的操作相关的计算机程序、规程、规则以及可能有的文件、文档及数据..2、软件特点:1软件是一种逻辑实体;而不是物理实体;具有抽象性;是计算机的无形部分;2软件的生产与硬件不同;它没有明显的制作过程;3软件在运行、使用期间不存在磨损、老化问题;4软件的开发、运行对计算机系统具有依赖性;受计算机系统的限制;这导致了软件移植的问题;5软件复杂性高;成本昂贵;6软件开发涉及诸多的社会因素3、软件的分类:按照功能可以分为:应用软件、系统软件、支撑软件或工具软件1应用软件是为解决特定领域的应用而开发的软件..2系统软件是计算机管理自身资源;提高计算机使用效率并为计算机用户提供各种服务的软件..3支撑软件是介于系统软件和应用软件之间;协助用户开发软件的工具软件..4、软件危机:是指在软件的开发和维护过程中所遇到的一系列严重问题.. 软件危机主要体现在以下几个方面:①软件开发的实际成本和进度估计不准确②开发出来的软件常常不能使用户满意③软件产品的质量不高;存在漏洞;需要经常打补丁④大量已有的软件难以维护⑤软件缺少有关的文档资料⑥开发和维护成本不断提高;直接威胁计算机应用的扩大⑦软件生产技术进步缓慢;跟不上硬件的发展和人们需求增长5、软件工程:此概念的出现源自软件危机..软件工程是指应用计算机科学、数学及管理科学等原理;以工程化的原则和方法来开发与维护软件的学科.. 1研究软件工程的主要目的就是在规定的时间、规定的开发费用内开发出满足用户需求的高质量的软件系统高质量是指错误率低、好用、易用、可移植、易维护等..2软件工程的三个要素:方法、工具和过程..①方法:完成软件工程项目的技术手段;②工具:支持软件的开发、管理、文档生成;③过程:支持软件开发的各个环节的控制、管理..3软件工程的核心思想:把软件产品看作是一个工程产品来处理..知识点二软件的生命周期1、软件生命周期概念:将软件产品从提出、实现、使用维护到停止使用退役的过程称为软件生命周期..2、软件生命周期一般划分为定义、开发和维护3个阶段:1定义阶段:可行性研究、需求分析2个阶段;软件定义阶段:包括制定计划和需求分析..①制定计划:确定总目标;可行性研究;探讨解决方案;制定开发计划..②需求分析:对待开发软件提出的需求进行分析并给出详细的定义..方法:1结构化需求分析方法;2面向对象的分析方法..任务:导出目标系统的逻辑模型;解决“做什么”的问题..步骤:需求分析一般分为需求获取、需求分析、编写需求规格说明书和需求评审四个步骤进行..2开发阶段:概要设计、详细设计、编码实现和测试4个阶段;①软件设计:分为概要设计和详细设计两个部分..②软件实现:把软件设计转换成计算机可以接受的程序代码..③软件测试:在设计测试用例的基础上检验软件的各个组成部分..3维护阶段:使用、维护、退役阶段..软件运行维护阶段:软件投入运行;并在使用中不断地维护;进行必要的扩充和删改..软件生命周期中所花费最多的阶段是软件运维护阶段..4软件工程原则:抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性..5软件工具就是帮助开发软件的软件..它们对提高软件生产率;促进软件生产的自动化都有重要的作用..6软件开发环境或称软件工程环境是全面支持软件开发全过程的软件工具的集合;这些软件工具按照一定的方法和模式组合起来;共同支持软件生命周期内的各个阶段和各项任务的完成..知识点三软件设计基本概念1、软件工程过程:问题定义——可行性研究——需求分析——软件设计——软件编码——软件测试——软件维护2、软件设计分为总体设计和详细设计1总体设计目的:要解决的问题是“怎样实现目标系统”任务:确定软件的总体结构;进行模块划分;确定每个模块的功能、接口及模块之间的调用关系;并对全局数据结构进行设计;同时产生概要设计说明书2详细设计目的:要解决的问题是“应该怎样具体实现目标系统”任务:在概要设计的基础上;设计每个模块实现的细节及对局部数据进行设计包括模块的数据结构和所需的算法;同时产生详细设计说明书3、软件编码目的:产生能在计算机上执行的程序任务:根据系统的要求和开发环境;选用合适的程序设计语言;把详细设计的结果翻译成用该程序设计语言编写的程序代码源程序4、软件测试是为了发现程序中的错误而执行程序的过程目的和任务:通过在计算机上执行程序来尽可能多地发现软件产品中的错误和缺陷;并改正程序中的错误;以保证程序的可靠运行5、软件维护阶段是长期的过程;因为;经过测试的软件还可能有错;用户的要求还会发生变化;软件运行的环境也可能变化等等..因此;交付使用的软件仍然需要继续排错、修改和扩充;这就是软件维护..软件维护的目的是满足用户对已开发产品的性能与运行环境不断提高的需要;进而达到延长软件的寿命软件维护就是在软件交付使用之后;为了改正错误或满足新的需要而修改软件的过程..软件维护的类型有如下几种:1改正性维护:诊断和改进错误的过程..2适应性维护:为与变化的环境适当配合而进行的修改软件的活动..3完善性维护:为了满足用户提出的增加新功能或修改已有功能的建议而进行维护..4预防性维护:为了改进未来的可维护性和可靠性..软件开发时期要完成设计和实现两大任务;其中设计任务用需求分析和软件设计两个阶段完成;实现任务用编码和测试两个阶段完成..开发任务完成的好与坏;关系到软件产品的质量;完成开发任务的关键是选择好的软件开发方法..目前;软件开发方法主要有结构化开发方法和面向对象开发方法知识点4软件设计的基本原理软件设计的基本原理包括:抽象、模块化、信息隐蔽和模块独立性..1、模块化:指解决问题时自顶向下的方法逐层把软件系统划分成若干个模块的过程2、抽象:认识复杂过程中使用的思维工具;即抽出事务的本质的共同的特性而暂不考虑它的细节和其他因素..3、信息隐蔽:旨在设计和确定模块式的时候;是的一个模块内包含的信息;对于不需要这些信息的其他模块来说不可访问4、模块独立性:指每个模块只完成系统要求的独立的功能;并且与其他模块联系最少且接口简单模块的耦合性和内聚性是衡量软件的模块独立性的两个定性指标..1内聚性:是对模块功能强度的度量;即对一个模块内部各个元素语句之间、程序段间彼此结合的紧密程度的度量..2耦合性:是模块间互相连接的紧密程度的度量..模块之间联系越紧密;其耦合性就越强;模块的独立性则越差..一个设计良好的软件系统应具有高内聚、低耦合的特征..在结构化程序设计中;模块划分的原则是:模块内具有高内聚度;模块间具有低耦合度..软件设计有两个步骤:1概要设计又称结构设计是将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式;2详细设计是确定每个模块的实现算法和局部数据结构;通过对结构表示进行细化;得到软件的详细数据结构和算法..知识点5 结构化分析方法结构化方法的软件开发过程2、结构化分析方法的常用工具:数据流图、数据字典、结构化语言、判定树、判定表3、SA的基本步骤如下:①自顶向下对系统进行功能分解;画出分层的数据流图②由后向前定义系统的数据和加工;编制数据字典和加工说明③写出需求规格说明书SRS4、数据流图是以图形的方式描绘数据在软件系统中流动和处理的过程;由于它只反映系统必须完成的逻辑功能;所以它是一种功能模型.. 数据流图由数据流、加工又称数据处理、数据存储又称文件、数据源点或终点四种基本成分组成..数据流图简称DFD图形元素:①数据流:是数据在系统内传播的路径..使用箭头代表数据的流向;数据名称标在箭头的边上②加工:输入数据经过加工变换产生输出..使用圆框代表加工③数据存储:指处理过程中存放各种数据..使用双杠或单杠表示数据文件或数据库..文件与加工之间用箭头线连接;单向表示只读或只写;双向表示可读可写④数据源点或终点:指软件系统外部环境中的实体包括人员、组织或其他软件系统;统称为外部实体..使用方框表示数据的源点和终点5、建立数据流图的步骤:第一步:由外向里:先画系统的输入输出;然后画系统的内部..第二步:自顶向下:顺序完成顶层、中间层、底层数据流图..第三步:逐层分解..6、DFD图的数据流可分为两种类型:变换流和事务流变换流:信息沿着输入通路进入系统;同时将信息的外部形式转换成内部形式;通过变换中心处理之后;再沿着输出通路转换成外部形式输出事务流:信息沿着输入通路到达一个事务中心;事务中心根据输入信息的类型在若干个动作序列中选择一个来执行;这种信息流称为事务流7、数据字典就是用来定义数据流图中的各个成分的具体含义和详细的描述..它和数据流图共同构成了系统的逻辑模型;是需求规格说明书的主要组成部分..是结构化分析方法的核心.. 数据字典是为分析人员查找数据流图中有关名字的详细定义而服务的..数据字典有四类条目:数据流、数据项、数据存储和基本加工..8、SD方法的中心任务就是把用DFD图表示的系统分析模型方便地转换为软件结构的设计模型..识点6软件测试的目的和准则1、软件测试是保证软件质量的重要手段;其主要过程涵盖了整个软件生命周期的过程;包括需求定义阶段的需求测试、编码阶段的单元测试、集成测试以及后期的确认测试、系统测试、验证软件是否合格、能否交付给用户使用..软件测试就是使用人工或自动手段来运行或测定某个系统的过程;其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别..2、软件测试的原则:1所有测试都应追溯到需求2严格执行测试计划;排除测试的随意性3避免由软件开发人员测试自己的程序4充分注意测试中的群集性现象5除了很小的程序外;“彻底”的穷举测试是不可能的6妥善保存测试计划、测试用例、出错统计和最终的分析报告;为维护提供方便软件测试的每一次测试都需要准备好一些测试数据;与被测程序一起输入到计算机中执行;知识点7软件测试的方法和实施1、测试是对软件规格说明、设计和编码的最后的复审;所以软件测试贯穿在整个软件开发期的全过程..对于软件测试方法和技术;可以从不同的角度加以分类..①从是否需要执行被测软件的角度;软件测试分为静态分析和动态测试②按照功能划分;动态测试又分为白盒测试和黑盒测试2、静态测试一般是指人工评审软件文档或程序;借以发现其中的错误;由于被评审的文档或程序不必运行;所以称为静态的..静态测试包括代码检查、静态结构分析、代码质量度量等..3、动态测试是指通过运行软件来检查软件中的动态行为和运行结果的正确性;也就是常说的上机测试..动态测试一般包括两个基本要素:被测程序和测试数据4、测试能否发现错误取决于测试用例的设计..动态测试的设计测试用例的方法一般分为黑盒测试和白盒测试..①白盒测试也称结构测试;它与程序内部结构相关;要利用程序结构的实现细节设计测试用例;它涉及程序风格、控制方法、源程序、数据库设计和编码细节..②黑盒测试是测试者已经知道被测程序的功能;而对程序内部的逻辑结构和处理过程完全不用考虑;只是对它的每一个功能进行测试;将测试后的结果与期望的结果进行分析比较;检查程序的功能是否符合规格说明书的要求..黑盒测试是在程序接口进行的测试5、测试用例是由测试数据和期望结果组成..设计测试用例的目的就是用尽可能少的测试数据;达到尽可能大的程序覆盖面;发现尽可能多的软件错误和问题6、用白盒法设计测试用例常用以下几种技术:①语句覆盖②判定覆盖③条件覆盖④判定/条件覆盖⑤条件组合覆盖⑥路径覆盖7、用黑盒法设计测试用例常用以下几种技术:①等价类划分法②边界值分析法③错误推测法④因果图法8、软件测试的实施①单元测试:是对每一个编制好的模块进行测试;其目的在于发现和排除各模块内部可能存在的差错及详细设计中产生的错误..进行单元测试时;根据程序的内部结构设计测试用例;主要采用白盒测试法②集成测试..是在单元测试的基础上;将所有模块按照设计要求组装成为系统而进行的测试;它的任务是检查模块间的接口和通信、各子功能的组合能否达到预期要求的功能、全程数据结构是否有问题等..集成测试主要发现设计阶段产生的错误;通常采用黑盒测试法 ..集成测试时;将各个模块组装成系统的方法有:非增量组装方式是先分别对每个模块进行单元测试;再把所有模块按设计要求组装在一起进行测试;最终得到所要求的软件增量组装方式是把下一个要测试的模块同已经测试好的那些模块结合起来进行测试;测试完以后再把下一个应该测试的模块结合进来测试③确认测试..确认测试是在集成测试通过后;在用户的参与下进行确认测试..这时通常使用实际数据进行测试;以验证系统是否能满足用户的实际需要..它的任务就是以需求规格说明书作为依据来验证软件的性能、功能及其他特征是否与用户的要求一致;通常采用黑盒测试④系统测试..系统测试是在更大范围内进行的测试..系统测试是把通过确认测试后的软件与计算机硬件、外设、某些支持软件、数据和人员等结合在一起;在实际运行环境下;对计算机系统进行的一系列集成测试和确认测试知识点八程序的调试1、调试也称排错或纠错..2、程序调试的任务:诊断和改正程序中错误..软件测试贯穿整个生命周期;调试主要在开发阶段..3、程序调试的基本步骤:1错误定位; 2纠正错误; 3回归测试..4、对软件主要的调试方法可以采用:1强行排错法.. 2回溯法.. 3原因排除法..5、软件调试可分为静态调试和动态调试..1静态调试就是指对源程序进行分析;然后确定可能出错的地方并进行排错..2动态调试是指对程序的运行进行跟踪并观察其出错点;然后进行排错..。

自学考试软件工程第13章软件开发环境

自学考试软件工程第13章软件开发环境
(2)开放式工作台和封闭式工作台。
❖ 2.程序设计工作台 程序设计工作台由支持程序开发过程的一组工具组成。将编译
器、编辑器和调试器这样的软件工具一起放在一个宿主机上,该 机器是专门为程序开发设计的。组成程序设计工作台的工具可能 有:
(1)语言编译器:将源代码程序转换成目标码。 (2)结构化编辑器:结合嵌入的程序设计语言知识。 (3)连接器。 (4)加载器。 (5)交叉引用。 (6)按格式打印。 (7)静态分析器。 (8)动态分析器。 (9)交互式调试器。 3.分析和设计工作台 分析和设计工作台支持软件过程的分析和设计阶段,在这一阶 段,系统模型已建立(例如,一个数据库模型,一个实体关系模 型等)。这些工作台通常支持结构化方法中所用的图形符号。支 持分析和设计的工作台有时称为上游 CASE工具。它们支持软件 开发的早期过程。程序设计工作台则成为下游CASE工具。 4.测试工作台 测试是软件开发过程较为昂贵和费力的阶段。测试工作台永远 应为开放系统,可以不断演化以适应被测试系统的需要。
13.3.1 CASE定义
❖ CASE是一组工具和方法集合,可以辅助软 件开发生命周期个阶段进行软件开发。
13.3.2 CASE分类
❖ 1.CSAE技术种类 CASE系统所涉及到的技术有两大类:一类是支
持软件开发过程的本身的技术,如支持规约、设计、 实现、测试等等。
还有一种特殊的CASE技术,即元-CASE技术。
❖ 1.平台集成 “平台”或是一个单一的计算机或操作系统或是一个网络系统。 2.数据集成 数据集成是指不同软件工程能相互交换数据。 (1)共享文件。 (2)共享数据结构。 (3)共享仓库。 最简单的数据集成形式是基于一个共享文件的集成,UNIX系统就是这
样。UNIX有一个简单的文件模型,即非结构化字符流。任何工具都能把 信息写入文件中,也能读其他工具生成的文件。UNIX还提供管道。

831程序设计基础与软件工程

831程序设计基础与软件工程

831程序设计基础与软件工程程序设计基础与软件工程是计算机科学领域中最基本的课程之一、它旨在为学生提供编写和组织软件系统的基本知识和技能。

下面,我将介绍这门课程的核心内容和学习目标。

程序设计基础与软件工程涵盖了以下几个方面的知识:1. 编程基础:学习一种编程语言的基本语法、数据类型、变量和常量、运算符等。

这是理解和编写任何软件系统的基础。

通常,课程会选择一门类C的编程语言,如C++或Java。

2.数据结构与算法:学习常见的数据结构,如数组、链表、栈、队列、树和图等,以及它们的基本操作。

同时,也学习一些常用算法,如排序、和图算法等。

这些知识将帮助你选择和实现合适的数据结构和算法,以解决实际问题。

3.软件开发生命周期:学习软件工程的基本概念和方法。

这包括需求分析、设计、编码、测试和维护等阶段。

你将了解如何将一个软件项目划分为几个模块,然后逐步开发和测试这些模块,以确保最终的软件系统的质量和可靠性。

4.设计模式:学习常见的软件设计模式,如单例模式、工厂模式、观察者模式等。

这些模式是通过已经被验证和封装的解决方案,帮助你解决软件设计过程中的一些常见问题。

它们可以提高软件的可扩展性、可维护性和可重用性。

通过学习这门课程,你将达到以下几个学习目标:1.掌握一门编程语言的基本语法和控制结构。

你将能够编写简单的程序并理解它们的运行原理。

2.理解和应用基本的数据结构和算法。

你将能够选择和实现适当的数据结构和算法,以解决实际问题。

3.了解软件开发生命周期和软件工程方法。

你将学会如何组织一个软件项目,并在不同的开发阶段进行合理的设计、编码和测试。

4.熟悉常见的软件设计模式。

你将能够应用这些模式来解决软件系统设计中的常见问题。

除了上述的内容和目标外,你还将通过项目实践获得实践经验。

在实际的项目中,你将会面对一些挑战,如需求变更、代码重构和团队协作。

这将帮助你培养解决问题、沟通和合作的能力,这些是在实际软件开发中必不可少的技能。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第8章软件工程基础软件工程(Software Engineering,简称SE)是应用计算机科学、数学及管理科学等原理,开发软件的工程。

软件工程借鉴传统工程的原则、方法,以提高质量、降低成本。

对于软件工程,本章主要介绍一下内容:1. 软件工程基本概念,软件生命周期概念,软件工具与软件开发环境。

2. 结构化分析方法,数据流图,数据字典,软件需求规格说明书。

3. 结构化设计方法,总体设计与详细设计。

4.程序设计方法与风格,结构化程序设计,面向对象程序设计。

5. 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。

6. 程序的调试,静态调试与动态调试。

8.1 软件工程的基本概念8.1.1软件及其特点计算机系统由硬件和软件两部分组成。

计算机软件是包括程序、数据及其相关文档资料的完整集合。

其中,程序是软件开发人员根据用户需求开发的、用程序设计语言描述的、适合计算机执行的指令(语句)序列。

数据是使程序能够正常操纵信息的数据结构。

文档是与程序开发、维护和使用的图文资料。

由此可见,软件由两部分组成:一是机器可执行的程序和数据;二是机器不可执行的,与软件开发、运行、维护和使用有关的文档。

软件与硬件不同,它有以下特点:(1)软件是一种逻辑实体,而不是物理实体,具有抽象性。

这使得软件与其他工程对象有着明显的差异。

可以将软件记录在纸上或其他存储介质上,但却无法看到软件本身的形态,必须通过观察、分析、思考、判断,才能了解它的功能、性能等。

(2)软件的生产没有明显的制作过程。

在软件研制开发成功之后,可以大量拷贝同一内容的副本。

所以对软件的质量控制,必须着重在软件开发方面下功夫。

(3)软件在运行、使用期间不存在磨损、老化问题,但为了适应硬件、环境以及需求的变化要进行修改,而这些修改又会不可避免的引入错误,导致软件失效率升高,从而使得软件退化。

(4)软件的开发、运行对计算机系统具有依赖性,受计算机系统的限制,这导致了软件移植的问题。

(5)软件复杂性高,成本昂贵。

软件是人类有史以来生产的复杂度最高的工业产品。

软件涉及人类社会的各行各业、方方面面,软件开发常常涉及其他领域的专门知识。

软件开发需要投入大量、高强度的脑力劳动,这其中蕴含着成本高,风险大的问题。

(6)软件开发涉及诸多的社会因素。

许多软件的开发和运行涉及软件用户的机构设置,体制问题以及管理方式等,甚至涉及到人们的观念和心理因素,软件知识产权及法律等诸多的问题。

软件根据应用目标的不同,是多种多样的。

软件按功能可以分为:应用软件、系统软件、支撑软件(或工具软件)。

应用软件是为解决特定领域的应用而开发的软件。

例如,事务处理软件,工程与科学计算软件,实时处理软件,嵌入式软件以及人工智能软件等各种应用性质不同的软件。

系统软件是计算机管理自身资源,提高计算机使用效率并为计算机用户提供各种服务的软件。

例如,操作系统,编译程序,汇编程序,网络软件,数据库管理系统等。

支撑软件是介于系统软件和应用软件之间、协助用户开发软件的工具性软件。

例如,需求分析工具软件,设计工具软件,编码工具软件,测试工具软件,维护工具软件等。

8.1.2软件危机与软件工程1.软件危机“软件危机”这个词在20 世纪60 年代末以后频繁出现。

所谓软件危机是泛指在计算机软件的开发和维护过程中所遇到的一系列严重问题。

随着计算机技术的发展和计算机应用范围的扩大,计算机硬件的性价比和质量稳步提高,软件规模越来越大,复杂程度不断增加,软件成本逐年上升,质量没有可靠的保证,软件已成为计算机科学发展的“瓶颈” 。

具体地说,在软件开发和维护过程中,软件危机主要表现在:(1)软件需求的增长得不到满足。

用户对系统不满意的情况经常发生。

(2)软件开发成本和进度无法控制。

(3)软件质量难以保证。

(4)软件不可维护或维护程度非常低。

(5)软件的成本不断提高。

(6)软件开发生产率的提高赶不上硬件的发展和应用需求的增长。

在软件开发和维护过程中,之所以存在这些严重的问题,一方面与软件本身的特点有关。

例如,在软件运行前,软件开发过程的进展难以衡量,质量难以评价,因此管理和控制软件开发过程相当困难;在软件运行过程中,软件维护意味着改正或修改原来的设计。

另外,软件的显著特点是规模庞大,在开发大型软件时,要保证高质量,极端复杂困难,不仅涉及技术问题(如分析方法、设计方法、版本控制),更重要的是必须有严格而科学的管理。

2.软件工程为了消除软件危机,通过认真研究解决软件危机的方法,认识到软件工程是使计算机软件走向工程科学的途径,逐步形成了软件工程的概念,开辟了工程学的新领域——软件工程学。

软件工程就是试图用工程、科学和数学的原理与方法研制、维护计算机软件的有关技术及管理方法。

关于软件工程的定义,国标(GB )中指出,软件工程是应用于计算机软件的定义、开发和维护的一整套方法、工具、文档、实践标准和工序。

1968 年在北大西洋公约组织会议(NATO 会议)上,讨论摆脱软件危机的办法,软件工程(Software Engineering )作为一个概念首次被提出,这在软件技术发展史上是一件大事。

在会议上,德国人Fritz Bauer 认为:“软件工程是建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法” 。

1993 年,IEEE (Institute Of Electrical & Electronic Engineers ,电气和电子工程师学会)给出了一个更加综合的定义:“将系统化的、规范的、可度量的方法应用于软件的开发、运行和维护的过程,即将工程化应用于软件中” 。

这些主要思想都是强调在软件开发过程中需要应用工程化原则。

软件工程包括 3 个要素,即方法、工具和过程。

方法是完成软件工程项目的技术手段;工具支持软件的开发、管理、文档生成;过程支持软件开发的各个环节的控制、管理。

软件工程的核心思想是把软件产品作为是一个工程产品来处理。

把需求计划、可行性研究、工程审核、质量监督等工程化的概念引入到软件生产当中,以期达到工程项目的三个基本要素:进度、经费和质量的目标。

同时软件工程也注重研究不同于其他工业产品生产的一些特性,并针对软件的特点提出了许多有别于一般工业技术的一些技术方法。

从经济学意义上说,软件庞大的维护费用远比软件开发费用高,因此开发软件不能只考虑开发期间的费用,而应考虑软件生命周期内的全部费用。

8.1.3 软件工程过程与软件生命周期1 .软件工程过程(Software Engineering Process )软件工程过程包括两方面的内涵:(1)软件工程过程是为获得软件产品,在软件工具的支持下由软件人员完成的一系列软件工程活动。

从这个方面来说,软件工程过程通常包含四种基本活动:①软件规格说明:规定软件的功能及其运行的限制;②软件开发:产生满足规格说明的软件;③软件确认:确认软件能够完成客户提出的要求;④软件演进:为满足客户的变更要求,软件必须在使用的过程中演进。

(2)从软件开发的观点看,软件工程过程就是使用适当的资源(包括人员、软硬件工具、时间等)为开发软件进行的一组开发活动,在过程结束时将输入(用户要求)转化为输出(软件产品)。

所以,软件工程的过程是将软件工程的方法和工具综合起来,以达到合理、及时地进行计算机软件开发的目的。

2. 软件的生命周期(Software Life Cycle )通常,将软件产品提出、实现、使用维护到停止使用退役的过程称为软件的生命周期。

可以将软件生命周期分为如个阶段。

图14-1所示的软件定义、软件开发及软件运行维护三 图14-1软件生命周期图14-1所示的软件生命周期的主要活动阶段是:(1 )可行性研究与计划制定。

确定待开发软件系统的开发目标和总的要求,给出 它的功能、性能、可靠性以及接口等方面的可能方案,制定完成开发任务的实施计划。

(2 )需求分析。

对待开发软件提出的需求进行分析并给出详细定义。

编写软件规 格说明书及初步的用户手册,提交评审。

(3 )软件设计。

系统设计人员和程序设计人员应该在反复理解软件需求的基础上, 给出软件的结构、模块的划分、功能的分配以及处理流程。

如果系统比较复杂,则可将 设计阶段分为概要设计和详细设计两个阶段。

(4 )软件实现。

把软件设计转换成计算机可以接受的程序代码。

(5) 软件测试。

在设计测试用例的基础上,检验软件的各个组成部分。

(6) 运行和维护。

将已交付的软件投入运行,并在运行使用中不断地维护,根据 新提出的需求进行必要而且可能的扩充和删改。

8.1.4软件工程的目标与原则1.软件工程的目标 软件工程的目标是,在给定成本与进度的前提下,开发出满足用户需求且其有效性、 可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作 性较好的产品。

软件工程需要达到的基本目标应是:付出较低的开发成本;达到要求的软件功能; 取得较好的软件性能;开发的软件易于移植;需要较低的维护费用;能按时完成开发, 及时交付使用。

为了达到软件工程的目标,软件工程研究的内容主要包括:软件开发技术和软件工 程管理。

(1)软件开发技术 软件开发技术包括:软件开发方法学、软件开发过程、软件开发工具和软件工程环 境,其主体内容是软件开发方法学。

软件开发方法学是根据不同的软件类型,按不同的 观点和原则,对软件开发中应遵循的策略、原则、步骤和必须产生的文档资料都做出规 定,从而使软件的开发能够进入规范化和工程化的阶段,以克服早期的手工方法生产中 的随意性和非规范性做法。

(2)软件工程管理 软件工程管理包括:软件管理学、软件工程经济学、软件心理学等内容。

软件工程管理是软件按工程化生产时的重要环节,它要求按照预先制定的计划、进 度和预算执行,以实现预期的经济效益和社会效益。

软件管理学包括人员组织、进度安排、质量保证、配置管理、项目计划等。

软件工程经济学是研究软件开发中成本的估算、成本效益分析的方法和技术,用经济学的基本原理来研究软件工程开发中的经济效益问题。

软件心理学是从个体心理、人类行为、组织行为和企业文化等角度来研究软件管理和软件工程的。

2.软件工程的原则为了达到上述的软件工程目标,在软件开发过程中,必须遵循软件工程的基本原则。

这些基本原则包括抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性和可验证性。

(1)抽象。

抽取事物最基本的特性和行为,忽略非本质细节。

在实施过程中,采用分层次抽象,自顶向下,逐层细化的方法来化解软件开发过程的复杂性。

(2)信息隐蔽。

用封装技术,将程序模块的实现细节隐藏起来,并提供尽可能简单的模块接口,以便于和其他模块连接在一起。

(3)模块化。

模块是程序中相对独立的成分,一个模块是一个独立的编程单位。

相关文档
最新文档