软件期中复习

  • 格式:doc
  • 大小:86.05 KB
  • 文档页数:15

软件:能够完成预定功能和性能的可执行的计算机程序和使程序正常执行所需要的数据,加上描述程序的操作和使用的文档。

程序:计算任务中的处理对象和处理规则的描述。 文档:为了便于了解程序所需的资料说明。 软件危机 软件工程学提出的起点和由来:解决大规模、复杂软件系统的开发和维护 从程序设计到软件工程

软件工程:采用工程的概念、原理、技术和方法来开发和维护计算机软件,将工程管理技术的成功经验和思想与具体的软件开发过程、研究技术相结合,形成一整套适合于计算机软件开发的方法、规范和技术。

软件工程学包括软件开发技术和软件工程管理。 软件开发技术又分为软件开发方法学、软件工具、软件工程环境。 软件工程管理又分为软件管理学、软件经济学、软件度量学。

计算机软件,从决定进行开发到最终退役所经历的一系列步骤与过程称为软件生命周期。 根据GB8567软件开发国家标准,软件生命周期的一种典型的阶段划分为:问题定义和可行性研究、需求分析、概要设计、详细设计、编码、测试、维护七个阶段。

结构化软件开发范型,即传统软件工程或经典软件工程 数据结构+算法 面向对象软件开发范型 对象+消息

第2章 软件生命周期过程模型 软件测试:单元测试 、集成测试 、系统测试、验收测试 对于软件产品的开发而言,涉及对于软件产品的分析、设计、实现、测试等阶段,一般将完成这些阶段的时序称为软件开发过程。 对软件生命周期的不同划分,形成了不同的软件生存周期模型。 软件过程模型(软件生存周期模型): 从软件项目需求定义开始直至软件使用后废弃为止,针对系统开发、运作和维护所实施的全部过程、活动和任务的结构框架。

瀑布模型 适用情况:很小的项目、有熟悉的类似项目 优点: 结构简单明了; 历史较长、应用面广泛、为广大软件工作者所熟悉; 已有与之配套的一组十分成熟的开发方法和丰富的支撑工具。 缺点: 任何一个阶段都不可能在下一阶段开始之前完全结束。 确定了需求分析的绝对重要性,但是在实践中要想获得完善的需求说明是非常困难的; 反馈信息慢; 开发者常常被不必要地耽搁。

具有原型化的瀑布模型 注意:原型往往是要废弃的。

螺旋模型 将瀑布模型与演化模型结合起来,并且添加两种模型均忽略的风险分析 适用:大规模软件项目 优点: 每次迭代中收集过程中产生的各种度量数据 将软件质量作为目标 软件测试 软件维护

缺点: 管理过程 、文档一致性 限制条件

增量和迭代模型:增量开发适用于项目后期 验证(verification) :保证软件正确地实现特定功能的一系列活动 (是否与前一阶段定义的规格相一致) 确认(validation) :保证所生产的软件可追溯到用户需求的一系列活动(是否与最初定义的软件需求规格相一致)

第3章 需求分析 需求的定义[IEEE]: (1)用户为了解决问题或达到某些目标所需要的条件或权能; (2)系统或系统部件为了满足合同、标准、规范或其它正式文档所规定的要求而需要具备的条件或权能; (3)对(1)或(2)中的一个条件或一种权能的一种文档化表述。

软件需求规格说明书(Software Requirements Specification,SRS) 功能需求、非功能需求 软件的功能需求分为三个层次:业务需求、用户需求、功能(系统)需求 可以将整个软件需求工程研究领域划分为需求开发和需求管理两部分,需求开发可进一步分为:需求获取、需求分析、编写需求规格说明书和需求验证四个阶段。

需求分析技术 1.结构化方法由结构化分析、结构化设计和结构化程序设计构成,也称Yourdon方法。 最早的、最传统的软件开发方法 指导思想是自顶向下、逐步求精 面向数据流的开发方法 基本原则是功能的分解与抽象 出现较早,适用于数据处理领域 不适用于规模大以及特别复杂的项目

2.面向对象方法:一种运用对象、类、继承、封装、聚合、消息传送、多态性等概念来构造系统的软件开发方法。 面向对象开发方法包括面向对象分析、面向对象设计和面向对象实现。

3.形式化方法 结构化需求分析方法(SA)是一种面向数据流的自顶向下逐步求精的分析方法 实例(Instance) 需要在系统中收集和存储的现实世界事物

实体(Entity) 具有相同特征和属性的实例集的类别描述

关系 存在于一个或多个实体之间的自然业务联系

所有的关系隐含地都是双向的 关系表达的不是实体物理上的联系(例如车与车轮),而是逻辑上的链接(例如整体部分关系)

度数 参与关系的实体数量 基数(约束)实体可能参与关系的数量 最大基数(键约束Key Constraint) 对关系中任意的其他实体实例,该实体可能参与关系的最大数量 :1或many 最小基数(参与约束Participant Constraint) 对关系中任意的其他实体实例,该实体可能参与关系的最小数量 :0或1 数据流图 原始DFD图可以进一步展开为:微规格说明、数据字典 在低于0层图的子图上通常不显示外部实体 子图中过程的编号要以父过程的编号为前缀:1.2、1.2.1„„ 保持数据一致性 在功能分解过程当中,最重要的是要保证分解过程的平衡性(Balance) ,它要求DFD子图的输入流、输出流必须和父过程的输入流、输出流保持一致

