2011年软件水平考试软件设计师辅导资料(1)

2011年软件水平考试软件设计师辅导资料(1)

第三节 软件生存周期模型,方法和工具
  生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持,为开发过程中的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,也是建立软件开发环境的核心。
  生存周期模型作用:确立了软件开发中各阶段的次序限制,活动准则,所要遵守的规定和限制,便于各种活动的协调,人员之间的有效通信,有利于活动重用和活动管理。
  生存周期模型准则:模型能表示各种活动的实际工作方式,能随情况变化而演化能表示各种活动间同步和制约关系,能表示活动的动态特性。容易为开发人员理解,能适应不同软件项目,具有较强灵活性,能支持软件开发环境的建立。
  目前有:
  1 瀑布模型:将软件生存周期中各活动规定为依线性顺序连接的若干阶段。包括可行性分析,项目开发计划,需求分析,概要设计,详细设计,编码,测试和维护。它是一种理想的线性开发模式,缺乏灵活,特别是无法解决软件需求不明确的问题。适合于需求不明确,设计方案有一定风险的软件项目。
  2 增量模型:软件在模型中是”逐渐”开发出来的,开发一部分,展示一部分,能及早发现问题。或者先开发一”原型”软件,完成主要功能,然后逐步完善,最终获得满意的软件产品。
  3 螺旋模型:将瀑布模型与增量模型结合起来,加入风险分析,弥补了这两种模型的不足。开发分四步:制定计划,风险分析,开发实施,用户评估。
  4 喷泉模型:以用户需求为动力,以对象为驱运动模型,适合于面向对象开发方法,使开发过程具有迭代性和无间隙性。
  迭代性:系统有些部分常常重复工作多次,相关功能在每次迭代中随之加入演化的系统。
  无间隙:在分析,设计,实现等开发活动之间不存在明显边界。
  5 基于知识的模型:瀑布模型与专家模型的结合。开发各阶段都有利用相应专家系统来辅助设计,使维护在系统需求一级进行。
  6 变换模型:适合于形式化开发方法的模型。
  软件开发方法:使用早已定义好的技术集及符 表示习惯来组织软件生产的过程。
  软件开发开发的目标:通过使用成功的软件开发方法,在规定的投资和时间内,开发出符合用户需求的高质量的软件。
  软件开发方法是克服软件危机的重要方面之一,对软件工程及软件包产业的发展起了不可估量的作用。
  已使用的成功方法有:
  1、结构化方法:一种面向数据流的开发方法,适合数据处理领域。指导指导思想是自顶向下,逐步求精。用数据流图建立系统功能模型,完成需求分析工作。用软件结构图建立系统物理模型,实现概要设计。最后将每个模块的功能用相应标准控制结构表示出来,从而实现详细设计。
  2、JACKSON方法:一种面向数据结构的开发方法,适合小规模项目。首先描述问题的输入,输出数据结构,分析其对应性,然后推出相应程序结构,从而给出问题的软件过程描述。当输入与输出数据结构无对应关系时,难于应用此方法,JSD(一完整的系统开发方法)对JSP进行了扩充
  3、维也纳开发方法(VDM):一种形式化开发方法,软件的需求用严格的形式语言描述,然后把模型逐步变换成目标系统。
  4、面向对象的开发方法:基本出发点是尽可能按人类认识世界的方法和思维方式来分析和解决问题。以对象作为最基本的元素,客观世界中具体的事物,事件,概念和规则都有可看成对象,它也是分析问题,解决问题的核心。开发方法包括面向对象分析,面向对象设计,面向对象实现。主要有BOOCH方法,Coad方法和OMT方法。为统一这些方法的术语,概念和模型,(1997年)推出统一建模型语言UML。
  结构化方法可用:瀑布模型,增量模型,螺旋模型进行开发。
  JACKSON方法可用:瀑布模型,增量模型进行开发。
  面向对象的开发方法可用:喷泉模型,瀑布模型,增量模型进行开发。
  形式化的维也纳方法只能用变换模型进行开发 。
  软件工具:为支持软件人员开发和维护活动而使用的软件。使用软件工具后,可提高软件生产率。目前软件工具发生了很大变化,目的是生成软件周期各个环节的自动化。主要用于软件的分析和设计,使用这些工具软件开发人员就能在微机或工作站上以对话方式建立各种软件系统。
  工具箱:最初的软件工具是以工具箱形式出现的。但界面不统一,工具内部无联系,工具切换由人工操作。它们对大型软件的开发和维护的支持能力有限。
  软件开发环境:目的是使软件工具支持整个生存周期。而且做到不仅支持各阶段的技术工作,还要支持管理和操作工作,保持项目开发的高度可见性,可控制性和可追踪性。
  计算机辅助软件工程:可简单定义为软件开发的自动化,简称为CASE。实质是为软件开发提供一组优化集成的,大量节省人力的软件开发工具。是软件工具和软件开发方法的结合。目的是实现软件生存周期各环节的自动化,并使之成为一个整体。
  CASE工具与以往软件工具不同体现在:
  1 支持专用的个人计算环境;
  2 使用图形功能对软件系统进行说明并建立文档;
  3 将生存周期各阶段的工作连接在一起;
  4 收集和连接软件系统从最初的软件需求到软件维护各个环节的所有信息;
  5 用人工智能实现软件开发和维护工作的自动化。

 

