软件工程概述(软件设计师备考笔记)

目录

第九章.软件开发模型(重点)

第一节.瀑布模型

第二节.原型、演化模型、增量模型(解决用户需求分析困难)

第三节.螺旋模型(强调风险分析)

第四节.V模型(强调测试)

第五节.喷泉模型与RAD(了解)

第六节.构件组装模型(CBSD)

第七节.统一过程模型(UP)

第八节.信息系统开发方法

第九节.需求的分类

第十节.结构化设计

第十一节.软件测试

第十二节.系统运行与维护

第十三节.软件过程能力成熟度模型(CMMI)

特殊——项目管理基础知识


第十章.软件开发模型(重点)

工程图(重点)、各开发方法(只需要知道哪个用于哪个)、概要&详细设计、敏捷开发方法

注:重要程度依次递减

开发模型是软件工程当中指导开发的一种开发思想、开发体系

第一节.瀑布模型

 

优点:是结构化方法的模型,每一个阶段都分工明确

缺点:需求分析很难把控,因此一般适用于需求明确或者二次开发

注:瀑布模型适用于软件需求很明确的工程

第二节.原型、演化模型、增量模型(解决用户需求分析困难)

 

图注:

(1)原型和瀑布模型是互补关系,原型是为了解决用户需求分析难以把控即需求不明确而提出的,该模型即:先做出初步模型,然后让用户使用,以便于用户进一步明确自己的需求,是一种抛弃式的模型,因为需求一旦明确就会被抛弃

(2)演化模型即是一种渐进式的原型,即它采取原型的设计模式,但不会将其抛弃,而是在此基础上进一步进行设计

(3)增量模型:是一种递增式设计,将产品一步一步进行设计,每完成一步就交由客户审视,这样也可以使得下一步的设计更为明确

第三节.螺旋模型(强调风险分析)

 

图注:螺旋模型综合了瀑布模型和演化模型的优点,还增加了风险分析,螺旋模型包含四个方面的活动:制定计划、风险分析(是螺旋模型最为显著的特征)、实施工程、客户评估

第四节.V模型(强调测试)

 

图注:该模型极为强调测试的作用,测试始终贯穿流程的始终,如:需求分析完成后就进行验收测试和系统测试,概要设计完成后就进行集成测试

第五节.喷泉模型与RAD(了解)

喷泉模型

1.概述:该模型最大的特点是面向对象

2.特点:基于面向对象的迭代和无间隙

RAD模型

1.概述:该模型最大的特点是能够快速构建业务系统

2.内容:包括:业务建模、数据建模、过程建模、应用生成、测试与交付

第六节.构件组装模型(CBSD)

 

图注:该模型将软件开发过程中的各个模块都做成构件,最后再将构件进行组装,基于构件的软件开发,主要强调在构建软件系统时复用已有的软件“构件”,在检索到可以使用的构件后,需要针对新系统的需求对构件进行合格性检验适应性修改,然后集成到新系统中

优点:极大的提高了软件开发当中的复用性,缩短时间、节省成本、增强可靠性

第七节.统一过程模型(UP)

统一过程模型定义了四个技术阶段及其制品,包括:

1.起始阶段:该阶段专注于项目的初创活动

2.精化阶段:精化阶段在理解了最初的领域范围之后进行需求分析和架构演进

3.构建阶段:该阶段关注系统的构建,产生实现模型

4.移交阶段:关注软件提交方面的问题,产生软件增量

第七节.敏捷开发方法

 

图注:该方法是一类方法,其特点是快捷,该类方法包括:自适应开发、水晶方法、特征驱动开发、SCRUM、极限编程;他们都遵循一些基本原则和价值观,该类方法适用于做小型项目

1.极限编程(XP)特点:测试先行、结对编程、集体代码所有制、持续集成(可以按日甚至按小时为客户提供可运行的版本)、每周工作40个小时

2.并列争球法特点:使用迭代的方法,其中把每三十天一次的迭代成为一个冲刺,并按需求的优先级来实现产品,多个自组织和自治小组递增实现产品,并通过简短的日常情况会议进行协调

3.水晶法特点:该方法认为每一个不同的项目都需要一套不同的策略、约定和方法论

4.敏捷开发方法的重要技术

·重构:重构是一种重新组织技术,重新审视需求和设计,重新明确的描述他们的需求和现有的需求,可以简化构件的设计而无需改变其功能或行为

第八节.信息系统开发方法

 

图注:该类方法包括四种:结构化法、原型法、面向对象方法、面向服务方法;其中结构化方法的典型代表是瀑布模型,原型法的典型代表是原型和演化模型,目前应用最广的方法是面向对象方法,而面向服务方法尚处于摸索阶段

