软考必考之软件工程基础知识

风险分析
分四个不同活动:风险识别(视图系统化地确定对项目计划的威胁。其中一个方法是建立风险条目检查表)、风险预测(风险发生的可能性或概率;以及如果风险发生了所产生的后果)、风险评估(风险评估时,建立如下形式的三元组(ri,Li,Xi)、和风险控制(风险管理者采取各种措施和方法减少风险事件发生的各种可能性,或减少风险事件发生造成的损失。四种基本方法:风险回避,损失控制,风险转移和风险保留)
• 人员管理
• 极限编程(XP)
• 是一个轻量级、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。XP提倡在开始写程序之前先写单元测试(不懂后面会讲) 。开发人员应该经常把开发好的模块整合到一起并重新运行单元测试;发现BUG就要增加相应的测试。
• XP中程序员一般结对(两个程序与并排一起在同一台机器上构建)进行编程开发。任何结对的程序员都可以在任何时候改进代码,它的基础和价值观是交流(加强交流)、朴素(从简单做起)、反馈(寻求反馈)和勇气(用于实事求是)。
• XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时的调整开发过程
• XP重要思想:重视客户的反馈——开发的目的就是为了满足客户的需要。
• 常见生命周期模型:
• 从提出软件开发计划开始直到软件在实际应用中完全报废为止就是一个完整的软件生存周期(SDLC,软件生命周期),软件生存周期的提出是为了更好的开发、管理和维护软件。
• 软件生命周期六个阶段:问题的定义及规划(此阶段是软件开发方与需求方共同讨论,即待开发软件系统的总体开发目标及其可行性。另外对资源分配,进度安排等做合理规划)、需求分析(确定用户对待开发系统的功能、经费需求、性能和用户界面、安全保密、可靠、进度需求等方面的需求)、软件设计(核心阶段,根据需求分析的结果对整个软件系统进行设计,分为总体设计和详细设计)、程序编码(将软件设计的结果转换成采用某种程序设计编写的源代码并生成语言计算机可运行的程序代码,这是软件设计师和程序员都需要共同参与的)、软件测试(软件设计完成后进过严密的测试以发现软件在整个设计过程中出现的问题并加以纠正,分单元测试,组装测试以及系统测试)、运行维护(是软件生命周期中持续时间最长的阶段)
• 软件工具:软件开发工具,软件维护工具,软件管理和软件支持工具
• CASE:是一组工具和方法的集合,可以铺助软件开发生命周期各阶段进行软件开发,在软件开发、维护过程中提供计算机铺助支持,并在软件开发、维护中引入工程化方法。CASE技术有两类,一是支持软件开发过程本身的技术,二是支持软件开发过程管理的技术
• UML图
• 统一建模语言(UML)是用来对软件密集系统进行可视化建模的一种语言。
• UML的重要内容由下列五类图定义
用例图:从用户角度描述并指出系统功能的操作者
静态图:包括类图,对象图,包图
行为图:包括交互图和行为图和组成对象间的交互关系,交互图又分为时序图和协作图,行为图又分为状态图(对象的可能状态)和活动图(描述用例和对象按时间顺序的各个活动的流程)
交互图:描述对象间的交互关系
实现图。
• UML的用例之间的关系:两种特殊的关系:扩展(扩展用例到基本用例的关系,它指定了扩展用例定义的行为如何擦入到为基本用例定义的行为中)和包含(从基本用例到包含用例的关系,它指定如何将为包含用例定义的行为明确地插入到为基本用例定义的行为中)。
• 类之中的关系:UML中规定,类中共有4种基本关系:依赖(即其中一个事物(独立事物)发生变化会影响另一个事物(依赖事物))、关联(是一种结构关系,它描述了一组链,链是对象之间的连接。)泛化(是一种特殊/一般关系,特殊元素(子元素)的对象可替代一般元素(父元素)的对象,用这种方法,子元素共享了父元素的结构和行为)、实现(是类元之间的语义关系,其中一个类元指定了由另一个类元保证执行的契约)
• 系统分析与设计
• 结构化分析方法:是面向数据流的需求分析方法,强调开发方法的结构合理性以及待开发软件系统的结构合理性的系统分析方法。结构化开发方法提出了一组提高软件结构合理性的准则,如分解与抽象、模块独立性和信息隐蔽等。结构化分析方法一般利用图形表达用户需求,使用的手段主要有数据流图(DFD,。采用图形方式表达系统的逻辑功能)、数据字典(用户可以访问的记录数据库或应用程序元数据的以类似字典的目录:注释形式描述的元数据集合)、结构化语言、判定表以及判定树等。
• 面向对象分析模型五个层次:主题层,对象类层、结构层、属性层和服务层
• 结构化分析的步骤:(1)分析当前的情况,做出反映当前物理模型的DFD、(2)推导出等价的逻辑模型的DFD或等价的盒图,判定树等、(3)根据逻辑模型设计新的逻辑系统,生成数据字典和基元描述、(4)提出各种可能的方案并确定各种方案的成本和风险、(5)选择一种方案、(6)建立完整的需求规约
• 结构化设计方法:是一种面向数据流的设计方法,可以与SA衔接、SA采用基于模块,自顶向下,结构化程序设计等程序设计技术将软件设计成由相对独立且具有单一功能的模块组成的结构。
• 面向对象分析与设计方法
• 面向对象分析方法:就是抽取和整理用户需求并建立问题域精确模型的过程。系统分析员应该深入理解用户需求,抽象出目标系统的本质属性,并用模型准确的表示出来。面向对象建模得到的模型包含对象的三个要素:静态结构、交互次序(又称动态模型)和数据交换(又称功能模型)。面向对象分析过程中建立对象模型的5项主要活动:找出类和对象;识别结构;识别主题;定义属性;定义服务。
• 面向对象设计方法:是设计分析模型和实现相应源代码,在目标代码环境中这种源代码可以实行。主要步骤:设计问题定义、设计人机界面、设计任务管理、设计数据管理。
• 面向对象设计原则:封装(将一个完整的概念组成一个独立的单元,然后通过一个名字来引用它)、信息隐蔽(通过对象的封装实现的。类的结构分离了接口和实现,所以对于类的使用者来说,属性的表示和操作的实现都是隐蔽的)、高内聚,低耦合(一个服务完成且仅完成一个功能)
• 耦合关系
内容耦合: 一个模块直接访问另一个模块内的内部数据,或一个模块不能通过正常入口转到另一个模块内容,或两个模块有一部分程序代码重叠,则两个模块就发生了内容耦合

公共耦合 :一组模块都访问同一个公共数据环境
外部耦合: 一组模块都访问同一全局简单变量而不是同一全局数据结构
控制耦合 :一个模块把控制信息传递给另一个模块,对其功能进行控制
标记耦合: 一组模块通过参数表传递记录信息,这组模块就是标记模块,注意:事实上模块共享了某一数据结构的子结构,而不是简单变量
数据耦合 :一个模块访问另一个模块彼此之间通过数据参数(不是控制参数,公共数据结构或外部变量)来交换输入,输出信息
非直接耦:两个模块之间没有直接关系,它们间的联系完全通过主模块的控制和调用来实现的|

软件质量管理与质量保证
• IOS/IEC 9126软件质量模型的6个质量特性:功能性、可靠性、易用性、效率、可维护性、可移植性。这六种质量特性都由质量特性(第一层6个),子特性(第二次21个)和度量(第三次由度量者定义的可定量化度量指标)三个层次组成
• McCall软件质量模型
产品运行 正确性(满足设计规格和语气目标的程度)、可靠性(在规定时间和条件下不出故障)、效率、完整性、可使用性
产品修正 可维护性、可测试性、灵活性
产品转移 可移植性、可复用性、互用性
• 模块化设计
• 模块化是解决负责软件系统的最好方法。模块化的指导原则中最著名的是“高聚合,低耦合”,其中耦合包括:元素B是元素A的属性,或者元素A引用了元素B的实例;元素A调用了元素B的方法;元素A直接或间接成为元素B的子类;元素A是接口B的实现。高聚合:内聚即功能内聚,如果模块内各功能具有高度相关的职责,缺一不可,除了这些职责内的任务外,没有其他过多的工作,那么该元素就具有高内聚性,反之则为低内聚性
• 模块设计原则:提高模块独立性、模块规模应该适中、适当选择深度,宽度,扇出和扇入、系数、分解-协调原则、模块的作用域应该在控制域之内、降低模块接口的复杂程度、模块功能应可以预测、模块规模要适当。
• 测试的分类
• 黑盒测试:是一种功能测试,就是将被测系统看成一个黑盒,单纯从外界取得输入后进行输出。整个黑盒测试都只基于需求文档,不能使用与被测系统内部结构有关的任何信息,看是否能满足需求文档中的所有要求
• 白盒测试:逻辑测试,也叫做结构测试,它把程序看成白盒,即测试时了解被测对象的内部逻辑结构,并且以程序内部的设计结构及具体的代码实现为基础来设计测试用例
• 软件测试分四步:单元测试(基于程序模块进行正确性验证的测试,采用白盒测试法)、集成测试(在单元测试基础上,将所有模块按照设计要求组装成子系统或系统,进行集成测试)、系统测试(在实际运行环境下对计算机系统进行一系列的组装测试和确认测试)、确认测试。
• 项目成本估算
• 它的开发成本是一次性开发过程所花费的代价来计算的,所以软件开发成本的估算从软件计划、需求分析、设计、编码、单元测试、集成测试到认证测试,以整个开发过程所花费的代价作为依据,因此很难再项目完成前准确地估算出开发所需工作量和费用、通常以根据过开发类似软件经验来进行成本估算,也可以将软件项目划分成若干个子系统或按照软件生存周期各个阶段分别估算其成本,然后汇总出整个软件的成本。
• 进度管理
• 考试涉及的进度管理工具包括Gantt图和PERT图两种图像化管理方法
• 甘特图(Gantt):也称条状图,在1917年甘特开发的,基本是线条图,横轴表示时间,纵轴表示活动(项目)。具有简单,醒目和便于编制等特点。甘特图能形象地描绘每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。另外甘特图有三个主要缺点:不能显示的描述各项作业彼此间的依赖关系;进度计划的关键部分不明确导致难以判定哪些部分应当是主攻和主控的对象;计划中有潜力的部分及潜力的大小不明确从而造成潜力的浪费。也因为这些缺点,尤其是第一个,从而采用了PERT图描述。
• PERT图:20世纪50年代,它将任务以精心计划的,关键路径网络的图形化形式表示出来。即PERT图是项目执行的可视化计划图,
• CMM和软件过程改进
• 统一过程:是软件工程的过程。他提供了在开发组织中分派任务和责任的纪律化方法。它的目标是在可预见的日程和预算前提下,确保满足最终用户需求的高质量产品。统一过程模型是一种“用例驱动,以体系结构为核心,迭代及增量”的软件过程框架,由UML方法和工具支持
• 极限编程:见上面
• CMM:软件能力成熟度模型(Capability Maturity Model for Software,SW-CMM,CMM)是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。CMM分5个等级:初始级、可重复级(有些基本的软件项目的管理行为、设计和管理技术是基于相似产品中的经验)、已定义级(软件过程的管理方面和技术方面都明确地做了定义,并按需要不断地改进过程,而且采用评审的办法来保证软件的质量)、已管理级(管理部门能区分出随机偏离和有深刻含义的质量或生产目标的偏离)和优化级(连续的改进软件过程)。
• 系统开发模型
• 瀑布模型:是一个特别经典,甚至有点老套的周期模型,一般情况下将其分为计划、需求分析、概要设计、详细设计、编码以及单元测试、测试、运行维护等几个阶段。瀑布模型的周期是环环相扣的。每个周期中交互点都是一个里程碑,上一个周期的结束需要输出本次活动的工作结果,本次的活动的工作结果将会作为下一个周期的输入。这样,当某一个阶段出现了不可控的问题的时候,就会导致返工,返回到上一个阶段,甚至会延迟下一个阶段。
• 原型化模型:是动态确定软件需求的方法之一,适应于需求不确定性高的系统,弥补了瀑布模型的缺点
• 螺旋模型:尤其重视风险分析阶段,特别适用于庞大并且复杂,非常高风险的项目。通常螺旋模型由四个阶段组成:制定计划、风险分析、实施工程和客户评估。螺旋模型中,发布的第一个模型甚至可能是没有任何产出的,可能仅仅是纸上谈兵的一个目标,但是随着一次次的交付,每一个版本都会朝着固定的目标迈进,最终得到一个更加完善的版本。

演化模型:也是一种原型化开发,但与快速原型不同的是,快速原型模型在获得真实需求时,就将抛弃原型。而演化模型则不然,它将从初始的模型中逐渐演化为最终软件产品,是一种“渐进式”原型法。其应用场合也是需求不明确的项目。
• 喷泉模型:是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程。

猜你喜欢

转载自blog.csdn.net/weixin_42746744/article/details/82025283