第二章 可行研究与项目开发计划
  可行研究的任务:首先需要进行概要的分析研究,初步确定项目的规模,目标,约束和限制。分析员再进行简要的需求分析,抽象出项目的逻辑结构,建立逻辑模型。从逻辑模型出发,经过压缩的设计,探索出若干种可供选择的解决方法,对每种解决方法都要研究它的可行性。
  主要从三个方面考虑:
  1.技术可行性 一般要考虑的情况包括 开发的风险即设计出的系统能否达到要求的功能和性能;资源的有效性;相关技术的发展是否支持;
  2.经济可行性 进行开发成本的估算以及了解取得效益的评估,确定要开发的项目是否值得投资。
  3. 会可行性 要开发的项目是否存在任何侵权问题,运行方式在用户组织内是否可行,现有管理制度﹑人员素质﹑操作方式是否可行。
  可行性研究的具体步骤:
  1.确定项目规模和目标;
  2.研究正在运行的系统; 收集﹑研究﹑分析现有系统的文档资料,实地考察系统访问有关人员,然后描绘现有系统的高层系统流程图。
  3.建立新系统的高层逻辑模型; 使用数据流图和数据字典描述数据在系统中的流动和处理情况。
  4.导出和评价各种方案; 导出若干较高层次的物理解决方法,根据技术可行性﹑经济可行性﹑ 会可行性进行评估,得到可行的解决方法。
  5.推荐可行方案; 进行成本~效益分析,决定该项目是否值得开发,若值得开发那么解决方案是什么,并且说明该方案可行的原因和理由。
  6.编写可行性研究 告; 将上述可行性过程的结果写成相应文档,即可行性研究 告。
  系统流程图: 描述系统工程物理模型的工具,用图形符 来表示系统中各个元素,表达各元素之间的信息流动情况。
  投资回收率:通常用货币的时间价值进行估算。可用利率来表示货币的时间价值。
  设年利率为I,现存入P元,n年后可得钱数为F,若不计复利则F=P*(1+n*I)
  反之,若n年能收入F元,那么这些钱现在的价值是:P=F/(1+n*I)
  通常把建立系统若干年后能取得的收益折算成现在的价值和开发系统所需的费用进行比较得出投资回收率。
  投资回收期:就是使累计的经济效益等于最初的投资费用所需的时间。
  纯收入:整个生存周期之内的累计经济效益(折成现在值)与投资之差。(例题见书2.3成本–效益分析)
  项目开发计划:包括
  1.项目概述:说明项目的各项主要工作;说明软件的功能﹑性能;为完成项目应具有的条件;用户及合同承包者承担的工作完成的期限及其他条件限制;应交付的程序名称;所使用的语言及程储形式;应交付的文档。
  2.实施计划:说明任务的划分,各任务责任人,项目开发进度,项目的预算,各阶段的费用支出,各阶段应完成的任务,用图表说明每项任务的开始和完成时间。
  3.人员组织及分工:所需人员类型﹑数量﹑组成结构。
  4.交付期限:最后完工日期。

 

 

 