第九节.需求的分类

 

图注:软件需求包括三类:业务需求、用户需求、系统需求;系统需求是用户需求的发展,而系统需求包括功能需求、性能需求、设计约束(即开发语言的选用)

第十节.结构化设计

即结构化方法中的软件设计问题,包括概要设计和详细设计,其设计原则是:自顶向下、逐步求精,信息隐蔽、模块独立(通过:高内聚、低耦合、复杂度)

内聚与耦合

 

 

图注:耦合是指模块与模块之间的关系,内容耦合的在耦合中程度最高

结构化设计的原则

1.保持模块的大小适中

2.尽可能减少调用的深度

3.多扇入,少扇出(上层模块调用自己称之为扇入,自己调用其他模块称之为扇出)

4.单入口,单出口

5.模块的作用域应该在模块之内

6.功能应该是可预测的

结构化分析的结果

包括:一套分层的数据流图、一本数据词典、一组小说明(又称加工逻辑说明)、补充说明

概要设计

概要设计包括四个项目

1.设计软件系统总体结构

2.数据结构设计

3.数据库设计

4.编写概要设计文档:文档中应有概要设计说明书、数据库设计说明书、用户手册以及修订测试计划

注:需求分析确定软件要完成的功能及非功能要求,概要设计将需求转化为软件的模块划分,确定模块之间的调用关系;详细设计将模块进行细化,得到详细的数据结构和算法;编码根据详细设计进行代码的编写,得到可以运行的软件,并进行单元测试

第十一节.软件测试

测试原则与类型

1.原则:(1)尽早、不断的进行测试;

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

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

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

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

2.类型:软件测试类型分为动态测试(利用到了计算机的测试)和静态测试(纯手工的测试)

(1)动态测试包括:黑盒测试法(即看不到程序内部,只管输入的是什么,输出的是什么)、白盒测试法(从程序结构方面进行测试)、灰盒测试法

(2)静态测试包括:桌前检查、代码走查、代码审查

测试用例设计

 

图注:

黑盒测试:

等价类划分:即将所有数据类划分为许多个层次,每个数据层次挑选出一个最具代表性的数据进行测试即可

边界值分析:即需要对等价类之间的边界值进行测试(一般是端点、略小于端点的值、略大于端点的值)

错误推测:即自己推测错误的原因,该方法强调经验

白盒测试(主要是逻辑覆盖测试):

语句覆盖测试:即程序中的每一条语句都要进行测试(覆盖度最低的测试),通过设计n组数据,使其覆盖掉所有的路径

判定覆盖:即所有判断的真假分支都要测试一遍

条件覆盖:即在判定时对判定的条件的真假性进行测试

测试阶段

 

图注:测试阶段可分为四个步骤:单元测试、集成测试、确认测试、系统测试;许多项目只需做到确认测试

单元测试:模块性的测试,即对于一个函数,是否达到了其目的,每个模块的功能是否完善

集成测试:即模块间的衔接测试,不衔接的模块就将其组装起来,组装方式有两种:一次性组装(一次全部组装)和增量式组装(组装两个模块时测试一下、组装到三个模块时再测试一下….)

确认测试:即对需求进行确认,测试该程序是否满足需求,测试包括:内部确认测试、Alpha测试(即项目在开发环境进行测试)、Beta测试(即用户在自己的本地计算机自行测试)、验收测试

系统测试:主要是压力、性能、可靠性的测试,而性能测试包括:负载测试、强度测试(即系统资源缺失的情况下系统能否正常运行)、容量测试,压力测试则是测试同时访问人数的极限

软件测试抽象方法

1.演绎法(靠蒙的推理):从一般性的前提出发,通过推导即“演绎”,得出具体陈述或个别结论的过程

2.归纳法(有素材的推理):以一系列经验事物或知识素材为依据,寻找出其服从的基本规律或共同规律,并假设同类事物中的其他事物也服从这些规律,从而将这些规律作为预测同类事物的其他事物的基本原理的一种认知方式

McCabe复杂度(必考)

 

图注:这类题通常将程序抽象为有向图,并要求计算环路复杂度

计算有向图的环路复杂度公式为:V(G)=m-n+2;说明:其中V(G)是有向图G中的环路个数,m是G中的有向弧数(边数),n是G中的节点数(点数)

第十二节.系统运行与维护

软件维护的概念

软件维护即需要提供软件支持的全部活动,这些活动包括在交付前完成的活动,以及在交付后完成的活动,交付前完成的活动包括交付后运行的计划和维护计划等;交付后的活动包括软件修改、培训、帮助资料等

