2011年计算机软考总结

* 软件的概念:程序+ 数据+ 文档

  * 软件开发的六个阶段:制定计划、需求分析、软件设计 、程序编写 、软件测试 、运行/维护,其中,需求分析阶段对项目的影响最大,决定做什么,软件设计是解决怎么做,程序编码:软件实现,测试查找软件的错误、维护不属于软件开发阶 段,周期最长,消耗软件费用最多。

  * 软件工程:方法(软件开发方法)+工具(CASE工具,软件开发工具+集成环境)+过程 (软件生命期)

  * 软件项目管理:进度管理、成本管理、质量管理、人员管理、资源管理、标准化管理。管理的对象是进度、系统规模及工作量估算、经费、组织机构和人员、风险、 质量、作业和环境配置,其中,进度管理管理主要采用甘特图、PERT技术叫做计划评审技术、CPM方法叫做关键路径法;成本估算主要模型有普特南 (Putnam)COCOMO(结构性成本) 、配置管理主要管理软件的项目文档、开发技术文档、源代码版本、发布程序版本等。

  * CMM(软件能力成熟度模型)CMM1:初始级(没有计划,只有编码和测试);CMM2: 可重复级(基于过往的项目的经验来计划与管理新的项目);CMM3定义级(软件开发过程文件将被制订出来,标准化过程);CMM4定量管理级 (所有项目的重要的过程活动进行生产率和质量的度量,质量目标);CMM5优化级 (重点放在对过程进行不断的优化)

  * 软件开发方法: 瀑布模型(自上而下逐次进行,需求明确的项目,传统的模型);原型模型(演化模型,需求不明确,原型逐步演进);螺旋模型(大型项目,减低风险采用制定计 划、风险分析、实施工程、客户评估四象限的方式对原型逐步螺旋演进);喷泉模型 (适用于面向对象开发方法,分析、设计和编码之间不存在明显的边界,所谓无间隙)

  * 需求分析:识别问题、分析问题、编写文档、需求分析评审四个阶段,解决系统做什么的问题。结构化分析(SA)采用数据流的方式分析需求,自上而下,逐步分 解,基本思想使分解与抽象,常用数据流图、数据字典进行表示,数据流图主要有数据流、加工、数据存储、外部实体组成;数据字典描述流程图中所有元素的定 义。加工逻辑采用结构化语言、判定树、判定表构成。快速原型法分析思想主要针对需求不明确的项目进行开发,可以采用抛弃型原型(从需求不明确的开始,主要 目标在于了解系统需求,之后抛弃原型,大项目使用)和进化型(需求明确的开始,逐步进化为目标系统)

  * 软件设计阶段主要解决怎么做的问题。分概要设计(软件需求转化为数据结构和软件的系统结构,并建立接口)与详细设计(过程设计。通过对结构表示进行细化,得到软件的详细的数据结构和算法 )两个阶段。体系结构设计、接口设计 、数据设计和过程设计四个活动 。

  * 软件设计的原则:抽象化(过程、数据、控制)、自顶向下,逐步细化 、 模块化、控制层数、数据结构、软件工程、信息隐藏

  * 内聚:低内聚:偶然内聚、逻辑内聚、时间内聚;中等程度内聚:过程内聚、通讯内聚;高内聚:顺序内聚、功能内聚

  * 耦合:低耦合:非直接耦合、数据耦合、标记耦合。中耦合:控制耦合、外部耦合。高耦合:公共耦合、内容耦合。

  * 模块设计原则:高内聚、低耦合;规模适中;深度、宽度、扇出和扇入应适当;模块的作用域应该在控制域内;设计单入口单出口的模块;力争降低模块接口的复杂程度

  * 结构化设计:分析数据流图为出发点,主要变换型和事务型。面向数据结构的设计,以数据结构为基础,以数据结构导出程序结构,服从程序结构必须适应问题结 构的基本原则。代表jackson方法(又称面向数据结构的分析与设计方法),信息数据结构程序结构,数据结构映射为程序结构。

  * 软件测试:为了发现错误而执行程序的过程,根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果)。分单 元测试(测试程序内部工作过程,通常采用白盒测试方法,如逻辑覆盖、循环覆盖、基本路径覆盖。测试依据,详细设计文档与程序源代码)、集成测试(又称功能 测试黑盒测试,方法:等价类划分、边界值划分、错误推测、因果图 。测试依据概要说明文档与详细设计文档)、确认测试(α测试<公司内部的用户在模拟环境下测试>β测试<用户在实际环境下测 试> ,主要参考需求分析文档)、系统测试(组装测试和确认测试,测试方向系统其他元素)

  * 测试计划:描述了要进行的测试活动的范围、方法、资源和进度的文档。它确定测试项、被测特性、测试任务、谁执行任务、各种可能的风险(需求分析阶段进行)

  * 测试计划与测试大纲:测试大纲只是简单的描述如何开展测试,而测试计划是针对测试中的每个环节的。大纲相当于书的目录,计划相当于书的章节内容。

  * 软件调试:诊断和改正程序中潜在的错误

  * 软件维护:软件运行维护阶段对软件产品所进行的修改;主要由改正性维护 (在特定的使用条件下暴露出来的一些潜在程序错误或设计缺陷)、适应性维护(环境变化所做的修改)、完善性维护(需求变化、功能改进,性能完善)、预防性 (提前预防问题),其中,完善性维护所在比例最多

  * 修改程序副作用:修改代码的副作用、 修改数据的副作用、 修改文档的副作用

  * 可理解性:外来读者理解软件的结构、接口、功能和内部过程的难易程度

  * 可靠性:程序按照用户的要求和设计目标,在给定的一段时间内正确执行的概率

  * 可测试性:诊断和测试的难易程度主要取决于软件容易理解的程度

  * 可修改性:软件容易修改的程度,

  * 可移植性:可移植性表明程序转移到一个新的计算环境的可能性大小

  * 效率:效率表明一个程序执行预定功能而又不浪费机器资源的程度

  * 可使用性:从用户观点出发,把可使用性定义为程序方便、实用、及易于使用的程度

  * 软件质量模型,产品修正(可维护性,可测试、灵活性),产品移植(可移植性、可复用性、互连性),产品运行(正确、可靠、效率、可使用性、完整性)

  * 面向对象方法:面向对象分析(OOA)->面向对象设计(OOD)->面向对象程序设计(OOP)

  * 面向对象建模: 面向对象建模技术所建立的三种模型——对象模型、动态模型和功能模型,分别从三个不同侧面描述了所要开发的系统。对象模型定义了做什么的实体,功能模型指明了系统应该做什么,动态模型明确规定在何种状态下,接受什么事件的触发而做什么

  * UML:统一建模语言,静态图包括用例图、类图、对象图、构件图和部署图; 动态图包括状态图、时序图、协作图和活动图。用例图:需求导出技术,识别用例与角色; 类图包括类、类之间的关联、类关联重数和继承等基本元素。对象图是系统运行某个时刻对象之间的关联关系。对象图是类图的一个实例. 时序图描述对象间的事件序列的交换和相互关系; 协作图注重对象的空间协作关系; 状态图描述系统中对象的状态变化