第4章 软件概要设计
  学习本章,我们要考虑以下几个问题:
  软件概要设计指的是什么r>   软件概要设计要做的事情是什么r>   用什么来评价软件设计的技术质量r>   软件结构优化的准则是什么r>   如何进行软件概要设计r>   以上问题就是本章所要讨论的内容。
  一、软件概要设计指的是什么r>   我们知道,软件设计是把一个软件需求转换为软件表示的过程,而概要设计(又称结构设计)就是软件设计最初形成的一个表示(这里的表示是一个名词),它描述了软件的总的体系结构。简单地说软件概要设计就是设计出软件的总体结构框架。而后对结构的进一步细化的设计就是软件的详细设计或过程设计。本章所学内容主要就是软件的概要设计内容。
  二、软件概要设计的基本任务
  软件概要设计阶段要做的事情是什么呢的来看有四个方面:它们是
  1、设计软件系统结构(软件结构)
  2、数据结构及数据库设计
  3、编写概要设计文档
  4、评审
  在需求分析阶段,已经把系统分解成层次结构,而在概要设计阶段,需要进一步分解,划分为模块以及模块的层次结构。划分的具体过程是:
  (1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
  (2)确定每个模块的功能。
  (3)确定模块之间的调用关系。
  (4)确定模块之间的接口,即模块之间传递的信息。
  (5)评价模块结构的质量。
  对于大型数据处理的软件系统,还要对数据结构及数据库进行设计。
  在概要设计阶段,还要编写概要设计文档,我们初学者有一个不是很好的做法,就是在编程序时,往往不注意文档的编写,导致以后软件修改和升级很不方便,用户使用时也得不到帮助。所以应该在软件设计的每个阶段编写相应文档,在概要设计阶段,主要有以下文档需要编写:
  (1)概要设计说明书。
  (2)数据库设计说明书。
  (3)用户手册,
  (4)修订测试计划。
  最后一个任务就是评审,在概要设计中,对设计部分是否完整地实现了需求中规定的功能、性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性、有效性,各部分之间的一致性等都要进行评审,以免在以后的设计中发现大的问题而返工。
  以上就是软件概要设计的四个基本任务,总结一下用八个字表示:两类结构文档评审。(两类结构就是指软件结构和数据结构及数据库设计)
  在了解了软件概要设计的基本任务之后,我们来看看软件设计的基本原理,也就是用于衡量软件设计的技术质量的一些标准。

 

第6章_软件编码
  本章的内容比较少且简单,多为识记的内容,想必每一个学到本课程的同学都已经有过编码(写程序)的经验,也积累了一些编程方面的经验,在本章中,就是从理论的角度来讨论一下程序设计语言的特色及编码应注意的程序设计风格。以理解和记忆为主。所以下面就一些记忆要点作一摘要。
  一、程序设计语言的特性及选择
  程序设计语言有三个特性,他们是:心理特性、工程特性和技术特性。
  1、心理特性:是指影响程序员心理的语言性能,包括歧义性,简洁性,局部性和顺序性,传统性几个方面。
  歧义性:是指某些语言虽然在编译程序中只有一种解释,但在人们看来却可能产生两种或多种不同的解释。
  简洁性:是指人们必须记住的语言成分的数量。
  局部性和顺序性:局部性指语言的联想性,模块的高内聚低耦合使局部性得以加强,提供异常处理的语言特性则削弱局部性。顺序性强则使人们易理解,易接受。
  传统性:由于人们使用语言有一种习惯性。若新语种的传统性强,则人们学习起来容易接受。反之则需要更多时间来学习。可见传统性容易影响人们学习新语种的积极性。
  2、工程特性:从软件工程的观点,程序设计语言的特性着重考虑软件开发项目的需要,因此对程序编码有如下要求:可移植性、开发工具的可利用性、软件的可重用性及可维护性。
  可移植性:是指程序从一个计算机环境移植到另一个计算机环境的容易程度。
  开发工具的可利用性:就是说一个开发工具好不好用,功能多不多,强不强。比如VC++就是一个开发工具。
  软件的可重用性:指编程语言能否提供可重用的软件成分,重用时需要修改调整的内容多不多。
  可维护性:一个易读懂,易修改的软件就是可维护性好的软件。
  3、技术特性。
  二、程序设计语言的选择
  这一节主要要识记一些语言所适合的需求,考虑选择语言的因素有:项目的应用领域、软件开发的方法、软件执行的环境、算法和数据结构的复杂性以及软件开发人员的知识等。
  1、项目应用领域
  科学工程计算:主要有FORTRAN语言,它是世界上第一个被正式推广应用的计算机语言。
  Pascal语言,具有很强的数据和过程结构化能力,它是第一个体现结构化编程思想的语言
  C语言:功能强大,它具有汇编语言的某些特征,使程序运行效率高。
  PL/1语言:适用性广,但由于太庞大而难以推广。
  数据处理与数据应用,主要有Coble语言,广泛用于商业数据处理。这种语言中程序说明与硬件环境说明分开、数据描述与算法描述分开。
  SQL:结构化查询语言,用于对数据库进行存取管理。
  4GL(第4代语言),包括Foxpro、Uniface、PowerBuilder Informix4GL等语言。这种语言有几个特征:
  (1)友好的用户界面
  (2)兼有过程性和非过程性双重特性
  (3)高效的程序代码
  (4)完备的数据库
  (5)应用程序生成器
  实时处理,主要有汇编语言和Ada语言。
  系统软件,主要可用汇编语言、C语言、Pascal和Ada语言。
  人工智能,应选择Prolog、Lisp语言。Lisp是一种函数型语言。Prolog是一种逻辑型语言。
  如果用面向对象方法开发软件,可采用C++、Java语言。
  近年来软件开发环境已进入可视化时代,我们的实践课程中,也都需要你有可视化编程工具进行程序设计,可用的如Visual Basic 、Visual C++、Visual Foxpro 、Delphi等等。我们应该去学习掌握这些可视化编程工具。
  三、程序设计风格
  程序设计风格是指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。
  要形成良好的程序设计风格,应注意以下几个方面:
  源程序文档化:即给标识符取名和注释方面养成良好的习惯,注意写出易读易理解的程序文档。
  数据说明:注意数据说明时的顺序和变量名的排列顺序以及必要的注释。
  语句构造:特别要注意的是,在写程序时要以代码的易读易解为先,不要把为了实现高效率而把一些原本容易理解的语句写成一个复杂的语句。从而降低软件可维护性。
  输入输出效率:要注意的是,追求效率要建立在不损害程序可读性或可靠性基础之上,要先使程序正确、再提高效率,要先使程序清晰,再提高程序效率。

 

 

 第七章_软件测试
  本章介绍了软件测试的有关概念、方法及测试步骤。对本章提到的概念一定要理解记忆清楚,方法需要领会和记忆,设计测试用例的设计应该达到应用层次。本章是重点章。
  一、软件测试的目的(识记)
  软件测试的目的是为了发现错误。因此
  1、软件测试就是为了发现错误而执行程序的过程。
  2、一个好的测试是发现了至今尚未发现的错误测试。
  3、一个成功的测试是发现了至今尚未发现错误的测试。
  二、软件测试方法(识记和领会)
  软件测试方法一般分为两大类:动态测试方法和静态测试方法。
  静态测试是指被测程序不在机器上运行,而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。
  动态测试是指通过运行程序发现错误。一般意义的测试多指动态测试。
  动态测试分为黑盒法和白盒法两种。
  黑盒法,是指测试人员完全不考虑程序的内部结构和处理过程,只在软件接口处进行测试,依据需求规格说明书,检查程序是否满足功能要求。
  举个例子,一头猪就我们的测试对象,输入它能吃的东东,输出它的猪肉和猪粪(有的情况下,输入其他内容可以输出小猪猪)。并且它能自动拒绝吃不能吃的东东(如石头之类),并且不会直接输出金元宝之类的东东。那么这个猪是健康的,正常的。我们的测试不去理会猪的内部有什么花花肠子,怎么把食物变成肉的。这就是黑盒测试法。
  白盒法,是指测试人员须了解程序内部结构和处理过程,以检查处理过程的细节为基础,对程序中尽可能多的逻辑路径进行测试,检验内部控制结构和数据结构是否有错,实际的运行状态与预期的状态是否一致。
  这就好象是给猪做B超啦,CT啦,胸透啦什么的,把它里面的花花肠子看个透,并且还要看看吃进去的东东都经过哪里,怎么出来的,通过这些检测来确定它每个脏器的功能是否正常,处理食物的状态是否和理论上的一致或者发现它肚子里长了个瘤。
  呵呵,这种比较太粗鄙了,也不完全像。反正就是这样,一个是只看输入和输出,另一个是看里面的细节。但是两种测试法都不可能对程序进行穷举测试。
  三、测试用例的设计(简单应用)
  首先来了解白盒技术
  白盒测试是结构测试,所以被测对象基本上是源程序,以程序内部逻辑为基础设计测试用例。
  使用白盒技术,要尽可能覆盖最多的路径,当程序内部存在判定时,就要考虑逻辑覆盖。
  (1)语句覆盖:就是要设计足够多的测试用例(也就是输入的数据),使被测程序中每个语句至少执行一次。在这里,重点在于每个语句即每个语句都要被执行过。设计时要记住这一点。
  (2)判定覆盖:指设计足够的测试用例,使得程序中每个判定表达式至少获得一次”真”值和”假”值,从而使程序的每一个分支至少都通过一次,因此判定覆盖又称为”分支覆盖”。它和语句覆盖有什么不同呢r>   就在于判定,语句覆盖不管是真是假,只要执行过这句就成,而判定覆盖则必须让这个语句的执行结构为真和为假都要有测试用例给出。所以判定覆盖比语句覆盖严格些。但是判定覆盖也不能检查出全部错误,因为有些条件语句即使写错了,也同样能够产生正确真值或假值。
  比如 (a=2)or(x>1),由于这个or的存在,那么把x>1错写成x   (3)条件覆盖:是指设计足够的测试用例,使得判定表达式中每个条件的各种可能的值至少出现一次。这就比上面的单是判定覆盖要严格得多了,如上例,(a=2)
  or (x>1);在这里必须使a=2 、x>1,a≠2、x≤1均出现一次。
  (4)判定/条件覆盖:上面条件覆盖也不一定满足判定该,因为只符合条件覆盖的用例可能会不满足每个判定语句均有真值或假值出现。因此要两者兼顾,判定条件覆盖就是指设计足够
  的测试用例,使得判定表达式中每个条件的所有可能取值至少出现一次并且每个判定表达式所有可能的结果也至少出现一次。
  (5)条件组合覆盖:是指设计足够的测试用例,使得每个判定表达式中条件的各种或能的值的组合都至少出现一次。这就是前面两个覆盖的组合。
  (6)路径覆盖:是指测设计足够的测试用例,覆盖被测试程序中所有可能的路径。
  这六种覆盖进行比较有下面一个表:
  条件组合发现错误的能力较强,凡满足其标准的测试用例,也必然满足前四种覆盖标准。在实际的逻辑测试中,一般以条件组合覆盖为主设计测试用例,然后再补充部分用例来达到路径覆盖的测试标准。
  2、循环覆盖:当程序中存在循环结构时,要覆盖所有的路径是不可能的,但是可以通过限制循环结构来测试。
  3、基本路径测试:由于实际问题中,程序的路径是庞大的,因此要将覆盖的路径压缩到一定限度才能解决这个问题。基本路径测试就是在程序控制流程图的基础上,通过分析控制构造的环路复杂性,导出基本路径集合从面设计测试用例保证这些路径至少通过一次。
  再来看看黑盒技术
  黑盒测试是功能测试。测试的是程序的接口。在设计测试用例时有以下几种方法:等价类的划分、边界值分析、错误推测和因果图。这几种方法都不能提供一组完整的测试用例,在实际测试中应把各种方法结合起来使用。
  1、等价类的划分:是将输入数据按有效的或无效的(也称合理的或不合理的)划分成若干个等价类,测试每个等价类的代表值就等于对该类其他值的测试。用该法设计测试用例的步骤为:
  (1)划分等价类(列一个表)
  (2)确定测试用例:根据已划分的等价类,按以下步骤设计测试用例:
  1)为每个等价类编
  2)设计一个测试用例,使其尽可能多的覆盖尚未被覆盖过的合理等价类。重复这步直到所有合理等价类被测试用例覆盖。
  3)设计一个测试用例,使其只覆盖一个不合理等价类。重复这一步直到所有不合理等价类被覆盖。
  要注意课本上的例子,会应用这种方法设计测试用例
  2、边界值分析:也就是在为设计测试用例时,在等价类范围内选择一些边界值作为测试用例,这样可以比单用等价类划分法所选的测试用例能查出更多错误,因为实践表明,程序更容易在处理边界值时发生错误。
  3、错误推测:通常根据经验或直觉来推测程序中可能出现错误的情况,并有针对性的编写检查这些错误的测试用例。
  4、因果图:因果图能够有效地检测输入条件的各种组合可能会引起的错误。它的基本原理是通过画因果图,把用自然语言描述的功能说明转换为判定表,最后为判定表的每一列设计一个测试用例。
  在以上几种软件测试方法,各有所长,但各有所短,在实际测试中,应该采用综合策略,通常先用黑盒法设计基本的测试用例,再用白盒法补充一些必要的测试用例。
  本节具体要掌握的就是等价类划分及边界值的测试用例设计。
  四、软件测试过程(识记)
  软件测试的步骤通常有四步:单元测试、集成测试、确认测试和系统测试。
  1、单元测试主要针对模块的五个基本特征进行测试:模块接口、局部数据结构、重要的执行路径、错误处理和边界条件。单元测试时要用到”驱动模块”和”桩”模块。注意要概念:驱动模块是用来模拟被测试模块的上级调用模块。桩模块则用来代替被测试模块所调用的模块。
  2、集成测试有两种方法:非渐增式测试和渐增式测试。
  非渐增式测试是指首先对每个模块分别进行单元测试,再把所有模块组装成一个完整的系统进行的测试。而渐增式测试就是逐个把未经测试的模块组装到已经过测试的模块上去进行集成测试,每加入一个新模块进行一次集成测试,重复此过程直到程序组装完毕。渐增式测试有两种不同的组装方法:自顶向下和自底向上结合。注意两者区别。
  3、确认测试又称有效性测试,它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合。因而需求说明规格说明是确认测试的基础.确认测试有两项工作:进行确认测试与软件配置审查。
  4、系统测试:即要对软件所运行的整个系统(包括硬件、外设、其他软件和操作人员等)结合在一起进行测试,确定其是否能够协调工作。
  五、调试(识记)
  软件测试的目的是尽可能多地发现程序中的错误,而调试则是在进行了成功的测试之后才开始的工作。调试的目的是确定错误的原因和位置,并改正错误,因此调试也称为纠错(Debug)。
  调试方法有简单的调试方法、归纳法、演绎法和回溯法等。