可维护性

包括可分析性、易分析性(即代码应该容易看懂)、易改变性、易测试性

维护类型

包括:

1.改正性维护:即用户发现bug,然后我就修改bug

2.适应性维护:即解决运行平台版本更迭的问题

3.完善性维护:指在运行过程中发现了一些不足,进而对系统的性能等方面进行完善和扩充

4.预防性维护:对将来可能导致的问题进行预防工作

注:系统设计中,人机交互“黄金三原则”包括:置于用户控制之下、减少用户的记忆负担、保持界面的一致性

软件的质量特性及其子特性

1.功能性:适合性、准确性、互操作性、依从性、安全性

2.可靠性:成熟性、容错性、易恢复性

3.易用性:易理解性、易学性、易操作性

4.效率:时间特性、资源特性

5.可维护性:易分析性、易改变性、稳定性、易测试性

6.可移植性:适应性、易安装性、遵循性、易替换性

软件维护工具

包括:

1.版本控制工具

2.文档分析工具

3.开发信息库工具

4.逆向工程工具

5.再工程工具

第十三节.软件过程能力成熟度模型(CMMI)

 

CMMI是一个软件开发团队的评级标准,该评级标准分为了阶段式和连续式两种分组

阶段式

一级为混乱级,即未通过CMMI认证的团队都是该等级

二级为项目级,即对某个具体的项目有相关开发经验和开发能力,但只限于模仿和套用

三级为定义级,该进别下的团队有了自己的改进能力,能对他人的项目提出不同的看法

连续式

CL0(未完成的):过程域未执行或未得到CL1中定义的所有目标

CL1(已执行的):其共性目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特别目标

CL2(已管理的):其共性目标是已管理的过程的制度化。根据组织级政策规定过程的运作将使用哪个过程,项目遵循已文档化的计划和过程描述,所有正在工作的人都有权使用足够的资源,所有工作任务和工作产品都将被监控、控制、和审评

CL3(已定义级的):其共性目标集中于已定义的过程的制度化。过程是按照组织的裁剪指南从组织的标准过程中裁剪得到的,还必须收集过程资产和过程的度量,并且用于将来对过程的改进

CL4(定量管理的):其共性目标集中于可定量管理的过程的制度化,使用测量和质量保证来控制和改进过程域,建立和使用关于质量和过程执行的质量目标作为管理准则

CL5(优化的):使用量化(统计学)手段改变和优化过程域,以满足客户的改变和持续改进计划中的过程域的功效

特殊——项目管理基础知识

 

图注:该章节只需要掌握时间管理的概念及计算以及风险管理的概念;右图为Gantt图,其最为直观的特点是简洁明了,可以很清楚的看到计划的开展,缺点是不能看出计划间的逻辑关系,无法看出哪个任务先做,哪个任务后做

PERT图的计算相关问题

 

图注:PERT图的缺点是不能清晰地描述各个任务之间的并行关系,每一个原型的左侧是事件执行的顺序 ,右上角是最早时间,右下角是最晚时间;事件六的最晚开始时间的计算步骤:先从事件1逐步进行推进,如事件1到事件2最早需要时间加2,事件2到事件5则再需要加2(此时最早时间等于4),而事件1到事件6需要的最早执行时间为3,事件4到事件6的最早时间为4,因此取时间长的为事件6的执行时间(原因是事件六的执行需要事件3和4共同作用),以此类推,事件9所需最早时间为15,再由事件9逆推回来15-4-1=10即为事件6的最晚开始时间

风险管理

1.风险:指“损失或伤害的可能性”,风险可以分为项目风险和技术风险以及商业风险,特点是关心未来、关心变化、关心选择

2.风险曝光度:计算方法是:风险出现的概率乘以风险可能造成的损失;风险曝光度常用于风险的管控

软件项目估算

常用的估算方法有三种:基于已经完成的类似项目进行估算、基于分解技术进行估算(分解技术包括问题分解和过程分解)、基于经验估算模型(IBM模型、COCOMO模型、Putnam模型)

1.COCOMO:该模型按其详细程度分为基本、中级、详细COCOMO模型

·基本:该模型是一个静态单变量模型,用于对整个软件系统进行估算

·中级:该模型时一个静态多变量模型,将软件系统模型分为了系统和部件两个层次,系统由部件构成

·详细:将软件系统模型分为系统、子系统和模块三个层次

注:COCOMOII模型在模型层次结构中有三种不同的规模估算选择:对象点、功能点和代码行

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

上一篇 2021年1月22日
下一篇 2021年1月22日

相关推荐