1、 1.什么是软件? 是一系列按照特定顺序组织的计算机数据和指令的集合,包括程序、数据和文档。 附:软件的特征:成本高、风险大、维护困难 2.什么是软件危机,其内容主要是指什么? 原因:1、与软件本身的特点有关; 2、与软件开发人员有关;定义: 在计算机软件开发和维护过程中所遇到的一系列严重的问题。1)对软件开发成本和进度的估计常常不准确。2)用户对“已完成 ”系统不满意的现象经常发生。3)软件产品的质量不可靠。4)软件的可维护程度非常之低。5)软件通常没有适当的文档资料。6)软件的成本不断提高。7)软件开发生产率无法满足人们对软件的生产要求,软件开发生产率的提高落后于硬件的发展。3.什么是软件
2、工程?开发、运行和维护软件的系统方法 软件工程主要研究软件生产的客观规律性,建立与系统化软件生产有关的概念、原则、方法、技术和工具,指导和支持软件系统的生产活动,以期达到降低软件生产成本 、改进软件产品质量、提高软件生产率水平的目标。4.软件工程的目标( PP.41 )及其组成部分。方法、工具和过程。 软件工程的目标是:在给定成本、进度的前提下,开发出具有适用性、有效性、可修改性、可靠性、可理解性、可维护性、可重用性、可移植性、可追踪性、可互操作性和满足用户需求的软件产品。方法: 是指产生某些结果的形式化过程, 工具: 是用更好的方式完成某件事情的设备或自动化系统,如各种集成开发环境、编译工具
3、、测试工具等。 过程: 生产特定产品的工具和技术的结合 软件工程方法学包含 3 个要素:方法、工具和过程。5.软件开发方法的定义。通常把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学。比如 SASD 方法、面向对象的软件开发方法。6.好的软件的一些主要衡量指标。例如 McCall 的质量模型。(1 )质量, 它的衡量:产品的质量、过程的质量、商业环境背景下产品的质量。McCall 的质量模型:附:开发团队的成员 需求分析员: 与客户合作,确定并文档化客户需求 设计人员: 生成系统描述:系统要做什么 程序员: 编写事先指定需求的代码 测试人员: 发现错误 培训人员: 向用户说明如何使
4、用这个系统 维护小组: 修复系统验收之后出现的错误 资料管理员: 准备和存储软件需求文档等 配置管理团队: 保持各工件之间的通信第二章1.什么是软件生命周期?主要分为哪些阶段?各个阶段的主要任务及产生的主要制品?定义:当过程是在开发软件产品时,把这种软件开发过程称为软件生命周期。阶段:(1)可行性研究与计划任务:对于问题是否有行得通的解决方法(技术、经济、操作、社会)制品:可行性论证报告初步的项目开发计划(2)需求分析任务:为了解决这个问题,目标系统必须做什么制品:软件需求规格说明书(3)总体(概要)设计 任务:概括地说,应该怎样实现目标系统制品:概要设计规格说明书数据库或数据结构设计说明书集
5、成测试计划(4)详细设计任务:应该怎样具体地实现这个系统制品:详细设计规格说明书单元测试计划(5)实现任务:写出正确的容易理解、容易维护的程序模块制品:源程序代码(6)集成测试任务:根据概要设计规格说明书,将经过单元测试的模块逐步进行集成和测试制品:生成满足概要设计要求、可运行的系统源程序和系统集成测试报告(7)确认测试 任务:根据软件需求规格说明书,测试软件系统是否满足用户的需求制品:可供用户使用的软件产品(文档,源程序)(8)使用和维护任务:通过各种必要的维护活动使系统持久地满足用户的需要制品:版本更新的软件产品2.需求分析的定义。 确定用户对待开发软件系统的需求包括: 功能 性能 运行环
6、境约束3.典型的软件开发过程模型的特点(优缺点)及要求,特别是原型法、瀑布模型、增量和迭代等(1 )瀑布模型:需求分析- 系统设计-程序设计-编码- 单元测试和集成测试-系统测试-验收测试-运行和维护;优点:采用规范的方法;严格规定每个阶段提交的文档;要求每个阶段交出的产品必须经过验证;缺点:对如何处理开发中产品和活动的变化没有提供相关的指导 将软件开发视为制造而不是创造 创造一个产品没有迭代的活动 需要等待很长时间(2 ) V 模型: 用单元测试验证程序设计 用系统测试验证系统设计 用验收测试验证需求 如果在验证和确认过程中发现了问题,那么在再次执行右边的测试步骤之前,重新执行左边的步骤以修
7、正左边(3 )原型化模型: 允许需求或设计反复调查 减少开发中的风险和不确定性 原型模型存在的问题 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。 开发过程不便于管理。(3 )增量开发: 先定义一个小的功能子系统,再在每个新的发布中增加新功能迭代开发: 一开始就提交完整的系统,再在每一个新的发布中改变每个子系统的功能 减少循环时间 系统一部分一部分地交付 两个系统功能可以并行4. 原型法的特点以及分类:探索型原型、实验型原型和演化型原型法定义原型法是指在获取一组基本的需求定义后,利
8、用高级软件工具可视化的开发环境,快速地建立一个目标系统的最初版本,并把它交给用户试用、补充和修改,再进行新的版本开发。反复进行这个过程,直到得出系统的“精确解” ,即用户满意为止。 演化型原型 不仅帮我们回答问题,而且还要演变为最终产品 原型必须展现最终产品的质量需求,并且这些质量的要求不能改进 5.极限编程的特点 交流 : 保持客户和开发者的交换看法 简单性 : 选择简单设计和实现 勇气 : 尽早并经常性交付功能(敢于承诺并信守诺言) 反馈 :开发过程中各种活动循环第三章 1. 了解项目计划和管理的主要内容和常用的方法。 Ppt71 到 81 2.软件可行性研究的内容。 技术、经济、操作、社
9、会四个可行性 3. 估算工作量的主要方法:代码行、任务分解技术、自动估算成本技术。 1)代码行技术 软件成本 = 每行代码的平均成本估计的源代码总行数 估算方法: 由多名有经验的软件工程师分别做出估计。 每个人都估计程序的最小规模(a )、最大规模(b)和最可能的规模(m), 分别算出这 3 种规模的平均值、和之后,再用下式计算程序规模的估计值: L=(a 的平均值 +4*m 的平均值+b 的平均值)/6单位: LOC 或 KLOC。 代码行技术的优点: 代码是所有软件开发项目都有的“产品” ,而且很容易计算代码行数; 有大量参考文献和数据 。代码行技术的缺点: 源程序仅是软件配置的一个成分,
10、由源程序度量软件规模不太合理; 用不同语言实现同一个软件所需要的代码行数并不相同; 不适用于非过程性语言。 2)任务分解技术 软件开发项目分解为若干个相对独立的任务,分别估计每个单独任务的成本: 单独任务成本 = 任务所需人力估计值 每人每月平均工资; 软件开发项目总成本估计 = 各个单独任务成本估计值之和。 3)自动估计成本技术采用自动估计成本的软件工具估计第四章 1.了解需求的重要性及需求分析阶段的主要产物。 如果开发过程的早期没有检测到并修复需求错误,那么会造成很高的代价,甚至使项目失败。 产物:软件需求规格说明书 2.需求的类型:功能需求、非功能需求或质量需求、设计约束、过程约束。 功
11、能需求: 根据要求的活动描述需求行为 质量需求或非功能需求: 描述软件必须拥有的质量特征 设计约束: 已经做出的设计决策或对问题解决方案集的限制的设计决策 过程约束: 对用于构建系统的技术和资源的限制 3. 两种需求文档:需求定义文档和需求规格说明书。 需求定义: 用户想要得到的每一件事情的完整列表。 描述打算构建的系统将要安装的环境中的实体 需求规格说明: 将需求重新陈述为关于要构建的系统将如何运转的规格说明 4. 需求规格说明书的主要内容。 详细描述输入和输出 ,包括 输入的源 输出的目的地, 有效范围 输入输出的数据格式 数据协议 窗口格式和组织 计时约束 根据接口的输入输出重新陈述要求
12、的功能 对用户的质量需求,设计适配标准 5. 常用的需求建模表示方法:ER 图、事件跟踪、状态机、Petri 网、数据流图、用例图和原型法。 ER 图: 一种表示概念模型的流行图形表示法 三个核心结构 实体: 表示为矩形,代表具有共同性质和行为的现实世界对象构成的集合 关系: 表示为两个实体之间的边,边中间有一个菱形,表示关系的类型属性: 是实体的注释,描述实体相关的数据或性质事件跟踪: 关于现实世界实体之间交换的时间序列的图形描述 垂直线 : 不同实体的时间线,其名字出现在线的顶部 水平线 : 两个实体之间的一个事件或交互 时间按从顶到下跟踪进展 每一个图描述一个跟踪,表示只是若干个可能行为
13、中的一个 事件跟踪语义相对简单,易于理解状态机: 是一种图形描述,描述了系统与其环境之间的所有对话 点( 状态 ) 表示存在于事件发生之间的一个稳定的条件集合 边( 转移 ) 表示由于一个事件的发生而产生的行为或条件的变化 在表示动态行为方面,以及在描述在响应已经发生的历史事件时行为将如何变化方面很有用 Petri 网 : Petri 网是状态-转移表示法的一种形式,用于建模并发活动以及他们之间的交互。 圆圈:位置 条:变迁 弧:箭头 点:令牌数据流图: 数据流图 (DFD) 建模功能以及从一个功能到另一个功能数据流 一个泡泡表示: 一个 加工 箭头表示: 数据流 平行线:数据存储: 正式的库
14、或信息库 矩形:表示参与者: 提供输入数据或接受输出的实体 用例图: 构成 大的方框: 系统边界 方框外的小人: 参与者,人或者系统 方框内的椭圆: 用例,表示必须的主要功能及其变种 参与者和用例之间的线: 参与者参与了该用例 用例不一定建模系统应该提供的所有任务,而是用于说明用户对重要系统行为的观察 6. (1)UML 的作用:是为软件系统的制品进行描述(specifying) 、可视化(visualizing) 、构造(constructing ) 、文档化(documenting )的一种语言。 (2)UML 中的 41 视图:用例视图,设计视图,进程视图,实现视图,分布视图。 (3)U
15、ML 中的三种扩展机制 构造型 Stereotype,标记值 tagged value,约束 contraint. (4)UML 中所包含的 10 种图形及各自的作用。 (5)用例图的作用。 用例图用来描述软件需求模型中的系统功能,通过一组用例可以描述软件系统能够给用户提供的功能。 用例图可以作为整个系统开发过程中的开发依据,指导和驱动其他模型。 (6)用例图的主要构成部分。 执行者、系统边界和用例第五章5.获取需求 概念设计:告诉客户系统将做什么数据来自哪里?系统中数据会发生什么情况 ?对用户来说,系统将会是什么 ?向用户提供的选择是什么?事件的计时是什么 ?报表和屏幕是什么样的 ?) 技术
16、设计:告诉变成这系统将做什么对主要硬件部分及其功能的描述 软件构件的层次和功能 数据结构 数据流好设计的衡量:耦合和内聚耦合度: 高度耦合:当两个构件之间有大量依赖关系的时候 松散耦合:当两个构件具有某种程度的依赖,但他们之间的相互连接比较弱 非耦合:构件之间不存在相互连接 耦合度的类型: 内容耦合:当一个构件修改了另一个构件的内部数据项时,或一个构件内的分支转移到另外一个构件中的时候,可能出现内容耦合 公共耦合:对公共数据的改变意味着需要通过反向跟踪所有访问过该数据的构件来评估该改变的影响 控制耦合 标记耦合 数据耦合 内聚:如果构件的所有元素都是直接面向执行同一个任务的并且必须的,那么该构
17、件是内聚的 6.细述对象 1. OOM 中的典型特征,其中特别是封装、继承和多态。 标识 抽象 分类 封装 继承 多态 持久性 对象的概念:对象是指某个事物,大多对应于真实世界中的某个客观实体;但有些对象在真实世界中没有直接的对应物,是人们对某个事物的一种抽象描述。对象的基本特征可以归纳为对象的属性和行为两类。类的概念:类是指对一组具有相同特征的对象的抽象描述;任何对象都是某个类的实例。类图的作用:类图技术是 OO 方法的核心技术,应用非常广泛,其中类、对象以及它们之间的关系是最基本的建模元素。类模型和对象模型揭示了系统的结构。2.了解类之间的各种关系:关联、依赖、继承或泛化、组合/ 聚合等。
18、 关联用来表示来表示两个(或多个)类的对象之间的结构关系,它在代码中表现为一个类以属性的形式包含对另一个类的一个或多个对象的引用。 泛化关系:(继承关系)定义类和包之间的一般元素和特殊元素之间的分类关系。 继承(Inheritance): 泛化关系的一种实现机制并非所有的泛化关系都适合用继承关系实现 聚合:是表示类和类之间的“整体部分”关系,用空心菱形表示。聚合表示类之间的整体与部分的关系。聚合意味着一个类拥有但共享另一个类的对象组合是聚合的一种特殊情形,用实心菱形表示。与聚合相比,它有两个特点:1. 一个部分类最多只能属于一个整体类2. 当整体类不存在时,部分类将同时被销毁。3.了解类图的基
19、本建模步骤。 (1)寻找出需求中的名词 (候选对象)。 (2)合并含义相同的名词,排除范围以外的名词,并寻找隐含的名词。 (3)去掉只能作为类属性的名词。 (4)剩下的名词就是要找的分析类(候选类 )。 (5)根据常识、问题域、系统责任确定该类有那些属性。 (6)补充该类动态属性,如状态、对象间联系(如聚合、关联)等属性。 (7)从需求中的动词、功能或系统责任中寻找类的操作(候选操作) 。4. 接口和抽象类的定义及各自的特点。 抽象类是指那些不具有任何对象的类,其作用是为其他的类描述它们的公共属性和行为。通常,抽象类具有一组抽象操作。一个拥有至少一个抽象操作的类必定是一个抽象类。 接口是一组没有实现的操作的集合。接口只提供操作的声明,不提供任何相应的功能代码。具体的功能代码由使用该接口的类实现,这叫作实现关系。一个类和一个接口不同:一个类可以有它形态的真实实例,然而一个接口必须至少有一个类来实现它。5.交互图的分类:顺序图和协作图。这两种图形各自的优缺点。注意 UML 2.0 中协作图改称通信图。 序列图主要用来描述对象之间信息交换时的时间顺序,它强调的是消息发送的时间的先后顺序 而协作图则用来描述系统对象之间如何协作共同完成系统功能的要求。协作