系统架构计划师考点—软件工程基础知识
一、备考指南软件工程基础知识主要考查的是软件工程基础、软件开发方法、系统分析、计划、测试及运行和维护等相干知识,同时也是重点考点,在系统架构计划师的考试中选择题12~15分,案例分析和论文中也会考到相干内容,属于重点章节之一。
二、重点考点
1、软件开发生命周期
2、本领成熟度模型CMM和本领成熟度模型集成CMMI
3、软件过程模型
4、敏捷模型
5、统一过程模型
6、逆向工程
7、模块内聚和模块耦合
8、测试基础知识
9、系统运行与维护
三、软件开发生命周期
1、软件定义时期:包罗可行性研究和具体需求分析过程,任务是确定软件开发工程必须完成的总目标,具体可分成问题定义、可行性研究、需求分析等。
2、软件开发时期:就是软件的计划与实现,可分成概要计划、具体计划、编码、测试等。
3、软件运行和维护:就是把软件产品移交给用户使用。
4、软件系统的文档可以分为用户文档和系统文档两类,用户文档主要形貌系统功能和使用方法,并不关心这些功能是怎样实现的;系统文档形貌系统计划、实现和测试等各方面的内容。
5、软件工程过程是指为获得软件产品,在软件工具的支持下由软件工程师完成的一系列软件工程活动,包罗以下四个方面:
(1)P(Plan)--软件规格阐明。规定软件的功能及其运行时的限定。
(2)D (Do)--软件开发。开发出满足规格阐明的软件。
(3)C(Check)--软件确认。确认开发的软件能够满足用户的需求。
(4)A(Action)--软件演进。软件在运行过程中不断改进以满足客户新的需求。
6、软件系统工具通常可以按软件过程活动分为软件开发工具、软件维护工具、软件管理和软件支持工具。
(1)软件开发工具:需求分析工具、计划工具、编码与排错工具、测试工具等。
(2)软件维护工具:版本控制工具、文档分析工具、开发信息库工具、逆向工程工具、再工程工具。
(3)软件管理和软件支持工具:项目管理工具、配置管理工具、软件评价工具、软件开发工具的评价和选择。
软件计划包罗四个既独立又相互接洽的活动,即数据计划、架构(体系结构)计划、人机界面(接口)计划和过程计划,这四个活动完成以后就得到了全面的软件计划模型。
四、本领成熟度模型CMM和本领成熟度模型集成CMMI
1、本领成熟度模型
本领成熟度模型(Capability Maturity Model,CMM)是对软件组织化阶段的形貌,随着软件组织定义、实验、丈量、控制和改进其软件过程,软件组织的本领经过这些阶段渐渐提高,针对软件研制和测试阶段。
https://img-blog.csdnimg.cn/29fcc697820d4234a4d9cdd16edaf081.jpg
2、本领成熟度模型集成
本领成熟度模型集成(Capability Maturity Model Integration, CMMI)是若干过程模型的综合和改进,不仅仅支持软件,而且支持多个工程学科和范畴的、系统的、一致的过程改进框架,能话应现代工程的特点和需要,能提高过程的质量和工作服从。CMM有阶段式模型和连续式模型两种表示法。
(1)阶段式模型:类似于CMM,它关注组织的成熟度,五个成熟度模型级别见表。
https://img-blog.csdnimg.cn/5f18de3d34014bcb8e55899d53bc2f8e.jpg
(2)连续式模型:关注每个过程域的本领,一个组织对差别的过程域可以达到差别的过程域本领等级。
五、软件过程模型
1、瀑布模型(SDLC): 结构化方法中的模型,是结构化的开发,开发流程犹如瀑布一般,一步一步走下去,直到末了完成项目开发,只适用于需求明确或者二次开发(需求稳定),当需求不明确时,终极开发的项目会有错误,有很大的缺陷。
2、原型模型: 与瀑布模型相反,原型针对的就是需求不明确的情况,首先快速构造一个功能模型,演示给用户看,并按用户要求及时修改,中间再通过不断地演示与用户沟通,终极计划出项目,就不会出现与用户要求不符合的情况,接纳的是迭代的头脑。不适合超大项目开发。
3、增量模型: 首先开发核心模块功能,而后与用户确认,之后再开发次核心模块的功能,即每次开发一部分功能,并与用户需求确认,终极完成项目开发,优先级最高的服务开始交付,但由于并不是从系统整体角度规划各个模块,因此不利于模块划分。难点在于如何将客户需求划分为多个增量。与原型差别的是增量模型的每一次增量版本都可作为独立可利用的作品,而原型的构造一般是为了演示。
4、螺旋模型:是多种模型的混合,针对需求不明确的项目,与原型类似,但是增长了风险分析这也是其最大的特点。适合大型项目开发。
5、V模型: 特点是增长了很多轮测试,并且这些测试贯穿于软件开发的各个阶段,不像其他模型都是软件开发完再测试,很大程度上保证了项目标精确性。V模型的开发和测试级别对应如图。
https://img-blog.csdnimg.cn/881811b91ced482dab4183ba902e9d8e.jpg
6、喷泉模型: 特点是面向对象的模型,而上述其他的模型都是结构化的模型,使用了迭代头脑和无间隙开发。
7、基于构件的开发模型(CBSD ):特点是加强了可复用性,在系统开发过程中,会构建一个构件库,供其他系统复用,因此可以提高可靠性,节流时间和本钱。
8、形式化方法模型:创建在严格的数学基础上的一种软件开发方法,主要活动是生成盘算机软件形式化的数学规格阐明。
六、敏捷模型 (以人为本)
开发宣言:“个体和交互”胜过“过程和工具”、“可以工作的软件”胜过“面面俱到的文档”、“客户合作”胜过“条约会商”、“相应变化”胜过“遵循筹划”。
https://img-blog.csdnimg.cn/5fc407610d1f40f1b105d1da6fa3d221.jpg
1、敏捷方法区别于其他方法的两个特点:
(1)是“顺应性”而非“预设性”。
(2)是“面向人的”而非“面向过程的”。
2、敏捷方法的核心头脑:
(1)敏捷方法是顺应型,而非可推测型。拥抱变化,顺应变化。
(2)敏捷方法是以人为本,而非以过程为本。发挥人的特性。
(3)迭代增量式的开发过程。以原型开发头脑为基础,接纳迭代增量式开发,发行版本小型化。
3、主要敏捷方法:
(1)极限编程(XP)。基础和代价观是交流、朴素、反馈和勇气,即任何一个软件项目都可以从加强交流、从简单做起、寻求反馈、勇于实事求是四个方面入手进行改善。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期: 通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清晰开发进度、变化、待办理的问题和潜伏的困因难等,并根据实际情况及时地调整开发过程。XP提倡测试先行,为了将以后出现bug 的概率降到最低。
(2)水晶系列方法。与XP方法一样,都有以人为中心的理念,但在实践上有所差别。其目标是发展一种提倡“机动性的”方法,包罗具有共性的核心元素,每个都含有独特的角色、过程模式、工作产品和实践。
(3)并列争球法(Scrum)。是一种迭代的增量化过程,把每段时间(如30天)一次的迭代称为一个“冲刺”(Sprint),并按需求的优先级别来实现产品,多个自组织和自治的小组并行地递增实现产品。
(4)特性驱动开发方法(FDD)。是一个迭代的开发模型。认为有效的软件开发需要三个要素: 人、过程和技能。有五个核心过程:开发整体对象模型、构造特征列表、筹划特征开发、特征计划和特征构建。其中,筹划特征开发根据构造出的特征列表、特征间的依赖关系进行筹划,计划出包罗特征计划和特征构建过程构成的多次迭代。
七、统一过程模型(RUP)
RUP形貌了如何有效地利用商业的、可靠的方法开发和部署软件,是一种重量级过程。RUP 类似一个在线的指导者,它可以为所有方面和条理的程序开发提供指导方针、模板以及事例支持。
1、RUP软件开发生命周期是一个二维的软件开发模型,RUP 中有九个核心工作流,这九个核心工作流如下。
①业务建模:理解待开发系统所在的机构及其商业运作,确保所有参与人员对待开发系统所在的机构有共同的认识,评估待开发系统对所在机构的影响。
②需求:定义系统功能及用户界面,使客户知道系统的功能,使开发人员理解系统的需求为项目预算及筹划提供基础。
③分析与计划:把需求分析的结果转化为分析与计划模型。
④实现:把计划模型转换为实现结果,对开发的代码做单元测试,将差别实现人员开发的模块集成为可实行系统。
⑤测试:检查各子系统之间的交互、集成,验证所有需求是否均被精确实现,对发现的软件质量上的缺陷进行归档,对软件质量提出改进建议。
⑥部署:打包、分发、安装软件,升级旧系统;培训用户及销售人员,并提供技能支持。
⑦配置与变动管理:跟踪并维护系统开发过程中产生的所有成品的完整性和一致性。
⑧项目管理:为软件开发项目提供筹划、人员分配、实行、监控等方面的指导,为风险管理提供框架。
⑨环境:为软件开发机构提供软件开发环境,即提供过程管理和工具的支持。
2、RUP把软件开发生命周期划分为多个循环,每个循环生成产品的一个新的版本,每个循环依次由以下四个连续的阶段构成,每个阶段完成确定的任务。
①初始阶段:定义终极产品视图和业务模型,并确定系统范围。
②细化阶段:计划及确定系统的体系结构,制订工作筹划及资源要求。
③构造阶段:构造产品并继续演进需求、体系结构、筹划直至产品提交。
④移交阶段:把产品提交给用户使用。
3、RUP中定义了如下一些核心概念,理解这些概念对于理解RUP很有帮助。
①角色:Who的问题。角色形貌某个人或一个小组的行为与职责。RUP预先定义了很多角色,如体系结构师、计划人员、实现人员、测试员和配置管理人员等,并对每一个角色的工作和职责都做了细致的阐明。
②活动:How的问题。活动是一个有明确目标的独立工作单元。
③成品:What 的问题。成品是活动生成、创建或修改的一段信息。
④工作流:When的问题。工作流形貌了一个故意义的连续的活动序列,每个工作流产生一些有代价的产品,并显示了角色之间的关系。
4、RUP的特点:
(1)用例驱动:需求分析、计划、实现和测试等活动都是用例驱动的。
(2)以体系结构为中心:包罗系统的总体组织和全局控制、通讯协议、同步、数据存取、给计划元素分配功能、计划元素的组织、物理分布、系统的伸缩性和性能等。软件的体系结构是一个多维的结构,会接纳多个视图来形貌。
在典范的4+1视图模型(图)中,分析人员和测试人员关心的是系统的行为,会偏重于用例视图;终极用户关心的是系统的功能,会偏重于逻辑视图;程序员关心的是系统的配置、装配等问题,会偏重于实现视图;系统集成人员关心的是系统的性能、可伸缩性、吞吐率等问题,会偏重于历程视图;系统工程师关心的是系统的发布、安装、拓扑结构等问题,会偏重于部署视图。
https://img-blog.csdnimg.cn/1ea6b188fff0425787b718113dadf093.jpg
(3)迭代与增量。把整个项目开发分为多个迭代过程。在每次迭代中,只思量系统的一部分需求,进行分析、计划、实现、测试和部署等过程;每次迭代是在已完成部分的基础上进行的,每次增长一些新的功能实现,以此进行下去,直至末了项目完成。
八、逆向工程
1、软件复用是将已有软件的各种有关知识用于创建新的软件,以缩减软件开发和维护的时间。软件复用是提高软件生产力和质量的一种重要技能。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包罗范畴知识、开发履历、计划决定、体系结构、需求、计划、代码和文档等统统有关方面。
2、软件的逆向工程是分析程序,力图在比源代码更高抽象条理上创建程序的表示过程,逆向工程是计划的规复过程,其四个级别如下:
①实现级:包罗程序的抽象语法树、符号表、过程的计划表示。
②结构级:包罗反映程序分量之间相互依赖关系的信息,如调用图、结构图、程序和数据结构。
③功能级:包罗反映程序段功能及程序段之间关系的信息,如数据和控制流模型。
④范畴级:包罗反映程序分量或程序诸实体与应用范畴概念之间对应关系的信息,如E-R模型。其中,范畴级抽象级别最高、完备性最低,实现级抽象级别最低、完备性最高。
3、与逆向工程相干的概念有重构、计划规复、再工程和正向工程。
(1)重构是指在同一抽象级别上转换系统形貌形式。
(2)计划规复是指借助工具从已有程序中抽象出有关数据计划、总体结构计划和过程计划等方面的信息。
(3)再工程是指在逆向工程所获得信息的基础上,修改或重构已有的系统,产生系统的一个新版本。再工程是对现有系统的重新开发过程,包罗逆向工程、新需求的思量过程和正向工程三个步骤。它不仅能从已存在的程序中重新获得计划信息,而且还能使用这些信息来重构现有系统,以改进它的综合质量。在利用再工程重构现有系统的同时,一般会增长新的需求,包罗增长新的功能和改善系统的性能。
(4)正向工程是指不仅从现有系统中规复计划信息,而且使用该信息去改变或重构现有系统,以改善其整体质量。
九、模块内聚和模块耦合
1、系统计划相干知识
①系统计划的主要目标:为系统制订蓝图,在各种技能和实验方法中权衡利弊,精心计划,公道地使用各种资源,终极勾画出新系统的具体计划方法。
②系统计划的方法:结构化计划方法,面向对象计划方法。
③系统计划包罗概要计划和具体计划。
④概要计划的基本任务:又称为系统总体结构计划,是将系统的功能需求分配给软件模块,确定每个模块的功能和调用关系,形成软件的模块结构图,即系统结构图。
⑤具体计划的基本任务:模块内具体算法计划、模块内数据结构计划、数据库的物理计划、其他计划(代码、输入/输特别式、用户界面)、编写具体计划阐明书、评审。
⑥系统计划的基本原理:
1)抽象化。2)自顶而下,渐渐求精。3)信息潜伏。4)模块独立(高内聚,低耦合)。5)系统计划原则。6)保持模块的巨细适中。7)尽可能淘汰调用的深度。8)多扇入,少扇出。9)单入口,单出口。10)模块的作用域应该在模块之内。11)功能应该是可推测的。
2、模块内聚
模块内聚程度从低到高分别为偶尔内聚、逻辑内聚、时间内聚、过程内聚、通讯内聚、顺序内聚和功能内聚。
https://img-blog.csdnimg.cn/ffd5de162e6044f3af1c307e8ed64d93.jpg
https://img-blog.csdnimg.cn/1ad121406e684259aee542caa07f7cf1.jpg
3、模块耦合
模块耦合程度从低到高分别为无直接耦合、数据耦合、标志耦合、控制耦合、外部耦合、公耦合和内容耦合。
https://img-blog.csdnimg.cn/368289af0e254e558b31b86268ff5f1b.jpg
十、测试基础知识
1、测试类型
测试类型按照是否在盘算机上运行程序,可以分为两大类:
(1)动态测试:程序运行时测试,分为以下三种方法。
①黑盒测试法:功能性测试,不了解软件代码结构,根据功能计划用例,测试软件功能。
②白盒测试法:结构性测试,明确代码流程,根据代码逻辑计划用例,进行用例覆盖。
③灰盒测试法:即既有黑盒,也有白盒。
(2)静态测试:程序静止时即对代码进行人工查察,分为以下三种方法。
①桌前检查:程序员检查自己编写的程序,在程序编译后,单元测试前。
②代码查察:由若干个程序员和测试人员构成评审小组,通过召开程序评审会来进行查察。
③代码走查:也是接纳开会的形式来对代码进行查察,但并非简单的检查代码,而是由测试人员提供测试用例,让程序员扮演盘算机的角色,手动运行测试用例,检查代码逻辑。
2、测试用例计划
(1)黑盒测试用例:将程序看做一个黑盒子,只知道输入、输出,不知道内部代码,由此计划出测试用例,分为以下几类:
①等价类划分:把所有的数据按照某种特性进行归类,而后在每类的数据里选取一个即可。等价类测试用例的计划原则是计划一个新的测试用例,使其尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到所有的有效等价类都被覆盖为止;计划一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步,直到所有的无效等价类都被覆盖为止。
②边界值划分:将每类的边界值作为测试用例,边界值一般为范围的两端值以及在此范围之外的与此范围隔断最小的两个值,如年龄范围为0~150,边界值为0、150、-1、151。
③错误推测:没有固定的方法,凭履历而言,来推测有可能产生问题的地方,作为测试用例进行测试。
④因果图:由一个结果来反推缘故原由的方法,具体结果具体分析,没有固定方法。
(2)白盒测试用例:知道程序的代码逻辑,按照程序的代码语句来计划覆盖代码分支的测试用例,覆盖级别从低至高分为以下几种:
①语句覆盖(SC):逻辑代码中的所有语句都要被实行一遍,覆盖层级最低,因为实行了所有的语句,不代表实行了所有的条件判断。
②判定覆盖(DC):逻辑代码中的所有判断语句的条件的真假分支都要覆盖一次。
③条件覆盖:程序流程图里每一个判定里的每一个子条件都要取真和假。
④条件判定覆盖(CC):针对每一个判断条件内的每一个独立条件都要实行一遍真和假。
⑤条件判定组合覆盖(CDC):同时满足判定覆盖和条件覆盖。
⑥路径覆盖:逻辑代码中的所有可行路径都覆盖了,覆盖层级最高。
3、调试
(1)测试与调试的区别。
①测试是发现错误,调试是找出错误的代码和缘故原由。
②调试需要确定错误的精确位置;确定问题的缘故原由并设法改正;改正后要进行回归测试。
(2)调试的方法。
①蛮力法:又称为穷举法或枚举法,穷举出所有可能的方法一一尝试。
②回溯法:又称为试探法,按选优条件向前搜索,以达到目标,当发现原先选择并不优或达不到目标时,就退回一步重新选择。
③演绎法:是由一般到特殊的推理方法,与“归纳法”相反,一般性的前提出发,得出具体陈诉或个别结论的过程。
④归纳法:是由特殊到一般的推理方法,从测试所暴露的问题出发,收集所有精确的或不精确的数据,分析它们之间的关系,提出假想的错误缘故原由,用这些数据来证明或反驳,从而查出错误所在。
4、软件度量
(1)软件的两种属性。外部属性指面向管理者和用户的属性,可直接丈量,一般为性能指标。内部属性指软件产品自己的属性,如可靠性等,只能间接丈量。
(2)McCabe度量法,又称环路复杂度。假设有向图中有向边数为m,节点数为n,则此有向图的环路复杂度为m-n+2.
注意m和n代表的寄义不能肴杂,可以用一个最简单的环路来做特殊值记忆此公式,别的,针对一个程序流程图,每一个分支边(连线)就是一条有向边,每一条语句(语句框)就是一个顶点。
此外,推荐使用另一种更简单的盘算公式:环路复杂度=判定节点个数+1。
十一、系统运行与维护
1、系统转换
https://img-blog.csdnimg.cn/9639b2bb290f44588fc7bef9763882c5.jpg
2、系统维护概述
系统的可维护性可以定义为维护人员理解、改正、改动和改进这个软件的难易程度,其评价指标如下:
(1)易分析性。软件产品诊断软件中的缺陷或失效缘故原由或识别待修改部分的本领。
(2)易改变性。软件产品使指定的修改可以被实现的本领,实现包罗编码、计划和文档的更改。
(3)稳定性。软件产品制止由于软件修改而造成意外结果的本领。
(4)易测试性。软件产品使已修改软件能被确认的本领。
(5)维护性的依从性。软件产品遵循与维护性相干的标准或约定的本领。
系统维护包罗硬件维护、软件维护和数据维护,其中软件维护类型如下:
(1)精确性维护:发现了bug 而进行的修改。
(2)顺应性维护:由于外部环境发生了改变,被动进行的对软件的修改和升级。
(3)完善性维护:基于用户主动对软件提出更多的需求,修改软件,增长更多的功能,使比之前的软件功能、性能更高,更加完善。
(4)防备性维护:对将来可能发生的bug进行防备性修改。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]