一、绪论
1. 软件的定义
软件是能够完成预定功能和性能的可执行的计算机程序,包括使程序正常执行所需要的数据,以及有关描述程序操作和使用的文档。(软件=程序+文档)
2. 软件工程的定义。
是指导计算机软件开发和维护的一门工程学科;
采用工程化的原理与方法对软件进行计划、开发和维护;
把证明正确的管理技术和最好技术综合运用到软件开发中;
研究经济地开发出高质量的软件方法和技术;
研究有效维护软件的方法和技术。
3. 软件危机的概念,及出现的原因。
软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因: 软件规模越来越大,结构越来越复杂。
软件开发管理困难而复杂。
软件开发费用不断增加。
软件开发技术落后。
生产方式落后,仍采用手工方式。
开发工具落后,生产率提高缓慢。
二、软件生存周期与软件过程。
1、 软件生存周期的定义,把生存周期划分为若干阶段的目的是什么,有哪几个主要活动。
定义:一个软件从开始立项起,到废弃不用止,统称为软件的生存周期。
目的:软件生存周期划分为计划、开发和运行3个时期;把整个生存周期划分为较小的阶段,给每个阶段赋予确定而有限的任务,就能够化简每一步的工作内容,使因为软件规模而增长而大大增加了软件复杂性变得较易控制和管理。
主要活动:需求分析、软件分析、软件设计、编码、软件测试、运行维护。
2、 软件生命周期划分为哪几个阶段。
软件生命周期分为三个时期八个阶段:
软件定义:问题定义、可行性研究;
软件开发:需求分析、概要设计、详细设计、编码、测试;
软件运行:软件维护。
3、 瀑布模型的特点和缺陷。
特点:线性模型,每一阶段必须完成规定的文档(阶段间的顺序性和依赖性)
优点: 可强迫开发人员采用规范化的方法。
严格地规定了每个阶段必须提交的文档。
要求每个阶段交出的所有产品都必须是经过验证的。
缺点。 如果需求规格说明与用户需求之间有差异,很可能导致最终开发出的软件产品不能真正满足用户的需要。(瀑布模型几乎完全依赖于书面的规格说明)
由于多数用户不熟悉计算机,系统分析员对用户的专业也了解不深,因而很难在在开发的初始阶段彻底弄清软件需求。(瀑布模型只适用于项目开始时需求已确定的情况)
4、 几种软件开发模型的主要特点。
5、 软件可行性研究的目的和内容。
目的:是弄清待开发的项目是不是可能实现和值得进行。
内容:经济可行性,技术可行性,运行可行性,法律可行性。
三、结构化分析(重点)p71结构化分析的基本步骤。
1.了解当前系统的工作流程,获取当前系统的物理模型。
2.抽象出当前系统的逻辑模型。
3.建立目标系统的逻辑模型。
4.作进一步补充和优化。
1、 绘制数据流图dfd的注意点。
父图与子图的平衡,即父图的输入输出数据流与子图的输入输出数据流一致。
区分局部文件和局部外部项。
分解的速度不宜过快。
按规则命名加工编号。
提高数据流图的易懂性,合理分解。
1、 软件设计的任务是什么?概要设计和详细设计的主要工作。
任务:将软件分析模型转变为考虑具体实现技术和平台的软件设计模型。
概要设计(结构设计):把一个软件需求转换为软件表示时,首先设计出软件总的体系结构。
基本任务:1) 设计软件系统结构。
2) 进行数据结构及数据库的设计。
3) 编写概要设计的文档。
4) 评审。
七、软件设计。
1、 模块的定义。
模块是一个拥有明确定义的 、输出和特性的程序实体。
模块化是指解决一个复杂问题时自顶向下逐层把软件系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。
模块化设计是把大型软件按照规定的原则划分成一个个较小的、相对独立但又相互关联的模块。但又相互关联的模块。
2、 什么是模块独立性?用什么来度量(低内聚高耦合)?
模块独立性指每个模块只完成系统要求的独立的子功能,并且与其他模块的联系最少且接口简单。模块独立的概念是模块化、抽象、信息隐蔽和局部化概念的直接结果。
独立性可以从两个方面来度量:模块本身的内聚性(cohesion)和模块之间的耦合(coupling)。
3、 耦合、内聚的定义,几种类型(p171)
内聚:从功能的角度对模块内部聚合能力的量度。
低内聚(偶然性内聚、逻辑性内聚、时间性内聚),中内聚(过程性内聚、通信性内聚),高内聚(顺序性内聚、功能性内聚)
耦合:对软件内部块间联系得到度量。
弱耦合(非直接耦合、数据耦合、特征耦合),中耦合(控制耦合),较强耦合(外部耦合、公共耦合),强耦合(内容耦合)
4、 扇入、扇出的定义。
扇入:一个模块被其他模块调用的个数。
扇出:一个模块调用其他模块的个数。
1、 软件测试的基本任务。
程序测试的是为了发现错误而执行程序的过程。
目的:发现程序的错误。
任务:通过在计算机上执行程序,暴露程序中潜在的错误。
2、 软件测试要经过哪些步骤(p254)?这些测试与软件开发各阶段之间有什么关系?
软件测试要经过的步骤是:单元测试→集成测试→确认测试→系统测试。
单元测试对源程序中每一个程序单元进行测试,检查各个模块是否正确实现规定的功能,从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计文档。
集成测试是为了检查与设计相关的软件体系结构的有关问题,也就是检查概要设计是否合理有效。
确认测试主要是检查已实现的软件是否满足需求规格说明书中确定了的各种需求。
系统测试是把已确认的软件与其他系统元素(如硬件、其他支持软件、数据、人工等)结合在一起进行测试。以确定软件是否可以支付使用。
3、 程序员保证**质量的手段?
编译器 → 静态检查工具 → **走查 → 单元测试。
4、 面向对象软件的测试策略(p261)
九、软件维护。
1、 软件维护的目的。
软件维护的最终目的,是满足用户对已开发产品的性能与运行环境的不断提高的需求,进而延长软件的寿命。
2、 软件维护的种类。
完善性维护适应性维护纠错性维护预防性维护。
3、 软件配置管理的概念。
配置管理能够系统地处理变更,从而使得软件系统可以随时保持其完整性。故配置管理也可以称为‘变更控制’,用来评估提出的变更要求,跟踪变更,并保存系统不同时间点上的状态。
4、 纠错和纠错性维护有哪些异同?
纠错的目的是定位和纠正错误;纠错的任务是软件故障,保证程序的可靠运行。
纠错性维护是由于软件测试的不彻底性,任何大型软件交付使用后,都会继续发现潜在的错误,对它们进行诊断和改正。目的在于纠正在开发期间未能发现的遗留错误。
软件工程复习
单选填空简答思考题。1 传统的软件瀑布生命模型包括哪六个方面?需求 分析 设计 实现 交付后维护 退役2 传统瀑布生命模型的中交付后维护包括哪三种?改正性维护 适应性维护 完善性维护3 现代维护和传统维护的观点有何不同?1 传统维护的观点是先开发后维护。2 现代维护的观点是无论是在软件安装前还是安装...
软件工程复习
软件工程复习资料。备注 1.老师反复强调我们之前做过的作业要熟练掌握 需求陈述 实验课画的模型 自己画。的数据流图 2 蓝颜色的字都是老师上课补充的,还有很多需要自己去补充,欢迎修正完善。核心问题 在考试做大是要表述清楚详细,关。键词要有 问题定义 专用名词表要解决的问题是什么?达要准确,不能更改 ...
软件工程 复习
1.概念 软件危机是指在计算机软件开发 使用与维护过程中遇到的一系列严重问题。2.为什么会产生软件危机?当软件开发技术的进步不能跟上硬件技术的进步,未能满足发展的要求,致使软件开发中遇到的问题找不到解决的办法,使问题积累起来,形成了尖锐的矛盾,因而导致了软件危机。3.软件危机的表现 经费预算经常突破...