天软考试大纲
C语言
- 基础知识
- 了解:C语言特点;算法的基本概念与特征
- 掌握:C语言程序的结构、运行程序的步骤和方法
- 数据类型、运算符与表达式
- 掌握:各种数据类型的常量和变量表示;各类运算符的使用和表达式的计算、
- 应用:不同类型数据建的混合运算、强制类型转换运算符、复合赋值运算符
- 顺序结构程序设计
- 了解:C语句的概念及种类
- 掌握:常用输入输出函数的应用
- 应用:顺序结构程序对的应用
- 选择结构程序设计
- 掌握:关系运算符与关系表达式;逻辑运算符与逻辑表达式;if语句及其嵌套;switch语句;条件运算复合条件表达式
- 应用:选择结构程序应用
- 循环结构程序设计
- 了解:goto语句构成循环
- 掌握:while语句;do-while语句;for语句;嵌套循环;break语句;continue语句。
- 应用:循环结构程序的应用;三种结构程序的综合使用
- 数组
- 掌握:一维数组的定义和引用;二维数组的定义和引用
- 一维数组、二维数组和字符数组的使用
- 函数
- 了解:常用函数库的正确调用
- 掌握:函数的定义;函数参数和函数的值;函数的调用;变量的存储类别(自动auto、静态static、寄存器register、外部extern)
- 应用:函数的嵌套调用和递归调用;数组作为函数参数;局部徐变量和全局变量
- 编译预处理命令
- 了解:不带参宏定义和带参宏定义的使用;“文件包含”的处理
- 指针
- 了解:指针与地址的概念、指针与函数的概念、返回指针值的函数与指向函数的指针变量的区别
- 掌握:指针变量的定义、初始化及指针的运算;指针与数组、指针氏族的概念;指针访问数组元素的方法;
- 应用:指针变量作为函数参数的应用;指向数组;字符串、和函数的指针的应用;指向数组的指针作为参数时的应用;返回指针值的函数的应用;指针数组的应用
- 结构体
- 了解:结构体数组的定义和数组元素的引用;指向结构体类型数据的指针的概念及使用
- 掌握:结构体类型变量的定义、引用和初始化;结构体数组的使用
- 位运算
- 了解:位运算与位段,位结构定义的一般形式和用法
- 掌握:常用位运算的类型和位运算的种类、优先级和用法
- 文件
- 掌握:标准设备输入、输出函数的使用;缓冲文件系统的使用
软件工程
-
基础知识
- 了解:软件危机;软件的定义、特点、种类;软件工程的定义和目标
- 软件危机
- 对软件开发成本和研制进度的估计常常很不精确
- 已完成软件不能满足用户的需求
- 软件产品质量差,可靠性得不到保障
- 软件可维护性差
- 软件开发成本在计算机总成本中所占比例逐年上升
- 软件开发生产率提高的速度远远赶不上计算机应用深入普及的趋势
- 软件的定义
- 软件是程序、数据和开发使用和维护软件的所有文档的完整集合
- 软件工程的定义和目标
- 软件工程是会指导计算机开发和维护软件的一门工程学科,采用工程的概念、原理、技术和方法来开发和维护软件
- 目标
- 降低软件开发成本
- 满足用户要求的全部软件功能
- 符合用户要求、令用户满意的软件性能
- 具有良好的可用性、易用性、可维护性
- 较低的维护成本,较高的可靠性
- 按照合同要求完成开任务,及时交付用户使用
- 软件危机
- 掌握:软件生存周期、软件开发模型
- 软件生存周期
- 软件生存周期是指一个软件项目从提出并着手实现开始知道该软件报废或停止使用为止
- 软件开发模型
- 瀑布模型:也称生存周期模型或线性顺序模型,将软件生存周期的各个活动规定为依线性顺序连接的若干阶段的模型。包括问题定义、可行性研究、需求分析、概要设计、详细设计、编码、测试和维护
- 快速原型模型:首先快速建立一个符合用户主要需求的模型,让用户在计算机上试用它、让用户了解未来目标系统的概貌、以判断哪些功能是符合需求的、哪些方面需要改进,用户会提出许多改进意见,开发人员根据用户提出的意见快速修改原型系统,再次请用户使用……这样反复几次,直到建立符合用户要求的新系统
- 瀑布模型:是一种迭代模型,把软件生存周期划分为几个螺旋周期,每迭代一次,螺旋线就前进一周
- 增量模型:
- 软件生存周期
- 了解:软件危机;软件的定义、特点、种类;软件工程的定义和目标
-
可行性研究
- 掌握:可行性研究的目的、任务和步骤
- 目的:避免或减轻系统开发后期可能出现的困境
- 任务:首要任务是:进行概要的分析研究,初步确定系统的规模和目标,确定系统的约束和限制,必须分析几种可能解法的利弊,从而判定原定系统的规模和目标是否现实,系统完成后带来的效益是否大到值得开发和投资的地步
- 步骤:
- 复查确定系统的规模和目标
- 研究目前正在使用的系统
- 建立新系统的高层逻辑模型
- 导出和评价几种可行性方案
- 推荐可行性方案
- 草拟初步开发计划
- 编写可行性研究报告并提交复审
- 应用:系统流程图的符号表示和应用
- 掌握:可行性研究的目的、任务和步骤
-
需求分析
-
了解:需求分析的任务、步骤;需求获取与分析的常用方法
- 任务:
- 确定对系统的综合需求
- 分析系统的数据需求
- 建立软件逻辑模型
- 编写软件需求规格说明书
- 需求分析评审
- 步骤:
- 需求获取:调查研究
- 需求提炼:分析建模
- 需求描述:编写SRS(可行性研究报告)
- 需求描述
- 方法:
- 功能分解法
- 信息建模法
- 结构化分析法
- 面向对象方法
- 任务:
-
掌握:结构化分析方法(数据流图、数据字典、加密逻辑);需求分析图形工具(层次方框图、维纳图、IPO图);数据库内容需求分析(E-R图)
-
结构化分析方法:采用数据流图、数据字典、结构化语言、判定表、判定树等工具,编写的一种新的成为结构化说明书的目标文档
- 数据流图:是SA方法中用来描述系统逻辑模型的一种图形化工具,描述系统是由那几部分组成,各部分之间的联系等,以直观的图形清晰的描述了系统数据的流动和处理过程
- 数据字典:是对数据流图中包含所有元素的定义集合,在分析和设计阶段,给人提供数据描述,即对数据存储(文件)和处理(加工)等名字进行定义的集合
- 描述加工逻辑的结构化语言,判定表和判定树,数据流图中不能被在分解的每一个基本加工处理逻辑的详细描述采用结构化语言,判定表和判定树
-
-
应用:结构化分析方法综合应用
-
-
软件设计
- 了解:软件设计的概念、原理;软件总体设计和详细设计的目标和任务、软件结构设计准则与结构化程序设计、人机界面设计、
- 软件总体设计的目标和任务
- 目标:就是回答“概括的说,系统应该如何实现这个问题”
- 任务:
- 任务一:划分出组成系统的物理元素
- 任务二:设计软件总体结构,确定每个程序是由那些模块组成的,每个模块的功能及模块之间的接口、调用关系等
- 软件详细设计的目标和任务
- 就是确定应该如何具体实现所要求的的系统,得出对目标系统的精确描述,具体的就是为软件结构的模块确定算法和块内数据结构,用某种选定的详细设计工具更清晰的描述,从而在编码阶段可以直接把这些描述翻译成某种程序设计语言直接书写的源程序
- 有三种表示方法:图形类、语言类、表格类
- 软件结构设计准则
- 降低模块间的耦合程度、提高模块的独立性
- 模块结构的深度、宽度、扇入、扇出应适当
- 软件的作用域应该在控制范围之内
- 软件的接口设计要简单,以便降低其复杂程度
- 设计功能可预测并能得到验证的模块
- 适当划分模块,以保持其独立性
- 结构化程序设计
- 结构化程序设计遵循三种基本控制结构:顺序、条件、重复
- 结构化程序设计采用自顶向下,逐步求精的设计方法和单入口单出口的控制结构
- 为了具有人机界面应该注意哪些方面的问题
- 系统响应时间:系统响应时间过长或过短、用户就会受到负面影响
- 用户帮助设施:几乎交互式系统的每个用户都需要帮助
- 出错信息处理:出错信息设计的不好,用户就会收到无用甚至错误的信息,加重用户的挫折感
- 命令交互:用户既可以通过菜单选择软件的功能,也可以通过键盘命令序列调用软件功能
- 软件总体设计的目标和任务
- 掌握:软件结构设计的图形工具(软件结构图、层次图、HIPO图);详细设计的图形工具(程序流程图、N-S盒图、PAD图、PDL语言、判定表、判定书)
- 软件详细设计工具:
- 程序流程图:易学,表达算法直观,缺点是不够规范
- N-S盒图:只能描述结构化程序所允许的标准结构
- 问题分析图(PAD图)
- 过程设计语言(PDL)
- 软件详细设计工具:
- 应用:结构化设计方法的综合应用
- 了解:软件设计的概念、原理;软件总体设计和详细设计的目标和任务、软件结构设计准则与结构化程序设计、人机界面设计、
-
软件编码
-
了解:程序设计语言的分类、选择与风格
- 分类:基础语言、结构化语言、面向对象语言
- 风格:程序设计风格是一个人在编制程序是表现出来的习惯、特点和逻辑思路等
- 选择:
- 实用标准:
- 待开发软件的应用领域
- 用户的要求
- 软件的运行环境
- 软件的可移植性要求
- 软件开发人员的知识
- 理想标准:为了使程序容易测试和维护以降低软件开发总成本,选用的语言应该具有比较理想的模块化机制,为了便于调试和提高程序的可靠性,选用语言的特点应该使编译机制尽可能的发现程序中的错误,为了降低软件开总成本,选用的语言应该具有良好的独立编译机制
- 实用标准:
-
软件测试
- 了解:软件测试的目标、原则
- 目标:发现程序中的错误
- 原则:
- 既要有输入数据,也要有对应的输出结果,这样便于对照检查
- 既要选择合理的输入数据,也要选择不合理的输入数据,这样能更多的发现错误,提高程序的可靠性,还能检查程序的排错能力
- 既要检查程序是否做了应该做的工作,还要检查程序是否做了不应该做的工作
- 应该远在测试之前就制定测试计划
- 测试计划、测试用例、测试报告必须作为文档长期保存
- Poreto原理说明:测试中发现的80%是由软件中20%的模块造成的,即错误出现群集性现象
- 为了达到最佳的测试结果,测试人员应该避免测试自己的程序
- 掌握:软件测试方法及分类、软件测试过程与调试;软件测试过程;调试
- 软件测试包括单元测试、集成测试、确认测试、系统测试四个阶段的测试
- 单元测试:对软件基本组成单元进行测试,检查每个单元是否正确的实现了规定的功能,发现的是编码和详细设计中的错误
- 集成测试:将已分别通过测试的单元按照要求组装起来在进行测试,检查单元之间的接口是否存在问题,检查软件体系结构的有关问题,发现的是总体设计中的错误,也可能是需求的错误
- 确认测试:按照软件需求规格说明书,检查软件是否满足了软件的功能和性能要求
- 系统测试:完成确认测试后,得到的是用户确认的合格的软件产品,为了检查该产品与系统的其他部分是否协调工作,需要进行系统测试
- 软件测试包括单元测试、集成测试、确认测试、系统测试四个阶段的测试
- 应用:软件测试用例的设计
- 了解:软件测试的目标、原则
-
软件维护
- 了解:软件维护的定义、特点;逆向工程与再工程
- 软件维护的定义:在软件交付使用后往往会发生一些变化,如对隐含错误的修改,新功能的加入,环境变化导致的程序变动等
- 逆向工程:分析程序,力图在比源代码更高的抽象层次上对程序的表示过程
- 再工程:是一类软件工程活动,能够增强人们对软件的理解,准备或直接提高软件的可维护性,演化性或复用性
- 掌握:软件维护的分类、软件可维护性
- 软件维护:
- 改正性维护:在软件投入使用后才逐渐暴露出来的错误的诊断、定位、改错的过程
- 完善性维护:对用户使用过程中提出的新的功能和性能要求,对现有软件进行修改,扩充,这种扩充软件功能,增强软件性能,提高软件运行效率和可维护性的活动,成为完善性维护
- 适应性维护:为了适应计算机的高速发展,使软件适应新的软硬件环境,或数据环境发生的新变化而进行修改软件的过程
- 预防性维护:为了提高未来软件的可维护性和可靠性,或者为了未来软件奠定更好的基础而修改软件的过程
- 软件维护:
- 了解:软件维护的定义、特点;逆向工程与再工程
-
面向对象方法
- 了解:面向对象的概念与经典开发方法;统一建模语言UML
- 掌握:面向对象分析过程(用例模型、对象模型、动态为行模型、物理实现模型)、建立用例模型的步骤
- 模型:
- 用例模型:从用户需求的角度来描述系统,指明系统应该做什么,直接反应用户对目标系统的功能要求
- 对象模型:对模拟世界中的对象及彼此之间静态结构的描述,为用例模型和动态行为模型提供了实质性的框架
- 动态模型:需要考察对象的功能
- 物理实现模型:从实现子系统和实现元素的角度来表现系统实现的物理组成
- 建立用例模型的步骤:
- 确定系统的范围和边界
- 确定参与者
- 确定用例
- 确定用例之间的关系
- 模型:
-
软件项目管理
- 了解:估算软件规模、人员组织、质量保证、能力成熟度模型(CMM)
- 掌握:工作量估算、进度计划
-
软件工程新技术
- 了解:软件复用技术;基于构建的软件工程技术;软件过程与标准化;敏捷软件开发过程,web软件工程;软件产品线技术
软件项目管理
- 信息域特性:
- 输入项数
- 输出项数
- 查询数
- 主文件数
- 外部接口数
- 估算功能点的步骤
- 计算未调整的功能点数UFP
- 计算基数复杂性因子TCF
- 计算功能点数FP
COCOMO2分机因素
- 项目先例性
- 开发灵活性
- 风险排除度
- 项目凝聚力
- 过程成熟度
采用主程序员组的考虑要点
- 软件开发人员多数比较缺乏经验
- 程序设计过程中有许多事务性的工作
- 多渠道通信很费时间,将降低程序员的生产率
重要特性
- 专业化
- 层次性
软件质量保证措施
- 技术复审的必要性
- 走审
- 审查
- 程序正确性证明
软件配置管理:
- 表示变化
- 控制变化
- 确保适当实现了变化
- 向需要知道这类信息的人报告变化
能力成熟度模型:
- 初始级
- 可重复级
- 已定义级
- 已管理级
- 优化级
**关键路径:**决定了给定的金钱与资源条件下,完成项目所需要的最短时间
为什么推迟关键路径上的任务会延迟整个项目?
关键路径定义为一组任务(称为关键任务),这组任务决定了完成项目所需要的最短时候。如果位于关键路径上的一个关键任务的完成时间被推迟了,则关键路径上的下一个任务的开始时间和结束时间也要相对延迟。这样依次传递下去,会波及关键路径上的最后一个任务,从而延迟了整个项目
机动时间有何重要性?
虽然不在关键路径的任务,并不决定项目所需的具体时间,可以适当延迟一些时间,但是,项目如果延迟的过久,则整个项目的完成时间就会被推迟,机动时间给出了完成这类任务的时间范围。
软件工程各时期使用的工具文档
时期 | 阶段 | 文档 | 工具 |
---|---|---|---|
定义时期 | 问题定义 | 无 | 无 |
可行性研究 | 可行性研究报告 | 系统流程图 | |
开发时期 | 需求分析 | 需求规格说明书 | 数据流图、数据字典、IPO图、层次方框图、维纳图、E-R图 |
概要设计 | 概要设计说明书 | 软件结构图、层次图、HIPO图 | |
详细设计 | 详细设计说明书 | 程序流程图、N-S盒图、判定树、判定表、过程设计语言(PDL)、问题分析图(PAD) | |
编码 | 源程序 | 基础语言、结构化语言、面向对象语言 | |
测试 | 无 | 等价类划分、边界值分析、逻辑覆盖、环形复杂度 | |
维护时期 | 维护 | 无 | 无 |
耦合程度强弱
从弱到强:
强弱 | 耦合 |
---|---|
1 | 无直接耦合 |
2 | 数据耦合 |
3 | 标记耦合 |
4 | 控制耦合 |
5 | 公共环境耦合 |
6 | 内容耦合 |
内聚强弱
强弱 | 内聚 |
---|---|
1 | 偶然内聚 |
2 | 逻辑内聚 |
3 | 时间内聚 |
4 | 通信内聚 |
5 | 顺序内聚 |
6 | 功能内聚 |
白盒逻辑覆盖强弱
强弱 | 种类 |
---|---|
1 | 语句覆盖 |
2 | 判断覆盖 |
3 | 条件覆盖 |
4 | 判断-条件覆盖 |
5 | 条件组合覆盖 |
6 | 路径覆盖 |
优先级顺序
(从大到小)
优先级 | 运算符 |
---|---|
最高 15 | (), [],->,. |
14 | !,~,++,–,+(求正),-(求负),*(间接运算符),&,(类型名),sizeof |
13 | *,/,% |
12 | +,- |
11 | <<,>> |
10 | <,<=,>,>= |
9 | ==,!= |
8 | & |
7 | ^ |
6 | | |
5 | && |
4 | || |
3 | ?,: |
2 | =,+=,-=,*=,/=,%=,&-=,^=,|=,<<=,>>= |
1 | , |