精华内容
下载资源
问答
  • 软件工程是软件开发的指导思想、方法体系,这属于软件设计师需要掌握的核心...(3)系统设计基础知识:概要设计与详细设计的基本任务、系统设计的基本原理、系统模块结 构设计、结构化设计方法、面向数据结构的设...

    软件工程是软件开发的指导思想、方法体系,这属于软件设计师需要掌握的核心内容。  

    (1)软件工程知识:软件生存周期与软件生存周期模型、软件开发方法、软件开发项目管理、   软件开发工具与软件开发环境。

    (2)系统分析基础知识:系统分析的主要步骤、机构化分析方法。

    (3)系统设计基础知识:概要设计与详细设计的基本任务、系统设计的基本原理、系统模块结   构设计、结构化设计方法、面向数据结构的设计方法、系统详细设计。

    (4)系统实施基础知识:系统实施的基本内容、程序设计方法、程序设计的基本模块、系统测试、系统转换。

    (5)系统运行和维护基础知识:系统可维护性的概念、系统维护的类型、系统评价的概念和类型

    (6)软件质量管理基础知识:软件质量特性(ISO/IEC  9126软件质量模型)、软件质量保证、软件复杂性的概念及度量方法(McCabe度量法)、软件评审(设计质量评审、程序质量评审)、软件容错技术。

    (7)软件过程改进基础知识:软件能力成熟度模型CMM、统一过程(UP)与极限编程(XP)的基本概念。

    本章的考点主要集中以下方面:

    在软件生命周期与开发模型中,主要考查UP(统一过程)、XP(敏捷方法)以及传统软件开发模型的特点

    在系统开发方法论中,主要考查数据流图绘制原则、内聚与耦合

    在软件测试中,主要考查测试的阶段、白盒测试、黑盒测试、McCabe环路复杂度。  

    在软件质量保证中,主要考查软件质量特性。

    在软件过程改进中,主要考查CMM每个阶段的特点及关键过程域。

    在项目管理中,主要考查项目管理相关基本概念、Pert图风险管理


    目录

    一、软件工程知识

    1.开发生命周期模型

    2.开发模型

    二、系统开发方法论

    1. 结构化方法

    2. 面向对象基本概念

    三、软件测试与维护

    1.软件测试基础

    2.测试阶段

    3.白盒测试

    4.McCabe复杂度

    5.黑盒测试

    6.软件维护     

    四、软件质量保证与软件过程改进

    1.软件质量特性标准

    2.软件技术评审

    3.能力成熟度模型集成(CMMI)

    五、软件项目管理

    1. 项目管理九大知识领域

    2. 网络计划技术

    3. 甘特图

    4. 风险管理


    一、软件工程知识

    1.开发生命周期模型

    系统开发的生命周期是指一个系统历经计划、分析、设计、编程、测试、维护直至淘汰的整个过程。生命周期阶段的划分通常可以采用以下三种方法:

    Boehm划分法计划(问题定义、可行性研究)、开发(需求分析、总体设计、详细设计、编码、测试)、运行(维护)三大阶段。

    国标(GB8566-1988)划分法:可行性研究与计划、需求分析、概念设计、详细设计、实现、组装测试、确认测试、使用和维护。并在《GB/T8566-1995信息技术——软件生存期过程》中定义了获取过程、供应过程、开发过程、运行过程、维护过程、管理过程、支持过程七个部分。

    RUP划分法:分为初始、细化、构造、移交四个主要阶段。为了指导软件的开发,可以用不同的方式将软件生命周期中的所有开发活动组织起来,从而形  成不同的软件开发模型。

    2.开发模型

    软件开发模型是几乎每次考试都会考查的重要知识点,现在主要掌握各种开发模型的特点与其应用场合。

    瀑布模型:严格遵循软件生命周期各阶段的固定顺序,一个阶段完成再进入另一个阶段。其优   点是:可以使过程比较规范化,有利于评审;缺点在于:过于理想,缺乏灵活性,容易产生需求偏   差。所以瀑布模型的应用场合为:需求明确的项目、二次开发项目以及与原型法配合使用

    快速原型模型:采用了一种动态定义需求的方法,通过快速地建立一个能够反映用户主要需求   的软件原型,让用户在计算机上使用它,了解其概要,再根据反馈的结果进行修改,因此能够充分   体现用户的参与和决策。原型化人员对原型的实施很重要,衡量他们的重要标准是能否从用户的模   糊描述中快速地获取实际的需求。所以快速原型模型很好的弥补了瀑布模型的缺陷,它适合于需求不够明确的目

    演化模型:也是一种原型化开发,但与快速原型不同的是,快速原型模型在获得真实需求时,   就将抛弃原型。而演化模型则不然,它将从初始的模型中逐渐演化为最终软件产品,是一种渐进     式”原型法。其应用场合也是需求不明确的项目

    增量模型:它采用的是一种递增式”模型,它将软件产品划分成为一系列的增量构件,分别进行设计、编码、集成和测试。相对于原型法而言,这种模型其实是从系统开发的另一个方面看待问题,原型法关注点是“制作一个原型”,而增量模型的关注点是“系统的功能模块不是一次完成的,而是一块一块开发,以增加的方式进行的”。在现实开发中,我们会发现,一个项目开发过程既用了原型模型也用了增量模型。所以增量模型仍有利于进行需求不明确的项目开发

    螺旋模型:结合了瀑布模型和演化模型的优点,最主要的特点在于加入了风险分析。它是由制定计划、风险分析、实施工程、客户评估这一循环组成的,它最初从概念项目开始第一个螺旋。

    喷泉模型:主要用于描述面向对象的开发过程,最核心的特点是迭代。所有的开发活动没有明显的边界,允许各种开发活动交叉进行。

    UP:既是一个统一的软件开发过程,是一个通用过程框架,可以应付种类广泛的软件系统、不同的应用领域、不同的组织类型、不同的性能水平和不同的项目规模。UP是基于构件的,这意味着利用它开发的软件系统是由构件构成的,构件之间通过定义良好的接口相互联系。在准备软件系统所有蓝图的时候,UP使用的是统一建模语言UML。与其他软件过程相比,UP具有三个显著的特点:用例驱动、以基本架构为中心、迭代和增量

    UP中的软件过程在时间上被分解为四个顺序的阶段,分别是初始阶段、细化阶段、构建阶段和交付阶段。每个阶段结束时都要安排一次技术评审,以确定这个阶段的目标是否已经满足。如果评审结果令人满意,就可以允许项目进入下一个阶段。

    UP一般用于大型软件的开发

    敏捷开发:从敏捷开发一词的敏捷可以看出,该方法是一种轻量级的开发方法。这种开发方法     的主要思想是:传统的软件工程方法文档量太“重”了,现在需要进行减负,所以将不必要的文档都去掉,这就形成了敏捷开发。具体一点讲,敏捷方法包括:XP(极限编程)、自适应开发、水晶方法、特性驱动开发等。这些方法中,最著名的是XP方法(当然,XP方法最著名,并非因为方法本   身很好,而是提出该方法的人,是个牛人)。在XP方法中,提出了四大价值观沟通、简单、反馈、勇气五大原则快速反馈、简单性假设、逐步修改、提倡更改、优质工作。十二个最佳实践:计划游戏、小型发布、隐喻、简单设计、测试先行、重构、结对编程、集体代码所有制、持续集成、每周工作40小时、现场客户、编码标准

    二、系统开发方法论

    系统开发方法包括:结构化方法、原型法、面向对象方法。其中原型法仅用于需求分析阶段。

    1. 结构化方法

    结构化方法是一种传统的软件开发方法,它是由结构化分析、结构化设计和结构化程序设计三   部分有机组合而成的。它的基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自   顶向下,逐层分解,使得每个阶段处理的问题都控制在人们容易理解和处理的范围内。

    (1)结构化分析基础

    结构化分析即我们平时所说的需求分析阶段,该阶段的主要任务是:解决“做什么”的问题。结构化分析方法是以自顶向下,逐步求精为基点,以一系列经过实践的考验被认为是正确的原以理论和技术为支撑,以数据流图,数据字典,结构化语言,判定表,判定树等图形表达为主要手段,强调开发方法的结构合理性系统的结构合理性的软件分析方法。

    (2)结构化设计基础

    结构化设计是以结构化分析阶段所产生的成果为基础,进一步自顶而下、逐步求精和模块化的  过程。其主要工作内容是进行概要设计与详细设计(注:在结构化方法诞生时,架构设计还未提出,所以在此没有架构设计相关内容)。

    概要设计的主要任务是把需求分析得到的数据流图转换为软件结构和数据结构。设计软件结构    的具体任务是:将一个复杂系统按功能进行模块划分、建立模块的层次结构及调用关系、确定模块     间的接口及人机界面等。数据结构设计包括数据特征的描述、确定数据的结构特性、以及数据库的     设计。显然,概要设计建立的是目标系统的逻辑模型,与计算机无关。在概要设计过程中常常会使     用结构图(包括模块、调用、数据)、层次图HIPO(层次图加输入/处理/输出图)来描述程序的结构。

    详细设计是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。经常  使用的工具包括程序流程图盒图PAD图(问题分析图)PDL(伪码)

    (3)模块设计原则

    使用结构化设计方法进行设计时,需要遵循一定的原则,总结起来主要是两个方面:信息隐蔽  与模块独立

    信息隐蔽指在设计和确定模块时,使得一个模块内包含信息(过程或数据),对于不需要这些   信息的其他模块来说,是不能访问的。这样做的好处是:让所有的操作都通过标准的接口进行,这   样避免了随意调用模块内部变量产生的混乱与错误。通过信息隐蔽可以提高软件的可修改性、可测   试性和可移植性。所以不仅在结构化方法中有信息隐蔽原则,在面向对象方法中,也有相应机制进   行信息隐蔽。

    模块独立指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系最简单。  保持模块的高度独立性,也是在设计时的一个很重要的原则。通常我们用耦合(模块之间联系的紧   密程度)和内聚(模块内部各元素之间联系的紧密程度)两个标准来衡量,我们的目标是高内聚、低耦合。

    模块的内聚类型通常可以分为7种,根据内聚度从高到低排序如表 “模块的内聚类型“ 所示。

    模块的内聚类型

    而此相对应,模块的耦合类型通常也分为7种,根据耦合度从低到高排序如表 “模块的耦合类型” 所示。

    模块的耦合类型

    除了满足以上两大基本原则之外,通常在模块分解时还需要注意保持模块的大小适中;尽可   能减少调用的深度调用模块适中,即直接调用该模块的个数应该尽量大,但调用其他模块的个数则不宜过大;保证模块是单入口、单出口的模块的作用域应该在之内;功能应该是可预测的。

    2. 面向对象基本概念

    面向对象开发方法与结构化开发有着本质的差异,这种方法引入了对象的概念,将数据和方法封装在一起,提高了模块的聚合度,降低了耦合度,更大程度上支持软件复用。是现在最流行   和最具有发展前景的软件开发方法。在了解该方法的具体内容之前,需要对面向对象的一系列概念   有所了解。

    (1)对象

    在计算机系统中,对象是指一组属性及这组属性上的专用操作的封装体,它对象标识(名称)、属性(状态、数据、成员变量,也可以是另一个对象)和服务(操作、行为、方法)三个要   素组成。对象是系统中用来描述客观事物的一个实体,它们被封装为一个整体,以接口的形式对外提供服务。

    (2)

    类是一组具有相同属性和方法的对象的集合一个类中的每个对象都是这个类的一个实例(instance)。在系统分析和设计时,通常要把注意力集中在类上,而不是具体的对象上。每个类一般都有实例,没有实例的类是抽象类。抽象类不能被实例化(不能用new关键字去产生对象),抽象方法只需声明,而不需实现。是否建立了丰富的类库是衡量一个程序设计语言成熟与否的重要标志之一。

    (3)继承与泛化

    继承是面向对象方法中重要的概念,用来说明特殊类(子类)与一般类(父类)的关系,通常使用泛化来说明一般类与特殊类之间的关系,它们之间是一对多关系

    (4)封装

    面向对象系统中的封装单位是对象对象之间只能通过接口进行信息交流,对象外部不能对对象中的数据随意地进行访问封装的目的是使对象的定义和实现分离,这样,就能减少耦合,类内部的实现可以自由改变而不会影响其他的类或对象。同时,类具有严密的接口保护,使对象的属性或服务不会随意地被使用,对象的状态易于控制,可靠性随之增强。

    (5)多态性

    多态(多种形式)性指一般类中定义的属性或服务被特殊类继承后,可以具有不同的数据类型或表现出不同的行为,通常是使用重载和改写两项技术来实现的。

    (6)模板类

    模板类也称为类属类,它用来实现参数多态机制。一个类属类是关于一组类的一个特性抽象,它强调的是这些类的成员特征中与具体类型无关的那些部分,而用变元来表示与具体类型有关的那   些部分。

    (7)消息和消息通信

    消息是向对象发出的服务请求,它通常包括提供服务的对象标识、消息名、输入信息和回答信息。消息通信则是面向对象方法学中的一个重要原则,它与对象的封装原则密不可分,为对象间提供了唯一合法的动态联系的途径。

    2. 面向对象开发方法

    面向对象开发方法更接近于人类的自然思维。人类在认识和理解现实世界中普遍运用的三个构   造法则是区分对象及其属性、区分整体对象及其组成部分、区分及形成不同对象类。而面向对象正   是基于对象及属性、类属及成员、整体及其部分这些概念基础之上的。因而它必然更容易被理解和   运用。面向对象的方法将对象的属性及服务视为一个整体。  这更符合客观世界的规律,从而使其理解与实现起来更加容易,进一步减少维护的费用。

    面向对象开发方法的发展经历了一个漫长的周期,先后提出了多个不同的方法。这些方法中,   最有影响力的是:OMT方法、Coad/Yourdon方法、OOSE方法,而这些方法又进一步组合,形成了大家所熟知的UML。

    正是由于有多种不同的方法,所以它们强调的重点与方法的特色也各有不同,因此这里我们只  对方法中具有代表性的或是都需要完成的一些内容进行论述。

    (1)OOA

    OOA即面向对象的分析,它的任务是了解问题域所涉及的对象、对象间的关系和操作,然后构造问题的对象模型。问题域是指一个包含现实世界事物与概念的领域,这些事物和概念与所设计的系统要解决的问题有关。在这个过程中,抽象是最本质和最重要的方法。针对不同的问题,可以选择不同的抽象层次,过简或过繁都会影响到对问题的本质属性的了解和解决。

    (2)OOD

    OOD即面向对象的设计,它在分析对象模型的基础上,设计各个对象、对象之间的关系(例如,层次关系、继承关系等)和通信方式(例如,消息模式)等,其主要作用是对OOA的结果作进一步的规范化整理,以便能够被OOP直接接受。

    面向对象的设计需要遵循一系列的设计原则:

    单一职责原则:设计目的单一的类;

    开放-封闭原则:对扩展开放,对修改封闭

    李氏(Liskov)替换原则:子类可以替换父类;

    依赖倒置原则:要依赖于抽象,而不是具体实现;针对接口编程,不要针对实现编程; 

    接口隔离原则:使用多个专门的接口比使用单一的总接口要好;

    合重用原则:要尽量使用组合,而不是继承关系达到重用目的;

    迪米特(Demeter)原则(最少知识法则):一个对象应当对其他对象有尽可能少的了解。

    (3)OOP

    OOP指系统功能的编码,实现在OOD阶段所规定的各个对象所应完成的任务。它包括每个对象的内部功能的实现,确立对象哪一些处理能力应在哪些类中进行描述,确定并实现系统的界面、输出的形式等。

    三、软件测试与维护

    1.软件测试基础

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件品质,并对其是否能  满足设计要求进行评估的过程。测试的目的是发现尽可能多的缺陷

    为了让软件测试更有效率与效果,测试应遵循以下原则:

    (1)尽早、不断的进行测试;

    (2)程序员避免测试自己设计的程序;

    (3)既要选择有效、合理的数据,也要选择无效、不合理的数据;

    (4)修改后应进行回归测试;

    (5)尚未发现的错误数量与该程序已发现错误数成正比

    2.测试阶段

    软件测试按阶段划分,可分为:单元测试,集成测试,确认测试,系统测试

    (1)单元测试

    单元测试,也称模块测试,通常可放在编程阶段,由程序员对自己编写的模块自行测试,检查   模块是否实现了详细设计说明书中规定的功能和算法。单元测试主要发现编程和详细设计中产生的   错误,单元测试计划应该在详细设计阶段制定。

    单元测试期间着重从以下几个方面对模块进行测试:模块接口、局部数据结构、重要的执行通  路、出错处理通路、边界条件等。

    (2)集成测试

    集成测试,也称组装测试,它是对由各模块组装而成的程序进行测试主要目标发现模块间   的接口和通信问题。例如,数据穿过接口可能丢失;一个模块对另一个模块可能由于疏忽而造成有害影响;把子功能组合起来可能不产生预期的主功能;个别看来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有问题等。集成测试主要发现设计阶段产生的错误,集成测试计划应该在概要设计阶段制定。

    集成的方式可分为非渐增式渐增式

    非渐增式集成先测试所有的模块,然后一下子把所有这些模块集成到一起,并把庞大的程序作为一个整体来测试。这种测试方法的出发点是可以一步到位,但测试者面对众多的错误现象,往往难以分清哪些是真正的错误,哪些是由其他错误引起的假性错误,诊断定位和改正错误也十分困难。非渐增式集成只适合一些非常小的软件

    渐增式集成将单元测试和集成测试合并到一起,它根据模块结构图,按某种次序选一个尚未   测试的模块,把它同已经测试好的模块组合在一起进行测试,每次增加一个模块,直到所有模块被   集成在程序中。这种测试方法比较容易定位和改正错误,目前在进行集成测试时已普遍采用渐增式   集成

    (3)确认测试

    确认测试(Validation    Testing)主要依据软件需求说明书检查软件的功能、性能及其他特征是否与用户的需求一致。确认测试计划应该在需求分析阶段制定

    软件配置复查是确认测试的另一项重要内容。复查的目的是保证软件配置的所有成分都已齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节。

    如果一个软件是为某个客户定制的,最后还要由该客户来实施验收测试(acceptance testing便确认其所有需求是否都已得到满足。由于软件系统的复杂性,在实际工作中,验收测试可能会持续到用户实际使用该软件之后的相当长的一段时间。

    如果一个软件是作为产品被许多客户使用的,不可能也没必要由每个客户进行验收测试。绝大   多数软件开发商都使用被称为α(Alpha)测试和β(Beta)测试的过程,来发现那些看起来只有最终用户才能发现的错误。

    α测试由用户在开发者的场所进行,并且在开发者的指导下进行测试。开发者负责记录发现的错   误和使用中遇到的问题。也就是说,α测试是在受控的环境中进行的。

    β测试是在一个或多个用户的现场由该软件的最终用户实施的,开发者通常不在现场,用户负责记录发现的错误和使用中遇到的问题并把这些问题报告给开发者。也就是说,β测试是在“非受控的”环境中进行的。

    经过确认测试之后的软件通常就可以交付使用了。

    (4)系统测试

    系统测试的对象是完整的、集成的计算机系统,系统测试的目的是在真实系统工作环境下,验   证完整的软件配置项能否和系统正确连接,并满足系统/子系统设计文档和软件开发合同规定的要      求。系统测试的技术依据是用户需求或开发合同,除应满足一般测试的准入条件外,在进行系统测   试前,还应确认被测系统的所有配置项已通过测试,对需要固化运行的软件还应提供固件。

    一般来说,系统测试的主要内容包括功能测试、健壮性测试、性能测试、用户界面测试、安全   性测试、安装与反安装测试等,其中,最重要的工作是进行功能测试与性能测试。功能测试主要采   用黑盒测试方法性能测试主要验证软件系统在承担一定负载的情况下所表现出来的特性是否符合   客户的需要,主要指标有响应时间、吞吐量、并发用户数和资源利用率等。

    3.白盒测试

    白盒测试,又称透明盒测试、结构测试等,软件测试的主要方法之一。测试应用程序的内部结   构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计   测试案例。测试者了解待测试程序的内部结构、算法等信息,这是从程序设计者的角度对程序进行   的测试。

    白盒测试可以应用于单元测试、集成测试和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。

    白盒测试主要是从覆盖源程序语句的详尽程度来分析。逻辑覆盖标准包括以下不同的覆盖标  准:语句覆盖、判定覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、路径覆盖

    语句覆盖为了暴露程序中的错误,程序中的每条语句至少应该执行一次。该方法会选择足够  多的测试数据,使被测程序中每条语句至少执行一次。语句覆盖是很弱的逻辑覆盖。

    判定覆盖比语句覆盖稍强的覆盖标准是判定覆盖。判定覆盖的含义是:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个 取“真”分支和取“假”分支至少经历一次,因此判定覆盖又称为分支覆盖。

    条件覆盖:在设计程序中,一个判定语句是由多个条件组合而成的复合判定。为了更彻底地实   现逻辑覆盖,可以采用条件覆盖的标准。条件覆盖的含义是:构造一组测试用例,使得每一判定语   句中每个逻辑条件的可能值至少满足一次

    多条件覆盖:多条件覆盖也称条件组合覆盖,它的含义是:设计足够的测试用例,使得每个判   定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、   条件覆盖和条件判定组合覆盖的。

    路径覆盖:最全面的覆盖。路径覆盖的含义是,选取足够的测试用例,使得程序的每条可能执  行到的路径都至少经过一次(如果程序中有环路,则要求每条环路径至少经过一次)

    4.McCabe复杂度

    McCabe复杂度属于白盒测试技术。McCabe复杂度包括环路复杂度(Cyclomaticcomplexity)、基本复杂度、模块设计复杂度、设计复杂度和集成复杂度等。在软件设计师的考试中,要求掌握环路复杂度。

    McCabe度量标准是将程序的流程图转化为有向图,也就是控制流图,然后以图论的知识和计算方法来衡量软件的质量。如图(a)对于应控制流程图是(b)。

    (a)程序流程图
    (b)控制流程图

                                                                     程序流程图和对应的控制流图 

    将程序流程图转换成控制流程图以后,就可以计算其环路复杂度了。 计算有向图G的环路复杂度公式为:

    V(G)=m-n+2

    说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数,n是G中的节点数。  

    在图(b)中,有向弧数为15,结点数为12,所以环路复杂度为:15-12+2=5。

    5.黑盒测试

    黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序   看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测   试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据   而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面   和软件功能进行测试

    常用的黑盒测试法包括:等价类划分、边值分析、错误推测和因果图

    (1)等价类划分

    在设计测试用例时,等价类划分是用得最多的一种黑盒测试方法。所谓等价类就是某个输入域   的集合,对于一个等价类中的输入值来说,它们揭示程序中错误的作用是等效的。也就是说,如果   等价类中的一个输入数据能检测出一个错误,那么等价类中的其他输入数据也能检测出同一个错误;反之,如果等价类中的一个输入数据不能检测出某个错误,那么等价类中的其他输入数据也不   能检测出这一错误(除非这个等价类的某个子集还属于另一等价类)。

    如果一个等价类内的数据是符合(软件需求说明书)要求的、合理的数据,则称这个等价类为  有效等价类。有效等价类主要用来检验软件是否实现了软件需求说明书中规定的功能

    如果一个等价类内的数据是不符合(软件需求说明书)要求的、不合理或非法的数据,则称这  个等价类为无效等价类。无效等价类主要用来检验软件的容错性

    黑盒测试中,利用等价类划分方法设计测试用例的步骤如下。

    ①根据软件的功能说明,对每一个输入条件确定若干个有效等价类和若干个无效等价类,并为  每个有效等价类和无效等价类编号。

    ②设计一个测试用例,使其覆盖尽可能多的尚未被覆盖的有效等价类。重复这一步,直至所有  的有效等价类均被覆盖。

    ③设计一个测试用例,使其覆盖一个尚未被覆盖的无效等价类。重复这一步,直至所有的无效  等价类均被覆盖。

    应当特别注意,无效等价类用来测试非正常的输入数据,因此每个无效等价类都有可能查出软件中的错误,所以要为每个无效等价类设计一个测试用例。

    (2)边值分析

    经验表明,软件在处理边界情况时最容易出错。设计一些测试用例,使软件恰好运行在边界附近,暴露出软件错误的可能性会更大一些。通常,每一个等价类的边界,都应该着重测试,选取的测试数据应该恰好等于、稍小于或稍大于边界值。将等价类划分法和边值分析法结合使用,更有可能发现软件中的错误。

    (3)错误推测

    使用等价类划分和边值分析技术,有助于设计出具有代表性的、容易暴露软件错误的测试方案。但是,不同类型不同特征的软件通常又有一些特殊的容易出错的地方。错误推测法主要依靠测   试人员的经验和直觉,从各种可能的测试方案中选出一些最可能引起程序出错的方案。

    (4)因果图

    因果图法是根据输入条件与输出结果之间的因果关系来设计测试用例的,它首先检查输入条件的各种组合情况,并找出输出结果对输入条件的依赖关系,然后为每种输出条件的组合设计测试用例。

    6.软件维护     

    软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改。在修改   时应充分利用源程序,修改后应填写程序改登记表,并在程序变更通知书上写明新旧程序的不同之处。

    软件维护是整个软件生命周期中最长的一个阶段,同时他也花费了整个软件生命周期中最多的    成本,20世纪80年代末用于软件维护的花费约为整个软件生命周期总花费的75%,而且还在逐年上升。

    软件维护通常可分为以下四种类型:

    改正性维护:是指改正在系统开发阶段已发生而系统测试阶尚未发现的错误。这方面的维护工   作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行;而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。

    适应性维护:是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工   作量占整个维护工作量的18%~25%。由于目前计算机硬件价格的不断下降,各类系统软件层出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。

    完善性维护:这是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些   在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另   外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重最大。

    预防性维护:为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应  主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如:目前的网络带宽够用,但新系统一旦上线,将面临带宽不够的风险,此时进行带宽的扩容就是一种预防性维护。这方面的维护工作量占整个维护工作量的4%左右。

    在软件维护这个主题中,另一个值得注意的方面是:软件的可维护性问题。软件的可维护性是    指理解、改正、改动、改进软件的难易程度。根据Boehm质量模型,通常影响软件可维护性的因素有可理解性、可测试性和可修改性

    (1)可理解性

    可理解性指维护人员理解软件的结构、接口、功能和内部过程的难易程度

    (2)可测试性

    可测试性指测试和诊断软件错误的难易程度

    (3)可修改性

    可修改性指修改软件的难易程度

    为了提高软件的可维护性,在软件生命周期的各个阶段都必须充分考虑维护问题。先进的软件工程方法是软件可维护的基础保证。

    面向对象方法学的对象封闭机制、消息通信机制、继承机制和多态机制从根本上提高了软件的可理解性、可测试性和可修改性。

    结构化设计的几条主要原则,如模块化、信息隐蔽、高内聚、低耦合等,对于提高软件的可理解性、可测试性和可修改性也都有重要的作用。

    另外,书写详细正确的文档、书写源文件的内部注解、使用良好的编程语言、具有良好的程序设计风格,也有助于提高软件的可理解性。使用先进的测试工具、保存以前的测试过程和测试用例,则有助于提高软件的可测试性。

    四、软件质量保证与软件过程改进

    软件质量就是软件与显性隐性需求相一致的程度。

    软件质量保证,就是保证软件产品充分满足消费者要求的质量而进行的有计划、有组织的活动。它主要包括质量方针的制定和展开、质量保证方针和质量保证标准的制定、质量保证体系的建   立和管理、明确各阶段的质量保证工作、各阶段的质量评审、确保设计质量、重要质量问题的提出   与分析、总结实现阶段的质量保证活动、整理面向用户的文档和说明书、产品质量和质量保证系统   的鉴定、质量信息的收集分析及使用。而软件过程改进同样要靠标准作为指导方针,所以在本节将   介绍到很多与质量相关的标准。

    1.软件质量特性标准

    为了能够统一地描述软件质量特性,形成了许多质量特性标准,其中最常用的有国际通用的ISO/IEC 9126软件质量模型McCall软件质量模型

    (1)IEO/IEC 9126模型

    IEO/IEC9126模型是考试当中经常考查的一个知识点,考查方式主要是在选择题中,选出一个质量属性类中不属于(或属于)这一类的子特性,所以要求考生掌握此标准中的质量属性分类与其子特性。值得注意的是IEO/IEC9126模型等价于我国的国家标准《GB/T 16120—1996 软件产品评价、质量特性及其使用指南》。

    《IEO/IEC 9126模型》

    (2)McCall质量模型

    McCall质量模型从软件运行、软件修改和软件转移三个方面来考查软件的质量,其体系如图 “McCall质量模型体系表” 所示。

    McCall质量模型体系表
    McCall质量模型体系

     

    2.软件技术评审

    正式的技术评审FTR(Formal Technical   Review)是软件工程师组织的软件质量保证活动。它通常会采用系统化、严密的过程,包括制订计划、总体会议、做准备、开会、返工、追踪和因果分析。应培训审查者,依赖于缺陷检查表和其他错误分析技术;不是由作者来主持主审,而是由主持人陈述。

    制订计划:确定谁参加,一般需要将人数控制在7人之内;确定准备哪些内容。  总体会议:确定评审的背景、假设及目标。

    做准备:评审员预先阅读评审的材料。

    评审会议:主持人引导,根据预先准备的检查表进行评审。返工:评审会议是为了发现问题,问题应在会后进行返工。跟踪:确定错误已经修改,并通知所有的评审人。         

    3.能力成熟度模型集成(CMMI)

    能力成熟度模型集成融合了多种模型,形成了组织范围内过程改进的单一集成模型,其主要目   的是消除不同模型之间的不一致和重复,降低基于模型进行改进的成本。CMMI有两种表示法:阶段表示法和连续式表示法。这两种表示方法各有优缺点,均采用统一的24个过程域,它们在逻辑上是等价的,对同一个组织采用两种模型分别进行CMMI评估,得到的结论应该是相同的。但在考试时,往往涉及的是阶段表示法,所以在此仅对阶段表示法进行说明。

    阶段式模型基本沿袭CMM模型框架,仍保持五个成熟等级,但关键过程域做了一些调整和扩充,如表 “过程域的阶段式分组” 所示。

    过程域的阶段式分组

     

    当组织通过了某一等级过程域中的全部过程,即意味着该组织的成熟度达到了这一等级。利用  阶段式模型对组织进行成熟度度量,概念清晰、易于理解、便于操作。

    五、软件项目管理

    软件项目本身是复杂的,如果没有仔细地计划,复杂的项目是不可能成功的。一个计划良好的项目将受到有效的控制,进展明显,而参加该项目的人员都会得到支持以进行其工作。软件项目本   身也具有风险性,如果没有有效的风险管理也是不能成功的。

    通常软件工程项目的管理比其他工程项目的管理更困难,这是因为:

    软件产品不可见。开发的进度及产品的质量是否符合要求不明显,比较难进行把握。

    没有标准的软件过程。尽管近几年来“软件过程改进”领域有许多进步,但由于团队、人员的个性化因素,还不存在一个放之四海皆真理的标准化软件过程。

    大型软件项目常常是一次性项目。由于这些项目都是“前无古人”的,因此缺乏可以借鉴的历史经验。

    这节主要包括网络计划技术中的一些计算问题以及项目管理相关的一些基本概念。

    1. 项目管理九大知识领域

    在PMBOK中提出了项目管理九大知识领域,此后这九大知识领域为业界普遍认同。九大知识领域中有四大核心领域:范围管理、时间管理、成本管理、质量管理,四大辅助领域:人力资源、沟通管理、风险管理、采购管理以及负责整体协调的整体管理。

    整体管理:整体管理负责项目的全生命周期管理、全局性管理和综合性管理。全生命周期管理   意味着项目整体管理过程负责管理项目的启动阶段直到项目收尾阶段的整个项目生命周期。全局性   管理意味着项目整体管理过程负责管理项目的整体包括项目管理工作、技术工作和商务工作等。综   合性管理意味着项目整体管理过程负责管理项目的需求、范围、进度、成本质量、人力资源、沟通、风险和采购。

    范围管理:范围管理确定在项目内包括什么工作和不包括什么工作,由此界定的项目范围在项  目的全生命周期内可能因种种原因而变化,项目范围管理也要管理项目范围的这种变化。

    时间管理:时间管理又称进度管理,时间管理的职责是保证项目的所有工作都在一个指定的时  间内完成。

    成本管理:成本管理就是要确保在批准的预算内完成项目。

    质量管理:质量管理是指确定质量方针、目标和职责,并通过质量体系中的质量计划、质量控  制、质量保证和质量改进来使其实现的所有管理职能的全部活动。

    人力资源管理:人力资源管理是为项目正常开展,而进行的招聘(选择)项目组人员并进行有   效组织、考核绩效支付报酬、进行有效激励、结合组织与个人需要进行有效开发以便实现最优组织绩效的全过程。

    沟通管理:沟通管理是指项目组为项目干系人之间进行良好沟通而进行的管理活动。其内容包  括沟通计划编制、信息分发、绩效报告、项目干系人管理。

    风险管理:所谓风险管理,就是要在风险成为影响项目成功的威胁之前,识别、着手处理并消  除风险的源头。

    采购管理:采购管理是为完成项目工作,从项目团队外部购买或获取所需的产品、服务或成果  的过程。

    2. 网络计划技术

    用网络分析的方法编制的计划称为网络计划,它是一种编制大型工程项目进度计划的有效方法。计划借助于网络表示各项工作与所需要的时间,以及各项工作的相互关系。通过网络分析研究    工程费用与工期的关系,并找出在编制计划及计划执行过程中的关键路径,这种方法称为关键路径法(Critical Path Method,CPM)。还有一种方法,也是应用网络分析方法与网络计划,但它注重于对各项工作安排的评价和审查,这种方法称为计划评审技术(Program Evaluation and Review Technique,PERT) 。

    (1)关键路径

    在现代管理中,人们常用有向图来描述和分析一项工程的计划和实施过程,一项工程常被分为多个小的子工程,这些子工程被称为活动。在有向图中,若以顶点表示活动,弧表示活动之间的先      后关系,这样的图简称为AOV(Activity On Vertex)网;若以顶点表示事件,弧表示活动,权表示完成该活动所需的时间(称为活动历时或持续时间),这样的图称为AOE(Activity On Edge) 网。例如,图 “AOE网络的例子” 表示一个具有10个活动的某个工程的AOE网。图中有7个顶点,分别表示事件1~7,其中1表示工程开始状态,7表示工程结束状态。

    AOE网络的例子

     

    因AOE网中的某些活动可以并行地进行,所以完成工程的最少时间是从开始顶点到结束顶点的最长路径长度,称从开始顶点到结束顶点的最长路径为关健路径(临界路径),关键路径上的活动为关键活动。

    为了找出给定的AOE网络的关键活动,从而找出关键路径,先定义几个重要的量:

    (1)Ve(j)、Vl(j):顶点j事件最早、最迟发生时间。

    (2)e(i)、l(i):活动i最早、最迟开始时间。

    从源点V1到某顶点Vj的最长路径长度,称为事件Vj的最早发生时间,记作Ve(j)。Ve(j)也是以Vj为起点的出边<Vj,Vk>所表示的活动ai的最早开始时间e(i)。

    在不推迟整个工程完成的前提下,一个事件Vj允许的最迟发生时间,记作Vl(j)。显然,l(i)=Vl(j)-(ai所需时间),其中j为ai活动的终点。满足条件l(i)=e(i)的活动为关键活动,关键活动所组成的路径称   为关键路径。

    求顶点Vj的Ve(j)和Vl(j)可按以下两步来做:

    (1)由源点开始向汇点递推

    其中,E1是网络中以Vj为终点的入边集合。

    (2)由终点(汇点)开始向源点递推

    其中,E2是网络中以Vj为起点的出边集合。

    要求一个AOE网的关键路径,一般需要根据以上变量列出一张表格,逐个检查。例如,求图 “求关键路径的过程” 所示的AOE网的关键路径。

    求关键路径的过程

     

    因此,图7-6的关键活动为a1,a2,a4,a8和a9,其对应的关键路径有两条,分别为V1→V2→V5→V7和V1→V4→V5→V7,长度都是10。

    当然,上面所描述的方法用来求关键路径有一定的复杂度,需要进行大量的计算才能得到结果,这是一种严谨的方法,可以应对复杂的AOE网络图。,然而考试中涉及的图往往很简单,此时   再用这种方法来解决问题,会浪费不必要的时间,所以可以直接用“目测法“快速解决问题。所目测法,就是直接观察AOE网络中,从起点到终点,哪条路径最长,最长的那条路径,便是关键路径,而最长路径的长度,就是关键路径长度。

    3. 甘特图

    甘特图(Gantt图)用水平线段表示任务的工作阶段;线段的起点和终点分别对应着任务的开工时间和完成时间;线段的长度表示完成任务所需的时间。图 “甘特图” 给出了一个具有5个任务的甘特图。如果这5条线段分别代表完成任务的计划时间,则在横坐标方向附加一条可向右移动的纵线。它可随着项目的进展,指明已完成的任务(纵线扫过的)和有待完成的任务(纵线尚未扫过的)。我们从甘特图上可以很清楚地看出各子任务在时间上的对比关系。

    在甘特图中,每一任务完成的标准,不是以能否继续下一阶段任务为标准,而是必须交付应交   付的文档与通过评审为标准。因此在甘特图中,文档编制与评审是软件开发进度的里程碑。甘特图   的优点明了各任务的计划进度和当前进度,能动态地反映软件开发进展情况缺点难以反映   多个任务之间存在的复杂的逻辑关系

    甘特图

     

    4. 风险管理

    风险是指“损失或伤害的可能性”。所以风险包含这些特征:不确定性、针对未来、会带来损失。

    项目风险管理通常包括风险识别、风险估计(风险评估)和风险驾驭(风险控制)三个主要活动。

    风险识别的主要工作是找到潜在风险并将其文档化,它包括项目风险、技术风险和商业风险三种

    风险估计则是通过对各种风险发生的可能性和破坏性这两个方面进行评估,并将它们按优先级   进行排列。

    风险驾驭则是指利用某种技术,如原型化、软件自动化、软件心理学、可靠性工程学等   方法设法避开风险

    当在软件工程环境中考虑风险时,主要是基于关心未来、关心变化、关心选择这三个概念提出  的。项目风险关系着项目计划的成败,而商业风险关系着软件的生存能力。在进行软件工程分析时,项目管理人员要进行四种风险评估活动,包括建立表示风险概率的尺度,描述风险引起的后果,估计风险影响的大小,确定风险估计的正确性。

    在风险管理时,经常会应用风险曝光度(Risk   Exposure)这个概念,它是计算方法是风险出现的概率乘以风险可能造成的损失。假设正在开发的软件项目可能存在一个未被发现的错误,而这个错误出现的概率是0.8%,给公司造成的损失将是2000000元,那么这个错误的风险曝光度就应为2000000×0.8%=16000元。

     

     

     

     

     

    展开全文
  • 软件设计规范

    2015-03-11 11:57:50
    CPU的基本过程,产生了指令和数据,指令天生具有子程序的基因(一般流程),数据天生具有数据结构(寻址能力)的基因。高级的构造一般也是这种结构的类似:设计一套类似CPU的机制,支撑程序和数据;独特的“寻址机制...
  • 如:大名鼎鼎VMware就属于系统虚拟机,VMware是完全对物理计算机仿真,提供一个可以运行完整操作系统的软件平台; 程序虚拟机代表就是java虚拟机,它专门为执行单个计算机程序而设计;在java虚拟机中执行...

    虚拟机的分类

    虚拟机大体上分为系统虚拟机和程序虚拟机;

              如:大名鼎鼎的VMware就属于系统虚拟机,VMware是完全对物理计算机的仿真,提供一个可以运行完整操作系统的软件平台;

              程序虚拟机的代表就是java虚拟机,它专门为执行单个计算机程序而设计;在java虚拟机中执行的指令我们称之为class字节码指令。
    无论系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中;

    java虚拟机的基本结构:

    虚拟机的基本结构

    1.1 类加载子系统:

    类加载子系统:负责从磁盘文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。

    1.2 方法区:

    和堆一样,方法区是一块所有线程共享的内存区域,它用于保存系统的类信息,比如类的字段、方法、常量池等。
    方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类,导致方法区的溢出,虚拟机同样会抛出内存溢出错误。

    在JDK1.7和之前版本的JDK中,方法区可以理解为永久区(Perm)。永久区可以使用参数-XX:PermSize和-XX:MaxPermSize指定,默认情况下,-XX:MaxPermSize为64M。
    一个大的永久区可以保存更多的类信息。如果系统使用了一些反射动态代理,那么有可能会在运行时生成大量的类,如果这样,就需要设置一个合理的永久区大小,确保不发生永久区内存溢出。

    在JDK1.8中,永久区已经被彻底移除,取而代之的是元数据区,元数据区大小可以使用参数-XX:MaxMetaspaceSize指定(一个大的元数据区可以使系统支持更多的类),这是一块堆外的直接内存。与永久区不同,如果不指定大小,默认情况下,虚拟机会耗尽所有的可用系统内存。
    如果元数据区发生异常,虚拟机一样会抛出异常。

    1.3 堆:

    java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。几乎所有的java对象实例都存放在java堆中。堆空间是所有线程共享的,这是一块与java应用密切相关的内存空间。

    java堆是和应用程序关系最为密切的内存空间,几乎所有的对象都存放在堆上。并且java堆是完全自动化管理的,通过垃圾回收机制,垃圾对象会被自动清理,而不需要显示的释放。

    根据java回收机制的不同,java堆有可能拥有不同的结构。最为常见的一种构成是将整个java堆分为新生代和老年代。其中新生代存放新生对象或者年龄不大的对象,老年代则存放老年对象。新生代有可能分为eden区、s0区、s1区,s0区和s1区也被称为from和to区,他们是两块大小相同、可以互换角色的内存空间。
    如下图,显示了一个堆空间的一般结构:
    堆内存图片
    补充:对象如何进入老年代?

    一般来讲,对象首次创建的时候会被放置在新生代的eden区中,在对象经历一次GC后,会进入到s0或者s1区,在s0或者s1区中的对象“年龄”达到一定的大小,就会自动的离开年轻代进入老年代中,其中“对象的年龄”是由对象经历过得GC次数决定的。对于一个对象而言,在新生代每次GC之后,如果没有被回收则年龄增加1。可以通过-XX:MaxTenuringThreshold设定对象进入老年代的年龄阈值,超过这个阈值,就会进入到老年代中,默认情况为15.

    *注意:堆中除了上图划分结构层次外,还存在TLAB(ThreadLocal Allocation Buffer)区域,在下文中将详细介绍该区域的作用,这里需要知道TLAB也是存在于堆上的。

    1.4 直接内存:

    java的NIO库允许java程序使用直接内存。直接内存是在java堆外的、直接向系统申请的内存空间。通常访问直接内存的速度会优于java堆。因此出于性能的考虑,读写频繁的场合可能会考虑使用直接内存。由于直接内存在java堆外,因此它的大小不会直接受限于Xmx指定的最大堆大小,但是系统内存是有限的,java堆和直接内存的总和依然受限于操作系统能给出的最大内存。

    1.5 垃圾回收器:

    垃圾回收系统是java虚拟机的重要组成部分,垃圾回收器可以对方法区、java堆和直接内存进行回收。其中,java堆是垃圾收集器的工作重点。
    和C/C++不同,java中所有的对象空间释放都是隐式的,也就是说,java中没有类似free()或者delete()这样的函数释放指定的内存区域。
    对于不再使用的垃圾对象,垃圾回收系统会在后台默默工作,默默查找、标识并释放垃圾对象,完成包括java堆、方法区和直接内存中的全自动化管理。

    1.6 Java栈:

    每一个java虚拟机线程都有一个私有的java栈,一个线程的java栈在线程创建的时候被创建,java栈中保存着帧信息,java栈中保存着局部变量、方法参数,同时和java方法的调用、返回密切相关。

    java栈是一块线程私有的内存空间。如果说,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关。线程执行的基本行为是函数调用,每次函数调用的数据都是通过java栈传递的。

    java栈与数据结构上的栈有着类似的含义,它是一块先进后出的数据结构,只支持出栈和进栈两种操作,在java栈中保存的主要内容为栈帧。每一次函数调用,都会有一个对应的栈帧被压入java栈,每一个函数调用结束,都会有一个栈帧被弹出java栈。如下图:栈帧和函数调用。函数1对应栈帧1,函数2对应栈帧2,依次类推。函数1中调用函数2,函数2中调用函数3,函数3调用函数4.当函数1被调用时,栈帧1入栈,当函数2调用时,栈帧2入栈,当函数3被调用时,栈帧3入栈,当函数4被调用时,栈帧4入栈。当前正在执行的函数所对应的帧就是当前帧(位于栈顶),它保存着当前函数的局部变量、中间计算结果等数据。

    当函数返回时,栈帧从java栈中被弹出,java方法区有两种返回函数的方式,一种是正常的函数返回,使用return指令,另一种是抛出异常。不管使用哪种方式,都会导致栈帧被弹出。

    在一个栈帧中,至少包含局部变量表、操作数栈和帧数据区几个部分。
    java栈
    提示:由于每次函数调用都会产生对应的栈帧,从而占用一定的栈空间,因此,如果栈空间不足,那么函数调用自然无法继续进行下去。当请求的栈深度大于最大可用栈深度时,系统会抛出StackOverflowError栈溢出错误。

    局部变量表:

    局部变量表是栈帧的重要组成部分之一。它用于保存函数的参数以及局部变量,局部变量表中的变量只在当前函数调用中有效,当函数调用结束,随着函数栈帧的弹出销毁,局部变量表也会随之销毁。

    由于局部变量表在栈帧之中,因此,如果函数的参数和局部变量很多,会使得局部变量表膨胀,从而每一次函数调用就会占用更多的栈空间,最终导致函数的嵌套调用次数减少。

    在相同的栈容量下,局部变量少的函数可以支持更深的函数调用。

    栈帧中局部变量表中的槽位是可以重用的,如果一个局部变量过了其作用域,那么在其作用域之后申明的新的局部变量就很有可能会复用过期局部变量的槽位,从而达到节省资源的目的。

    操作数栈:

    操作数栈是栈帧的主要内容之一,它主要用于保存计算过程中的中间结果,同时作为计算过程中变量临时的存储空间。操作数栈也是一个先进后出的数据结构,只支持入栈和出栈两种操作,许多java字节码指令都需要通过操作数栈进行参数传递。比如add指令,它就会在操作数栈中弹出两个整数并进行加法计算,计算结果会被入栈,如图:显示了iadd前后操作数栈的变化。

    帧数据区:

    除了局部变量表和操作数栈,java栈帧还需要一些数据来支持常量池的解析、正常方法返回和异常处理等。大部分java字节码指令需要进行常量池访问,在帧数据区中保留着访问常量池的指针,方便程序访问常量池。

    当方法抛出异常时,虚拟机就会查找对应的异常表来处理,如果无法在异常表中找到合适的处理方法,则会结束当前函数调用,返回调用函数,并在调用函数中抛出相同的异常,并查找调用函数的异常表来进行处理。

    堆、栈、方法区概念和联系

    堆解决的是数据存储的问题,即数据怎么放、放在哪儿。
    栈解决程序的运行问题,即程序如何运行,或者说如何处理数据。
    方法区则是辅助堆栈的,用来存储类加载器加载进jvm的class信息、静态变量;

    对象首先分配在eden区,在一次Young GC后,如果对象还存活则会进入S0(from)或者S1(to).之后每次Young GC后如果对象存活,它的年龄就会加1,当对象年龄达到一定条件后,就会被认定为是老年对象,从而进入老年代。

    package com.founder.pojo;  
    public class User {
    		 public int id;  
    		 public User(int id) { this.id = id; } 
    		  public void show(){ System.out.println("My ID is " + id); }  
    		  public static void main(String[] args) { 
    		  			User s1 = new User(1); 
    		  			User s2 = new User(2); 
    		  			 s1.show();
    		  			 s2.show(); 
    		  	} 
    }
    

    User类(SimpleHeap类) 的信息存放在方法区,主函数中的s1和s2存放在JAVA栈中,并且指向堆中的两个实例。

    在这里插入图片描述

    1.7 本地方法栈:

    本地方法栈和java栈非常类似,最大的不同在于java栈用于方法的调用,而本地方法栈则用于本地方法的调用,作为对java虚拟机的重要扩展,java虚拟机允许java直接调用本地方法(通常使用C编写)

    1.8 PC寄存器:

    PC(Program Counter)寄存器也是每一个线程私有的空间,java虚拟机会为每一个java线程创建PC寄存器。在任意时刻,一个java线程总是在执行一个方法,这个正在被执行的方法称为当前方法。如果当前方法不是本地方法,PC寄存器就会指向当前正在被执行的指令。如果当前方法是本地方法,那么PC寄存器的值就是undefined。寄存器存放如当前环境指针,程序计数器,操作栈指针,计算的变量指针等信息。

    1.9 执行引擎:

    执行引擎是java虚拟机的最核心组件之一,它负责执行虚拟机的字节码,现代虚拟机为了提高执行效率,会使用即时编译技术将方法编译成机器码后再执行。

    提示:在java程序员写程序的过程中,一般提及的JVM参数调优指的是对——堆中数据的管理以及回收算法的调整。

    展开全文
  • Systemview是美国ELANIX公司于1995年开始推出的软件工具,它为用户提供了一个完整动态系统设计、仿真与分析可视化软件环境,能进行模拟、数字、数模混合系统、线性和非线性系统分析设计,可对线性系统进行拉氏...
  • 在论文后面部分,着重讲述了制作和调试中遇到的软件、硬件上问题以及如何解决,并给出了高保真音频放大器性能指标国家标准测量方法。这些可以成为大家制作过程中一些提示以及测试依据。 方案阐述: 一...
  • 操作系统内存管理设计取决于三个基本方面选择: (1)是否使用虚存技术 (2)使用分页还是分段,或者是两者组合 (3)为各种存储管理特征采用算法 前两项选择取决于使用硬件平台 最后一项选择是属于...

    8.2操作系统软件
    操作系统的内存管理设计取决于三个基本方面的选择:
    (1)是否使用虚存技术
    (2)使用分页还是分段,或者是两者的组合
    (3)为各种存储管理特征采用的算法
    前两项的选择取决于使用的硬件平台
    最后一项的选择是属于操作系统软件领域的问题

    读取策略
    确定一页何时读入主存
    (1)请求式分页:只有当访问到某页中的一个单元时才将该页取入主存
    (2)预约式分页:对于预约式分页,读取的页并不是页错误请求的页,预约式分页利用了大多数辅存设备(如磁盘)的特性,这些设备有寻道时间和合理的延迟。

    放置策略
    决定一个进程块驻留在实存中的什么地方。
    非一致存储访问(NUMA)多处理器。
    在非一致存储访问多处理器中,机器中分布的共享内存可以被该机器的任何处理器访问,但是访问某一特定的物理单元所需要的时间随着处理器和内存模块之间距离的不同而变化。
    因此,其性能很大程度上依赖于数据驻留的位置与使用数据的处理器间的距离
    对于NUMA而言,自动放置策略希望把页分配到能够提供最佳性能的内存。

    替换策略
    处理在必须读取一个新页时,应该替换主存中的哪一页。
    困难如下:
    (1)给每个活动进程分配多少页帧。
    (2)考虑替换的页的集合是否局限在那些产生页错误或所有页帧都在主存中的进程。
    (1)(2)驻留集管理
    (3)在考虑的页集中,选择换出哪一个页。
    替换策略专指第一个
    替换策略设计的越精致,越复杂,实现它的软硬件开销就越大。
    帧锁定
    关于替换策略的一个约束:
    主存中的某些帧可能是被锁定的,如果一个帧被锁定时,当前保存在该帧中的页就不能被替换。
    常用的几种替换算法
    (1)最佳OPT
    (2)最近最少使用LRU
    (3)先进先出FIFO
    (4)时钟Clock
    (5)最近次数最少LFU,要求在页置换时置换引用计数最小的

    页缓冲
    一种可以提高分页性能并且允许使用较简单的页替换策略的方法。
    为提高性能,被替换出的页不是被丢弃,而是被分配到以下两个表之一。
    如果未被修改:分配到空闲页表
    如果被修改:分配到修改页表
    特征:被替换的页仍然保留在主存中。

    替换策略和高速缓存大小
    随着主存越来越大,应用的局部性特性逐渐降低,作为补偿,高速缓存的大小也相应的增加了。

    驻留集管理
    给特定的进程分配多大的主存空间,需要考虑如下:
    (1)分配给一个进程的存储量越小,在任何时候驻留在主存中的进程数就越多。
    (2)如果一个进程在主存中的页数比较少,尽管有局部性原理,页错误率仍然相对较高。
    (3)超过一定的大小后,由于局部性原理,给特定的进程分配更多的主存空间对该进程的也错误率没有明显的影响。

    当代操作系统的两种策略:
    (1)固定分配策略
    (2)可变分配策略

    替换范围
    全局
    局部
    没有空闲页帧的时候由一个页错误激活的。
    局部替换策略仅仅在产生这次页错误的进程的驻留页中选择
    全局替换策略把主存中所有未被锁定的页都作为替换的候选页,而不管它们属于哪一个进程

    组合:
    (1)固定,局部
    (2)可变,全局
    (3)可变,酷不

    工作集策略
    可作为比较各种策略的一个基准

    UNIX和Solaris内存管理
    使用了分页式的虚存
    有两个独立的内存管理方案
    分页系统提供了一种虚拟存储能力以给进程分配主存中的页帧,并且给磁盘块缓冲分配页帧。这是针对用户进程和磁盘I/O来说的
    内核内存分配器
    分页式的续存

    分页系统
    数据结构
    (1)页表:典型情况下,每个进程都有一个页表,该进程在虚存中的每一页在页表中都有一项。
    (2)磁盘块描述符:与进程的每一页相关联的是表中的项,它描述了虚拟页的磁盘副本。
    (3)页帧数据表:描述了实存中的每一帧,并且以帧号为索引。该表用于置换算法。
    (4)可交换表:每个交换设备都有一个可交换表,该设备的每一页在表中都有一项。
    磁盘块描述符中需要有存储域类型的原因如下:当一个可执行文件第一次用于创建一个新进程时,该文件只有一部分程序和数据可以装入实存。
    只有第一次装入时,才创建虚存表,并给它分配某个设备中的单元用于交换。这时,操作系统被告知在首次加载程序或数据块之前是否需要清空清空该页帧中的单元。

    页替换
    页帧数据表用于页替换。
    UNIX使用多个是双表针时钟算法。
    确定该算法的操作需要扫描速度和扫描窗口。

    内核内存分配器
    内核在执行期间频繁的产生和销毁一些小表和缓冲区,每一次产生和销毁操作都需要动态地分配内存。

    Linux内存管理
    两个主要特征
    (1)进程虚拟内存
    (2)内核内存分配

    Linux虚拟内存
    Linux使用三级页表结构,它由下面几种类型的表组成:
    (1)页目录:页目录中的每一项指向页中间目录中的一页,每个活动进程的页目录都在都必须在主存中。
    (2)页中间目录:可以跨越多个页,页中间目录中的每一项指向页表中的一页
    (3)页表:可以跨越多个页。每个页表项指向该进程的一个虚拟页。

    linux的虚拟地址可以看做是
    全局目录,中间目录,页表,偏移量组成的

    页分配
    使用了伙伴系统,内和维护一系列大小固定的连续页帧组,一组可以包含1,2,4,8,16或32个页帧
    当一页在主存中被分配或被解除分配时,可用的组使用伙伴算法被分裂或合并。

    页替换算法
    使用的是最少使用频率的策略。

    内核内存分配

    展开全文
  • 尽管单片机主要是为控制目的而设计的,但它仍然具备微型计算机的全部特征,因此,单片机的功能部件和工作原理与微型计算机也是基本相同的,我们可以通过参照微型计算机的基本组成和工作原理逐步接近单片机。...
  • 操作系统原理_田丽华

    2020-03-30 10:28:57
    操作系统原理第一章单元测试第二章单元测试第三章单元测试第四章单元测试第五章单元测试第六章单元测试 会持续更新 如无更新请留言 您的点赞与留言是我最大的...3下列选项中,不属于多道程序设计的基本特征是( D...

    会持续更新
    如无更新请留言
    您的点赞与留言是我最大的动力

    第一章单元测试

    1.操作系统是对( A)进行管理的软件。
    A.计算机资源
    B.软件
    C.硬件
    D.应用程序

    2.操作系统是一种( C)。
    A.应用软件
    B.通用软件
    C.系统软件
    D.软件

    3下列选项中,不属于多道程序设计的基本特征是( D)
    A.间断性
    B.多道性
    C.无序性
    D.顺序性

    4.提高CPU利用率的关键技术是(C )
    A.脱机技术
    B.交换技术
    C.多道程序设计技术
    D.虚拟技术

    5分时系统追求的目标是( A)
    A.快速响应用户
    B.充分利用I/O设备
    C.充分利用内存
    D.提高系统吞吐率

    第二章单元测试

    1.处理器执行的指令被分为两类,其中有一类称为特权指令,它只允许(C )使用
    A.联机用户
    B.操作员
    C.操作系统
    D.目标程序

    2.当CPU执行操作系统代码时,处理器处于(B)
    A.用户态
    B.核心态
    C.就绪态
    D.自由态

    3.操作系统提供给编程人员的接口是( C)
    A.高级语言
    B.库函数
    C.系统调用
    D.子程序

    4.在中断发生后,进入中断处理的程序属于( C)
    A.可能是应用程序,也可能是操作系统程序
    B.既不是应用程序,也不是操作系统程序
    C.操作系统程序
    D.用户程序

    5.下列必须在核心态下执行的指令是(B )
    A.从内存中取数
    B.I/O操作
    C.将运算结果装入内存
    D.算术运算

    第三章单元测试

    1.一个进程是(C)。
    A.由协处理器执行的一个程序
    B.一个独立的程序+数据集
    C.PCB结构与程序和数据的组合
    D.一个独立的程序

    2.进程与程序的根本区别是(C)。
    A.是不是占有处理器
    B.是不是被调入到内存
    C.静态和动态的区别
    D.是不是具有就绪、运行和等待三种状态

    3.操作系统是根据(C)来对并发执行的进程进行控制和管理的。
    A.多道程序设计
    B.进程的基本状态
    C.进程控制块
    D.进程的优先权

    4下列几种关于进程的叙述,(D)是最不符合操作系统对进程的理解。
    A.进程是程序在一个数据集合上的运行过程
    B.进程可以由程序、数据和PCB描述
    C.进程是系统进行资源分配和调度的一个独立单元
    D.进程是在多程序环境中的完整的程序

    5.同一程序经过多次创建,运行在不同的数据集上,形成了(C)的进程。
    A.互斥
    B.相同
    C.不同
    D.同步

    6.用信箱实现进程间互通消息的通信机制要有两个通信原语,它们是(A)。
    A.发送原语和接收原语
    B.就绪原语和执行原语
    C.发送原语和执行原语
    D.就绪原语和接收原语

    7.当(D)时,进程从执行状态转变为就绪状态。
    A.进程被调度程序选中
    B.等待某一事件
    C.等待的事件发生
    D.时间片到

    8.进程创建后,所有创建完成的PCB被链接成一个序列,这个序列称为(C)。
    A.作业队列
    B.阻塞队列
    C.就绪队列
    D.运行队列

    9.长(作业)调度程序控制(D )。
    A.进程执行的时间
    B.等待队列中进程的个数
    C.就绪进程的个数
    D.多道程序的道

    10.在单处理器系统中,如果同时存在10个进程,则处于就绪队列中的进程最多有(A)个。
    A.9
    B.1
    C.8
    D.10

    11判断(2分)
    一个进程的状态变化一定会引起另一个进程的状态变化。
    ×错

    12判断(2分)
    一个进程等待的I/O操作完成后,进程状态将会从阻塞变为就绪。
    对√

    13判断(2分)
    执行fork系统调用时,子进程会复制父进程的地址空间。
    对√

    14判断(2分)
    与其他进程共享数据的进程是协作进程。
    对√

    15判断(2分)
    短调度是指从作业队列中选择作业并装入内存。
    错×
    .

    第四章单元测试

    1.若某一进程拥有100个线程,这些线程都属于用户级线程,则每一个线程在系统调度时间上占用的时间片是(想知道答案,请留言、点赞、并私聊 )。

    A.1
    B.0
    C.100
    D.1/100

    2.在多对一的线程模型中,当一个多线程进程的某个线程被阻塞后(C)。
    A.该阻塞线程将永远不可能在执行
    B.该阻塞线程将被撤销
    C.整个进程都将被阻塞
    D.该进程的其他线程仍可继续运行

    3.下面的叙述中,正确的是(D)。
    A.同一进程或不同进程内的线程都只能串行执行
    B.同一进程内的线程可并发执行,不同进程的线程只能串行执行
    C.同一进程内的线程只能串行执行,不同进程的线程可并发执行
    D.同一进程或不同进程内的线程都可以并发执行

    4.下面说法正确的是(B)。
    A.不论是系统支持的线程还是用户级线程,其切换都需要内核的支持
    B.不管系统中是否有线程,进程都是拥有资源的独立单位
    C.在引入线程的系统中,进程仍是资源调度和分派的基本单位
    D.线程是资源分配的单位,进程是调度和分派的单位

    5.引入线程的主要目的是(B )。
    A.执行更多任务
    B.提高并发程度同时降低开销
    C.加快运算速度
    D.实现资源共享

    6.线程也具有就绪、阻塞和运行三种基本状态。
    对√

    7.CPU调度时,时间片是分给用户线程的。
    错×

    8.多对一模型的缺点是不能实现真正的并发。
    对√

    9.用户线程是在用户空间管理的,内核也能感知。
    错×

    10.同一个进程内的多个线程之间共享进程的资源。
    对√

    第五章单元测试

    1.在单处理器的多进程系统中,进程什么时候占用处理器以及决定占用时间的长短是由(B)决定的。
    A.进程相应的代码长度
    B.进程特点和进程调度策略
    C.进程总共需要运行的时间
    D.进程完成什么功能

    2.(C )有利于CPU繁忙型的作业,而不利于I/O繁忙型的作业。
    A.时间片轮转调度算法
    B.短作业(进程)优先算法
    C.先来先服务调度算法
    D.优先权调度算法

    3.时间片轮转调度算法是为了(D)。
    A.使系统变得高效
    B.需要CPU时间最少的进程最先做
    C.优先级较高的进程得到及时响应
    D.多个终端能够得到系统及时响应

    4.(A)优先级是在创建进程时确定的,确定之后在整个运行期间不再改变。
    A.静态
    B.动态
    C.先来先服务
    D.短作业

    5.采用时间片轮转调度算法分配CPU时,当处于运行状态的进程用完一个时间片后,他的状态是(C )状态。
    A.运行
    B.消亡
    C.就绪
    D.阻塞

    6.下列调度算法中,(B)调度算法是绝对可抢占的。
    A.优先级
    B.时间片轮转
    C.短进程优先
    D.先来先服务

    7.下列选项中,降低进程优先级的合理时机是(D)。
    A.进程刚完成I/O操作,进入就绪队列
    B.进程从就绪状态转为运行状态
    C.进程长期处于就绪队列
    D.进程时间片用完

    8.设有4个作业同时到达,每个作业的执行时间均为2h,它们在一台处理器上技单道

    式运行,则平均周转时间为(D)。
    A.8h
    B.1h
    C.2.5h
    D.5h

    9.假设系统中所有的进程都是同时到达,则使进程平均等待时间最短的是( C)调度算法。
    A.时间片轮转
    B.先来先服务
    C.短作业优先
    D.优先级

    10.下面关于选择进程调度算法的准则中不正确的是(B )。
    A.尽快响应交互式用户的请求
    B.适当增加进程在就绪队列的等待时间
    C.尽量提高CPU利用率
    D.尽可能提高系统的吞吐量

    第六章单元测试

    1单选(2分)
    下列对临界区的论述中,正确的是( A)。
    A.临界区是指进程中用于访问共享资源的那段代码
    B.临界区是指进程中用于实现进程互斥的那段代码
    C.临界区是指进程中用于实现进程同步的那段代码
    D.临界区是指进程中用于实现进程通信的那段代码

    2单选(2分)
    若一个信号量的初值为3,经过多次PV操作以后当前值为-1,此表示等待进入临界区的进程数是( C )。
    A.3
    B.4
    C.1
    D.2

    3单选(2分)
    设与某资源关联的信号量(K)初值为3,当前值为1。若M表示该资源的可用个数,N表示等待该资源的进程数,则M、N分别是(B)。
    A.0、1
    B.1、0
    C.2、0
    D.1、2

    4单选(2分)
    P操作可能导致(D)。
    A.进程结束
    B.进程就绪
    C.新进程创建
    D.进程阻塞

    5单选(2分)
    用V操作唤醒一个等待进程时,被唤醒进程的变为(D)状态。
    A.运行
    B.等待
    C.完成
    D.就绪

    6单选(2分)
    在用信号量机制实现互斥时,互斥信号量的初值为(A)。
    A.1
    B.2
    C.3
    D.0

    7单选(2分)
    有三个进程共享同一程序段,而每次只允许两个进程进入该程序段,若用PV操作同步机制,则信号量S的取值范围是(A)。
    A.2,1,0,-1
    B.1,0,-1,-2
    C.3,2,1,0
    D.2,1,0,-1,-2

    8单选(2分)
    对于两个并发进程,设互斥信号量为 mutex(初值为1),若 mutex=0,则(B)。
    A.表示有一个进程进入临界区,另一个进程等待进入
    B.表示有一个进程进入临界区
    C.表示有两个进程进入临界区
    D.表示没有进程进入临界区

    9单选(2分)
    在操作系统中,要对并发进程进行同步的原因是( C )。
    A.进程具有动态性
    B.进程必须在有限的时间内完成
    C.并发进程是异步的
    D.进程具有结构性

    10单选(2分)
    在操作系统中,要对并发进程进行同步的原因是( B )。
    A.进程具有动态性
    B.并发进程是异步的
    C.进程具有结构性
    D.进程必须在有限的时间内完成

    11判断(2分)
    临界区就是临界资源所在的区域。
    错×

    12判断(2分)
    信号量是一个整型变量,可以直接对其进行加1和减1的操作。
    错×

    13判断(2分)
    V操作表示申请一个资源。
    错×

    14判断(2分)
    一个正在访问临界资源的进程因为申请I/O操作而阻塞时,它允许其他进程进入其临界区。
    错×

    15判断(2分)
    PV操作是原子操作。
    对√

    展开全文
  • 基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆("在系统"编程)将代码传送到目标芯片中,实现设计的数字系统。  检测系统的可重构设计是检测技术的发展...
  • 本书聚焦于软件架构行业,全面介绍软件应用系统架构的基本原理、方法以及经典的实践经验。把握共同的规律,预知未来的发展,选择最佳的路径,尽可能减少成长的烦恼,并保持成熟的稳定,让企业充分享受属于架构整个...
  • 基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。 CPLD主要是由可编程逻辑宏单元(MC,Macro ...
  • 基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过下载电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。  随着当今社会工作和生活节奏的加快,...
  •  《架构之美:软件架构的艺术》聚焦于软件架构行业,全面介绍软件应用系统架构的基本原理、方法以及经典的实践经验。把握共同的规律,预知未来的发展,选择最佳的路径,尽可能减少成长的烦恼,并保持成熟的稳定,让...
  • 基本设计方法是借助集成开发软件平台,用原理图、硬件描述语言等方法,生成相应的目标文件,通过电缆(“在系统”编程)将代码传送到目标芯片中,实现设计的数字系统。  随着当今社会工作和生活节奏的加快,人们...
  • 操作系统原理_第一章单元测试第一章单元测试 ...3下列选项中,不属于多道程序设计的基本特征是( D) A.间断性 B.多道性 C.无序性 D.顺序性 4.提高CPU利用率的关键技术是(C ) A.脱机技术 B.交换...
  • 软件工程教程

    热门讨论 2012-07-06 23:10:29
    应用计算机科学、数学及管理科学等原理,以工程化原则和方法来解决软件问题,指导计算机软件开发和维护一门工程学科。  软件工程原则 任务2 软件生命周期与软件开发模型 软件生命周期 软件开发模型 ...
  • 使大家能掌握程序设计的方法,提高对汇编语言的运用能力,并掌握相关的一些重要算法,为将来灵活地运用汇编语言解决更实用、更复杂的问题做好必要的准备。 本章要求掌握的内容如下。 • 熟记汇编语句的一般格式。 •...
  • 操作系统原理田丽华,测试与作业

    千次阅读 2020-03-02 22:20:08
    3下列选项中,不属于多道程序设计的基本特征是( D) A.间断性 B.多道性 C.无序性 D.顺序性 4.提高CPU利用率的关键技术是(C ) A.脱机技术 B.交换技术 C.多道程序设计技术 D.虚拟技术 5分时系统追求的目标是( A...
  • 原本学习是第一步, 但由于学习动作要建立在一定软件操作基础上, 所以这里先讲如何制作的基本概念: 这里我推荐使用Flash8进行制作, 一来8.0的线条定义范围是0-100, 二来8.0具备滤镜功能, 可以更好的表达格斗所需要的...
  • 软件工程复习(2)

    2019-11-06 08:38:55
    可行性研究 软件的发展经历了四个阶段 需求分析任务不包括系统设计 一个软件的宽度是指其控制...系统设计基本原理: [1 ] 用分析阶段生命周期计划严格管理 [ 2] 坚持进行阶段评审 [ 3] 实行严格产品控...
  • 计算机组成原理测试题 如:一. 选择题(每选择1分,共20分) 1. 用ASCII码(七位)表示字符5和7是 (1) ;按对应ASCII码值来比较 (2) ;二进制十进制编码是 (3) 。 (1) A. 1100101和1100111 B. 10100011和...
  • 34程控父换机软件的基本特点是什么?有哪几部分红成? 答:特点 (1)规模大 2)实时性 3)多道程序并行处理 4)可靠性要求 組成:运行软件系统和支持软件系统 35.简述栏控交換机操作系统的基本功能。 答!租控交换机的操作...
  • vnc viewer 绿色版 远程控制软件

    热门讨论 2009-09-13 11:45:11
    VNC的基本运行原理和一些Windows下的远程控制软件很相象。VNC的服务器端应用程序在UNIX和Linux操作系统中适应性很强,图形用户界面十分友好,看上去和Windows下的软件界面也很类似。在任何安装了客户端的应用程序...
  • 电路仿真与PCB设计

    2010-01-13 19:42:01
    掌握EDA技术已成为通信电子类专业的学生学习及就业的基本素质。本书所介绍的内容也属于EDA范畴,因此有必要了解一些EDA方面的知识,对于学习这些软件及后续课程会有一定的帮助。 一、EDA技术的概念 EDA技术是在...
  • ▶准确的轴承刚度和阻尼是旋转机械设计的依据,属于基本设计参数▶可以准确确定旋转机械的振动特性,避免临界速度落入工作速度,避免共振▶旋转机械降振降噪的分析必须数据设计不当,造成轴承磨损、烧瓦轴承薄膜工作...
  • 二十三种设计模式【PDF版】

    热门讨论 2011-05-30 14:13:49
    的被使用,被调用,而是深刻的介入到一个领域中去,J2EE 等框架软件设计的目的是将一个领域中不变的东西先定义好,比如 整体结构和一些主要职责(如数据库操作 事务跟踪 安全等),剩余的就是变化的东西,针对这个领域...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 215
精华内容 86
关键字:

属于软件设计的基本原理是