1. 软件的定义:软件是程序、数据及开发、使用和维护程序需要的所有文档的完整集合。
例:在信息处理和计算机领域内,一般认为软件是程序、文档和数据。
2.软件的分类:
- 按照应用场景:系统/应用软件
- 按照功能:服务类/维护类/操作管理类软件
3. 软件危机:计算机软件在开发和维护过程中遇到的一系列的严重的问题
4. 软件工程的定义:
软件工程是指导计算机软件开发和维护的工程学科。采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
5. 软件生存周期:
是指某一项软件项目从被提出并着手实现开始,知道该软件报废或停止使用为止所经历的时间。
6. 模型:
是为了理解事物而对事物做出的一种抽象。
7. 可行性研究目的:
用最小的代价在尽可能短时间内确定问题能否得到解决;任务完成可行性研究报告;
方面:
- 技术可行性(当前的技术研究是否支持)
- 经济可行性(预算,成本,有形无形)
- 操作可行性
- 法律可行性
8. 系统流程图:
是描述物理系统的工具。数据流图是系统逻辑模型。
9. 成本效益分析通过货币的时间价值、投资回报期、纯收入三个方面进行分析。(是从经济角度评价开发项目是否可行)
10. 需求分析
确定系统必须完成哪些工作
具体任务:
- 确定对系统的综合需求
- 分析系统的数据需求
- 建立软件的逻辑模型
- 编写软件需求规格说明书
- 需求分析评审。
常用方法:
- 功能分解方法
- 结构化分析方法
- 信息建模方法
- 面向对象方法
11. 结构化分析方法:
- 数据流图
- 数据字典
- 结构化语言
- 判定树和判定表
- 运用自顶向下逐层分解的分析策略
12. 数据字典:
是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。给人提供数据描述,对数据存储和加工等名字命名。
数据流图和数据字典共同构成了系统的 逻辑模型,是需求规格说明书的主要组成部分。
13. 数据流图作用
作为交流信息的工具、作为分析和设计的工具
数据流图的基本组成部分有 数据的源点与终点、数据流、加工、数据文件。
14. 软件结构中的一些概念:
深度:是指软件结构中模块的层次数;
宽度:是指同一层次中最大的模块个数;
扇出:一个模块直接调用的模块数目;
扇入:有多少个上级模块直接调用它。
如果一个模块被 n 个模块调用,其中直接的上级模块的个数是 m 个( m<=n )那么该模块的扇入数是 m 个。
15. 模块:
是软件的结构基础,是软件元素,是能够单独命名、独立完成一定功能的程序语句的集合。
特征:抽象,信息隐蔽。
模块化:是使得软件能够对付复杂问题所应具备的属性。
划分模块时尽量做到高内聚、低耦合,保持模块的独立性,尽量使用公共模块。
16. 软件模块独立性的度量标准:耦合和内聚
耦合:衡量不同模块彼此间互相依赖的紧密程度。
分类:a.无直接耦合,b.数据耦合,c.标记耦合,d.控制耦合,e.公共环境耦合,f.内容耦合。
内聚:模块内部各个元素之间的联系
分类:a.偶然内聚,b.逻辑内聚,c.时间内聚,d.通信内聚,e.顺序内聚,f.功能内聚
17. 软件结构设计的图形工具:软件结构图、层次图、hipo图。
结构化设计方法:数据流图
详细设计工具:图形(程序流程图、盒图NS、pad图)、表格、语言(过程设计语言pdl)
结构化设计以 数据流图为基础,按一定的步骤映射成软件结构。
18. 人机界面设计问题:系统响应时间、用户帮助设施、出错信息处理、命令交互
19. 程序设计风格方面:
- 程序内部文档(标识符的选取、程序的注解:序言性,功能性、程序的布局)
- 数据说明
- 语句构造
- 输入输出
- 效率
20. 软件测试方法:
- 动态测试(黑盒、白盒)
- 静态测试(人工测试、计算机辅助静态分析)
21. 白盒技术:
- 逻辑覆盖(a.语句覆盖,b.判定覆盖,c.条件覆盖,d.判定条件覆盖,e.条件组合覆盖,f.路径覆盖)
- 循环覆盖(单循环和嵌套循环)
- 基本路径测试
22. 黑盒技术:
- 等价类划分
- 边界值分析
- 错误推测
- 因果图
23. 软件测试过程:
单元测试-->集成测试-->确认测试-->系统测试
单元测试:软件基本组成单元的测试
集成测试:用于组装软件的一种系统化的技术,要把在模块按照设计要求组装起来的同时进行测试,用以发现和接口相联系的问题。(非渐增式/渐增式测试)
确认测试:检查所开发的软件是否满足需求规格说明书中所确定的功能和性能需求。
21. 调试:
测试发现错误之后排除错误的过程。
测试的目的是为了找出软件中存在的错误,调试的目的是为了存在的错误。
常用的调试技术:简单的调试技术、消去原因法(归纳法、演绎法)
22. 软件维护:
在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程.
分类:改正性、适应性、完善性、预防性维护
软件维护工作的生产性活动包括 分析评价、修改设计和 编写程序代码 等
23. 软件可维护性特性:
可理解性/测试性/修改性/移植性/使用可靠性、效率
维护的副作用:修改代码/数据/文档的副作用
软件维护工作量模型:M=P+k*e^(C-D)
适应性维护:
为了使应用软件适应计算机环境的变化而修改软件的过程称为适应性维护。
24. 面向对象分析方法的概念:
类:对具有相同数据和相同操作的一组相似对象的定义。
类的实例化是对象
对象:是问题域中客观存在的事物的抽象,是一组属性和在这些属性上的操作的封装体。
消息:消息是面向对象系统中对象之间交互的途径,是向另外一个对象发出的服务请求。
封装:是指把对象的属性和操作结合成一个独立的系统单位,并尽可能隐藏对象的内部细节。
面向对象分析的目的是对客观世界的系统进行 建模
26. 类和类关系:继承、多态性、关联、依赖、实现、聚集和组合
面向对象开发方法:Booch、Coad、OMT、OOSE
27. UML:
一种编制软件蓝图的标志化语言
RUP:初始、细化、构造、交付阶段
28. 软件工程的四种模型:用例模型、对象模型、动态模型、物理模型
对象模型是必须建立的,是核心模型之一,用例模型指明系统应该做什么
29. 用例之间的关系:包含、使用、扩展和泛化(包含和扩展)
30. 投资回收期:
就是使累计的经济效果等于 最初投资费用 所需要的时间。
31. 结构化分析方法:
就是面向数据流自顶向下、逐步求精进行需求分析的方法。
32. 软件的生命周期:一个软件从定义、开发、使用和维护,直到最终被废弃所经历的一系列时期。
软件生存周期是指一个软件从提出开发要求开始直到软件废弃为止的整个时期。
33. 投资回收期:就是使累计的经济效果等于最初投资的需要的时间。
34. 结构化分析方法:就是面向数据流自顶向下逐步求精进行需求分析的方法。
35. 事务流:
数据沿输入通路到达一个处理,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划分为一类特殊的数据流,称为事务流。
36. 事件:
是某个特定时刻所发生的事情,它是对引起对象从一种状态转换到另一种状态的现实世界中的事件的抽象。
37. 函数重载:
指在同一作用域内的若干个参数特征不同的函数可以使用相同的函数名字。
38. 存根模块:
用以模拟被测模块运行过程中所调用模块或是被测模块下层模块的替代程序。
38. 存根模块:
用以模拟被测模块运行过程中所调用模块或是被测模块下层模块的替代程序。
39. 变换流:
信息沿输入通道进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统,当数据流图具有这些特征时,这种信息流就叫变换流。
40. 多态性:
子类对象可以像父类对象那样使用,同样的消息既可以发送给父类对象也可以发送给子类对象。
41. 驱动模块:
用以模拟被测模块的上级调用模埠,或向被测模块输以数据输出一些必要信息,调用被测模块。
42. 可靠性的两个指标是 成功地运行的概率 和 平均无故障时间。
人们常用硬件可靠性的定量度量方法来度量软件的可靠性和可用性,常用的度量软件可将待开发的软件细化,分别估算每一个子任务所需要的开发工作量,然后将它们加起来
43. 成本估算方法
就方法论而言,有两种基本的成本估算方法:自顶向下和自底向上。 自顶向下法是对整个工程项目的总开发时间和总工作量做出估算,然后将它们按阶段、步骤和任务进行分配。 自底向上法则正好相反,先分别估算各个任务所需要的工作量和开发时间,再相加,从而得到总的工作量和总的开发时间。这两种方法都要求采用某种方法做出估算。 有许多估算方法可以利用,大致划分为三类:专家估算法、类推估算法、算式估算法
先分别估算各个任务所需要的工作量和开发时间,再相加,从而得到总的工作量和总的开发时间 这种成本估算方法称为 自底向上
44. 软件的风险分析可包括 风险识别、风险预测和风险驾驭(或风险管理)等3项活动。
45. 软件著作权登记的3种主要类型:
- 著作权登记
- 著作权延续登记
- 权利转移备案登记
46. 软件工程管理的主要内容有:
- 项目经费管理
- 软件质量管理
- 项目进度管理
- 人员管理
47. 模块的内聚性
顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须 顺序执行 ,前一功能元素的输出就是下一功能元素的输入。
一个进行学生成绩统计的模块其功能是先对学生的成绩进行累加,然后求平均值,则该模块的内聚性是 顺序内聚
在用程序流程图设计模块时,若将程序流程图中的一部分划出各自组成模块,便形成过程内聚。
48. 曾被誉为“程序设计方法的革命”的 结构化程序设计,使程序设计从主要依赖于程序员个人的自由活动变成为有章可循的一门科学。
从 结构化程序设计 到 面向对象程序设计,是程序设计方法的又一次飞跃。
49. 在单元测试时,需要为被测模块设计 测试用例
50. 人们常用硬件可靠性的定量度量方法来度量软件的可靠性和可用性,常用的度量软件可将待开发的软件细化,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,