第8章_软件维护
  软件维护是软件工程的一个重要任务,作为理论,本章的内容比较简单,多为识记领会内容,主要应注意一些概念。其中的软件可维护性是本章的重点内容。
  一、软件维护的内容
  有四种:校正性维护,适应性维护,完善性维护和预防性维护。
  1、校正性维护:指为了识别和纠正错误,修改软件性能上的缺陷,进行确定和修改错误的过程。占整个维护工作的21%.
  2、适应性维护:为了使本软件适应硬件和软件的变化而修改软件的过程称为适应性维护。占整个维护活动的25%。
  3、完善性维护:增加软件功能、增强软件性能、提高运行效率而进行的维护活动称为完善性维护。占整个维护工作的50%.
  4、预防性维护:为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。只占4%。
  二、维护的特点
  1、非结构化维护和结构化维护:主要是开发过程是否用软件工程方法,若各阶段均有相应的文档记录,则容易维护,采用结构化维护可以大大提高软件维护效率。
  2、软件维护的困难性:是由于软件需求分析和开发方法的缺陷。
  3、软件维护的费用:在总费用中的比重不断增加,已经上升到了70%~80%或更多,我们看到的软件不断升级就是维护的体现。
  三、维护任务的实施
  1、维护工作要建立维护机构,通常是成立维护小组,有临时维护小组和长期维护小组之分。
  2、维护的流程是:(1)制定维护申请 告。(2)审查申请 告并批准。(3)进行维护并做详细记录。(4)复审。
  3、维护技术:有两类维护技术,即面向维护的技术和维护支援技术。(1)面向维护技术是在软件开发阶段用来减少错误、提高软件可维护性的技术。(2)维护支援技术是在软件维护阶段用来提高维护作业的效率和质量的技术。
  4、维护的副作用:有三种:
  (1)编码副作用:即在修改源代码时可能引入错误。
  (2)数据副作用:在修改数据结构时,有可能造成软件设计与数据结构不匹配,因而导致错误,数据副作用是修改软件信息结构导致的结果。
  (3)文档副作用:即对可执行软件的修改没有反映在文档中,就会产生文档副作用。
  四、软件可维护性
  为了使软件能够易于维护,必须考虑使软件具有可维护性。
  1、软件可维护性是指软件能够被理解、校正、适应及增强功能的容易程度。
  软件的可维护性、可使用性、可靠性是衡量软件质量的几个主要特性。
  软件的可维护性是软件开发阶段的关键目标。
  软件可维护性的七个质量特征:可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。
  2、度量软件可维护性的方法:质量检查表、质量测试、质量标准。
  3、提高可维护性的方法:
  (1)建立明确的软件质量目标
  (2)利用先进的软件开发技术和工具
  (3)建立明确的质量保证工作
  (4)选择可维护的程序设计语言
  (5)改进程序文档
  注:本章的习题及答案基本上就是以上内容。在复习时,并不一定会出到这些题目,主要是对整个维护工作特点和过程的理解领会,在此基础上,不需要太多的记忆也能正确答题。

 

