软件开发模型
软件工程的任务是基于需求分析的结果,建立各种设计模型,给出问题的解决方案。分为概要设计与详细设计两个阶段。
概要设计: 软件体系结构的设计、模块划分、数据设计和接口设计。
详细设计阶段: 数据结构与算法设计。
瀑布模型:
各个活动规定为线性顺序连接的若干阶段的模型。是一种理想的现象开发模型,缺乏灵活性,无法理解软件需求不明确或不准确的问题。适用于需求明确的项目。
快速原型模型:
在项目开发的初级阶段构造一个简易的系统,逐步演化为最终产品(适用于需求不明确的情况)。往往只应用与需求分析阶段。
演化模型: 从初始的原型逐步演化成最终软件产品,特别适用于对软件需求缺乏准确认识的情况。
增量模型: 把软件作品作为一系列增量构件来设计、编码、集成和测试,先提供给用户核心模块,在增量开发中逐步理解需求,进行改进。可以较早的发现问题。
螺旋模型: 一种演化软件开发过程模型,将瀑布模型与快速原行模型结合起来,兼顾了快速原型的迭代以及瀑布模型的系统化与严格监控,并加入两种模型均忽略了的风险分析,适用于复杂的大型软件。
V模型: 强调要及早的进行测试,强调测试要贯穿与开发的始终。
喷泉模型: 适合面向对象开发
RAD(快速开发模型): SDLC + CBSD
构件组装模型(CBSD):
把软件开发中的各个模块作成标准构件,然后将构件进行组装就得到了我们需要的软件。极大的提高了软件开发的复用性,可以使软件开发的总时长极大减小,软件成本降低,可靠性提高。
统一过程模型UP: 一种以用例和风险驱动、以架构为中心、迭代并且增量的开发过程,由UML方法和工具支持。UP过程定义了五个阶段,起始阶段、精化阶段、构建阶段、移交阶段和产生阶段。开发过程中包含多次迭代,每次迭代都包括:计划、分析、设计、构造、集成测试,以及内部和外部发布。每个迭代有五个核心工作流。
起始阶段: 项目的初始化活动
精化阶段: 理解最初的领域范围之后,进行需求分析和框架演进
构建阶段: 关注系统的构建,产生实现模型
移交阶段: 关注软件提交方面的工作,产生软件增量
产生阶段: 运行软件并检测软件的持续使用,提供运行环境的支持,提交并评估缺陷报告和变更需求。
敏捷开发方法:适用于小型项目。
极限编程XP: 代码所有权归于整个开发队伍,激发开发人员的创造性。其中的结对编程就是一种对代码的审计过程,XP主要解决代码质量低的问题,不影响编码速度。
水晶法Crystal: 认为每一个不同的项目都需要一套不同的策略、约定和方法论。
并列争球法Scrum: 使用迭代的方法,其中把每30天一次的迭代作为一个冲刺,并按需求优先级来实现产品。
自适应开发: ASD六个基本原则
信息系统开发方法:
结构化方法: 由结构化分析、结构化设计、结构化程序设计构成,它是一种面向数据流的开发方法。总的指导思想是自顶向下、逐层分解,基本原则是功能的分解与抽象。特别适合于数据处理领域的问题,但是不适合解决大规模、特别复杂的项目,且难以适应需求的变化。
Jackson方法: 这是一种面向数据结构的开发方法。以数据结构为驱动,适合于小规模的项目。当输入数据结构与输出数据结构之间没有对应关系时,难以应用此方法。
原型化方法: 比较适合于用户需求不清、业务理论不确定、需求经常变化的情况。当系统规模不是很大也不太复杂时,适合使用。
面向对象开发方法: 包括面向对象分析、面向对象设计和面向对象实现,采用统一建模语言(UML)。
结构化分析模型包括: 数据流图、实体联系图、状态迁移图、数据字典
成本估算模型:
Putnam: 一种动态多变量模型,假设在软件开发的整个生存期中工作量有特定的分布。
COCOMO:
基本COCOMO:静态单变量模型,对整个软件系统进行估算
中级COCOMO:静态多变量模型,将软件系统模型分为系统和部件两个层次,系统又部件构成
详细COCOMO:将软件分为系统、子系统、模块三层,除包括中级模型所考虑因素外,还要考虑需求分析、软件设计等每一步成本驱动属性的影响。
COCOMO II: 以模板作为成本的主要因素,考虑多个成本驱动因子。该方法包括应用组装模型、早期设计阶段模型、体系结构阶段模型三个阶段。估算选择有:对象点、功能点、代码行
专家评估: 依靠专家的背景和经验进行评估。
Wolverton: 基于成本矩阵,定义不同的软件类型和难易成本,基于此计算软件开发的成本。
软件能力成熟度模型集成(CMMI):
CMMI提供两种标识方法:阶段式模型、连续式模型
连续式模型包括六个过程域能力等级(CL):
CL0:未完成的,未执行或未达到CL1定义的所有目标。
CL1:已执行的,共形目标是过程将可标识的输入工作产品转换成可标识的输出工作产品,以实现支持过程域的特定目标。
CL2:已管理的,共性目标集中与已管理的过程的制度化。
CL3:已定义的,共性目标集中与已定义的过程的制度化
CL4:定量管理的,共性目标集中可定量管理的过程的制度化,
CL5:优化的使用量化手段改变和优化过程域,以对付客户要求的该百年或持续改进计划中的过程域功效。
CMM软件开发能力成熟度模型,给出了一个从个别的过程达到成熟的规范化过程的一个框架,分为五个阶段:
等级1:初始级,混乱不可预测
等级2:重复级,项目的到监控和追踪,有稳定的策划和产品基线。
等级3:确定级,通过软件过程定义和制度优化确保对产品质量的控制
等级4:管理级,产品质量得到策划,软件过程基于度量的追踪
等级5:优化级,持续的过程能力改进。
软件配置管理SCM: 用于整个软件工程的过程,其主要目标是标识变更、控制变更、确保变更正确实现,报告变更。
其主要内容包括:版本管理、配置支持、变更支持、过程支持、团队支持、变化报告、审计支持
ISO/IEC 9126软件质量模型: 定义了六个软件质量标准
需求的分类
功能需求:所开发软件必须具有什么样的功能
非功能需求:产品必须具有什么样的属性或品质,如可靠性、性能、响应时间、扩展性等
设计约束:对解决方案的一些列约束说明
结构化设计:
内聚与耦合:
内聚:
①功能内聚: 最强的内聚,指模块内的所有元素共同作用完成一个功能,缺一不可。
②顺序内聚: 指一个模块中的各个处理元素都密切相关于同一功能,且必须按顺序执行,前一功能元素的输出就是下一功能元素的输入。
③通信内聚: 指模块内的所有处理元素都在同一个数据结构上操作,或者各处理使用相同的输入数据或者产生相同的输出数据。
④过程内聚: 指一个模块完成多个任务,这些任务必须按指定的次序执行。
⑤瞬时内聚: 把需要同时执行的动作组合在一起形成的模块,所包含的任务必须在同一时间间隔内执行。
⑥逻辑内聚: 指模块内执行若干个逻辑上相似的功能。
⑦偶然内聚: 指一个模块内的各处理元素之间没有任何联系。
内聚性:功能内聚>顺序内聚>通信内聚>过程内聚>时间内聚>逻辑内聚>偶然内聚(内聚性越高,模块独立性越强)
耦合:
①无直接耦合: 两个模块之间没有直接的关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
②数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言中的值传递。
③标记耦合: 指两个模块之间传递的是数据结构。
④控制耦合: 指一个模块调用另一个模块时,传递的是控制变量,被调用模块通过该控制变量的值有选择地执行模块内的某一功能。
⑤外部耦合: 模块间通过软件之外的环境联结(如I/O将模块耦合到特定的设备、格式、通信协议上)。
⑥公共耦合: 指多个模块都访问同一个公共数据环境。
⑦内容耦合: 当一个模块直接使用另一个模块的内部数据,或通过非正常入口转入另一个模块内部的耦合。
耦合性:无直接耦合<数据耦合<标记耦合<控制耦合<外部耦合<公共耦合<内容耦合(耦合性越低,模块独立性越强)
软件测试
测试原则与类型:
测试用例设计:
测试阶段:
McCabe复杂度:
环路复杂度:V(G)=m-n+2,m边,n点
系统运行与维护:
改正性维护: 改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。
适应性维护: 使应用软件适应信息技术变化和管理需求变化而进行的修改。
完善性维护: 为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。
预防性维护: 为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。
项目管理基础知识:
软件项目活动图:
Gantt图: 一种简单的水平条形图,以日历为基准描述项目任务。可以清晰的描述某个任务从何时开始,到何时结束,任务的进展情况以及各个任务之间的并行性。但是不能清晰反应各任务之间的依赖关系,难以确认整个项目的关键所在,也不能反映计划中有潜力的部分。
PERT图: 不仅给出了每个任务的开始时间、结束时间和完成该任务所需的时间,还给出了人物之间的依赖关系,即哪些任务完成后才能开始另外一些任务,以及如期完成整个工程的关键路径。但是它不能反映任务之间的并行关系。
例题:
答案:D,C(先正推每个节点的最长开始时间,然后从最后一个逆推最晚开始时间)
冗余
通常冗余附加技术分为四类:结构冗余、信息冗余、时间冗余、冗余附加
冗余附加技术: 实现其他类型冗余技术所需要的资源技术,包括程序指令、数据、存储和调用它们的空间通道等。
在屏蔽硬件错误的容错技术中,冗余附加技术包括:关键程序和数据的冗余存储及调用:检测、表决、切换、重构、纠错和报复的实现。
在屏蔽软件的冗余技术中,冗余附加技术包括:冗余备份程序的存储及调用;实现错误检测和错误恢复程序;实现错误软件所需要的固化程序。
风险评估
软件风险包括两个特性:不确定性和损失
风险的优先级通常是根据风险暴露(风险曝光度)设定的。风险暴露=风险影响*风险概率
项目的主要风险:
项目风险:涉及各 种的预算、进度、人员、资源以及和客户相关的问题;
技术风险:潜在的设计、实现、对阶、测试等维护问题
业务风险:建立一个无人想要的项目的风险、失去预算的风险等
商业风险:市场风险、策略风险、管理风险预算风险等
软考历年真题及B站相关视频课件:
链接:https://pan.baidu.com/s/1e4d1-HGOzcEVHSK8Q0j_xA
提取码:acij