数据字典和ERD通常被用来描述DFD数据流的详细内容和数据存储 第4章 概要设计 概要设计的工具HIPO图 模块是软件设计的最小单位。(单元) 具有一定功能的可以用名词调用的程序语句集合。 具有一些基本属性 模块化 就是把程序划分成若干个模块,分别实现

模块独立性的度量标准:耦合和内聚 耦合是模块之间相对独立性的量度 低好 内聚是模块功能相对强度的量度 高好

耦合性是对软件程序结构中各个模块之间相互关联程度的一种度量。 耦合 间接耦合 两个模块之间没有直接关系 数据耦合 数据参数来交换输入、输出信息的 特征耦合 通过模块接口传递数据结构的一部分 控制耦合 控制参数 外部耦合 访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息 公共耦合 全局的数据环境 内容耦合 设计软件时应尽量使用数据耦合,减少控制耦合,限制环境耦合和公共耦合,杜绝内容耦合。

内聚性标志一个模块内部各成分彼此结合的紧密程度。 内聚和耦合是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。但并不绝对。 软件概要设计的目标是力求增加模块的内聚,尽量减少模块间的耦合。 增加内聚比减少耦合更重要。 低级内聚: 偶然性内聚 逻辑性内聚:一个模块完成的诸任务逻辑上相关。 时间性内聚/经典内聚:一个模块包含的诸任务必须在同一时间段内执行。 中级内聚: 过程性内聚:受同一控制流支配,必须按特定的次序执行。 通信性内聚:相同的输入数据,或产生了相同的输出数据。 高级内聚: 顺序性内聚:顺序执行,前一个处理输出是下一个处理输入。 功能性内聚:模块内所有成分形成一个整体,完成单个功能。

黑盒特性 尽可能使模块达到功能内聚

结构化设计方法(SD)基于数据流的设计方法 SA与SD相衔接:利用映射把数据流图(信息流)变换成软件结构,即模块结构图

信息流有变换流(以变换为中心)和事务流(以事务为中心)两种类型。 变换是系统的变换中心,变换输入端的数据流为系统的逻辑输入,输出端为逻辑输出。而系统输入端为物理输入,输出端为物理输出。

事务分析:从具有事务流特点的数据流图建立系统结构图。 文件设计是指对数据存储文件的设计 数据库设计的步骤: 模式设计-->子模式设计-->完整性和安全性设计-->优化。

第5章 详细设计

详细设计的设计表示法(即微规格说明): 结构化语言 判定表 判定树

决策表的组成:(规则合并、规则包含) 条件定义(条件桩):列出问题的所有条件。通常认为列出的条件的次序无关紧要。 条件组合(条件项):针对条件定义给出的条件,列出所有可能的取值(Y/N、T/F、 √/×)。操作的排列顺序没有约束。 动作定义(动作桩):列出问题规定的可能采取的操作。 条件组合下的动作(动作项):指出在条件组合的各组取值情况下应采取的动作。 将任何一个条件组合的特定取值及相应要执行的动作称为一条规则。 结构化程序设计的基本思想是采用自顶向下,逐步求精的程序设计方法和单入口单出口的控制结构。 描述方式:程序流程图、N-S流程图、PAD图、过程设计语言PDL

面向数据结构的设计方法 Jackson 方法:数据驱动JSP->事件驱动JSD Jackson方法把问题分解为可由三种基本结构形式表示的各部分层次结构。这三种基本结构形式就是顺序、选择和重复。 设计原则:程序结构同数据结构相对应

结构化设计方法(SD):面向数据流的设计方法 Jackson方法( JSP ):面向数据结构的设计方法 异同 SD方法和JSP方法的共同点都是数据信息驱动的,都试图将数据表示转换成软件表示; 不同之处在于面向数据结构的设计不利用数据流图,而根据数据结构的表示来设计。JSP方法定义了一组以数据结构为指导的映射过程,它根据输入、输出的数据结构,按一定的规则映射成软件的过程描述,最终目标是生成软件过程的描述,即程序结构,而不是软件的体系结构。而SD方法是根据数据流图来设计,最终目标是建立软件体系结构的描述,即软件模块的层次结构。 JSP方法 SD方法 数据结构(Jackson 图) 问题结构 (DFD) 程序结构(Jackson 图) 软件结构 (SC) 程序的过程性表示(Jackson 伪代码) 模块的过程描述 (PDL)

Jackson图 三种基本结构:由方框、连线和一些附加标记组成。标记“0”代表选择,标记“*”代表重复。连线代表“包含”或“由„„组成”。

纲要逻辑 纲要逻辑是一种描述算法过程的语言,分别用seq、iter和sel-alt三类关键字描述顺序、重复和选择三种结构。

复审的重要性 差错传播模型

第6章 编码与语言选择 编码阶段即软件实现阶段 编码时应该把简明清晰放在第一位 命令式编程 是一种描述电脑所需作出的行为的编程范型,即指定问题求解的算法。How? 命令式语言的演化分为“结构化编程”和“面向对象编程”