第10章面向对象的方法
  面向对象的方法是今后软件开发方法的主流。学习本章,最好是学过面向对象程序设计语言,这样可以对对象、类、类的层次结构、方法、消息等概念更容易理解。本章总的要求是,掌握面向对象的基本思想、基本概念、基本原理,掌握三种模型的基本概念和构造方法,掌握面向对象的分析、设计和实现的过程。
  一、面向对象的基本概念
  1、什么面向对象了解几个概念:
  1、对象:对象是人们要进行研究的任何事物。具体一点讲就是研究对象。它可以是有形实体,也可以是作用、事件、性能说明等,当然,如果女朋友成为你研究的对象时,对象也可以是你的女朋友。
  2、对象的状态和行为:对象有自身的状态,比如你的女朋友有她的姓名(叫小丽)、年龄(22岁)、工作单位等。对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为,比如”小丽.跳槽到(某公司)”这个行为将使她的工作单位这个状态发生变化。
  3、类:具有相同或相似性质的对象的抽象就是类。如桃树、李树、樟树等是具体的树,抽象之后得到”树”这个类。类具有属性,属性是状态的抽象,如一棵李树的高度是3米,樟树是10米,树则抽象出一个属性”高度”。类具有操作,它是对象行为的抽象。
  4、类的结构:有两种,一种是”一般-具体”结构,如植物、树都是类,它们之间是抽象到具体的关系,即树是一种(is a)植物。还有一种就是”整体-部分”结构,如计算机是类、CPU也是类,则计算机与CPU之间就是整体与部分的关系。
  5、消息和方法:对象之间进行通信的构造叫做消息,比如小丽是一个对象,上司发出一个消息:小丽.出差到(深圳)。这样,相应的对象接收到这个消息就会给予响应,在这个消息中,小丽是对象名,出差到就是方法名,深圳就是参数。在类中操作的实现过程叫做方法。上面的出差到(某地)这个方法如何实现呢,就是买车票,乘车到某地。这个过程就是方法。
  总之,面向对象这种思想很符合人们观察世界的自然思想。在很多时候我们可以用自然的观点去理解面向对象。
  2、面向对象的特征有四点:对象唯一性、分类性、继承性和多态性。
  3、面向对象的要素:抽象、封装性、共享性
  4、面向对象技术强调的是对象结构而不是程序结构。
  5、面向对象的开发方法主要有以下几种:Coad方法、Booch方法、OMT方法和OOSE方法,最新的统一建模语言UML则不仅统一了Booch方法,OMT方法、OOSE方法,而且对其作了进一上的发展,最终统一为大众所接受的标准建模语言。
  二、面向对象的模型(简单应用)
  面向对象的模型包括三个,它们分别是:描述系统数据结构的对象模型、描述系统控制结构的动态模型和和描述系统功能的功能模型。这三种模型都涉及到数据、控制和操作等共同的概念,只是每种模型描述的侧重点不同。这三种模型从三个不同但又密切相关的角度模拟目标系统,它们各自从不同的侧面反映了系统的实质性内容,综合起来则全面反映了对目标系统的需求。
  1、对象模型:它表示了静态的、结构化的系统数据性质,描述了系统的静态结构,它是从客观世界实体的对象关系角度来描述,表现了对象的相互关系。该模型主要关系的是系统中对象的结构、属性和操作,使用了对象图的工具来刻画,它是分析阶段三个模型的核心,也是其他两个模型的框架。涉及及的概念有,对象和类、关联和链。
  2、动态模型:是与时间和变化有关的系统性质。该模型描述了系统的控制结构,它表示了瞬时的、行为化的系统控制性质,它关系的是系统的控制,操作的执行顺序,它从对象的事件和状态的角度出发,表现了对象的相互行为。该模型描述的系统属性是触发事件,事件序列、状态、事件与状态的组织。使用状态图作为描述工具。涉及的重要概念是事件、状态、操作等。
  3、功能模型:描述了系统的所有计算。功能模型指出发生了什么,动态模型确定什么时候发生,而对象模型确定发生的客体。功能模型表明一个计算如何从输入值得到输出值,它不考虑所计算的次序。功能模型由多张数据流图组成。数据流图说明数据流是如何从外部输入、经过操作和内部存储输出到外部的。功能模型也包括对象模型中值的约束条件。功能模型说明对象模型中操作的含义、动态模型中动作的意义以及对象模型中约束的意义。相关的概念有:数据流图中的处理、数据流、动作对象、数据存储对象等。
  三、面向对象的分析(简单应用)
  面向对象分析的目的是对客观世界的系统进行建模。分析问题有三种用途:用来明确问题需求;为用户和开发人员提供明确需求;为用户和开发人员提供一个协商的基础,作为后继的设计和实现的框架。通过分析,建立对象模型、动态模型和功能模型。
  四、面向对象的设计(领会)
  1、面向对象设计的准则:
  (1)模块化:对象就是模块,它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。
  (2)抽象:包括过程抽象、数据抽象、规格说明抽象及参数化抽象等。
  (3)信息隐蔽:在面向对象方法中,信息隐蔽通过对象的封装性来实现。
  (4)低耦合:低耦合是设计的一个重要标准,应该避免对象之间的高耦合,强调对象间的低耦合。
  (5)高内聚:在面向对象设计中存在三种内聚:操作内聚、类内聚及一般-具体内聚,紧密的继承耦合与高度的一般–具体内聚是一致的。
  2、面向对象设计的启发规则:
  (1)设计结果应该清晰易懂
  (2)一般–具体结构的深度应适当
  (3)设计简单的类
  (4)使用简单的协议
  (5)使用简单的操作
  (6)把设计变动减至最小
  五、面向对象的实现(领会)
  面向对象实现主要包括两项工作,把面向对象设计结果翻译成用某种程序设计语言写成的面向对象程序;测试并调试面向对象程序。
  在开发过程,类的实现是核心问题。在用面向对象风格所写的系统中,所有的数据都被封装在类的实例中,而整个程序则被封装在一个更高级的类中。

 

文章知识点与官方知识档案匹配,可进一步学习相关知识算法技能树首页概览34782 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2015年4月10日
下一篇 2015年4月11日

相关推荐