admin管理员组

文章数量:1535494

2024年6月11日发(作者:)

软件的概念:软件=程序+文档。软件是能够完成预定功能的可执

行计算机程序包括使程序正常执行所需要的以及有关描述程

序操作和使用的文档。

特点: 软件是一种逻辑实体,而不是具体的物理实体。因此,

它具有抽象性。

软件的生产与硬件不同,没有明显的制造过程。对软件的质量

控制,必须立足于软件开发方面。

在软件的运行和使用期间,没有像硬件那样的磨损、老化问题。

软件的开发和运行往往受到计算机系统的限制,对计算机系统

有不同程度的依赖性。

迄今为止,软件的开发尚未完全摆脱手工艺的方式。

软件本身是复杂的

软件的成本相当昂贵

相当多的软件工作涉及到社会因素。

分类:

按软件的功能划分

系统软件、支撑软件、应用软件

按软件的规模划分

微型、小型、中型、大型、超大型

按软件的工作方式划分

实时、分时、交互、批处理

按软件服务对象的范围划分

项目软件、产品软件

(2)软件的发展和软件危机(一般)

计算机软件发展的各个时期

1. 第一代(60年代中期之前)程序设计阶段

硬件通用,软件专用;程序规模小,编写者和使用者为同一人

(同组人)。

2. 第二代(60年代中期-70年代中期)程序系统阶段

出现“软件作坊”、产品软件;“个体化”开发方法。

3. 第三代(70年代中期之后)软件工程阶段

软件开发成为一门新兴的工程学科——软件工程。

4. 第四代(90年代后)现代软件工程阶段。

软件危机:是指在计算机软件的开发和维护过程中所遇到的一

系列严重问题。主要是两个问题。

1. 如何开发软件,怎样满足对软件的日益增长的需求。

2. 如何维护数量不断膨胀的已有软件

软件危机的主要表现:

1. 对软件开发成本和进度的估计不准确

2. 用户不满意

3. 软件质量不高、可靠性差

4. 软件常常不可维护、错误难以改正。

5. 缺乏适当的文档资料

6. 软件成本占系统总成本的比例逐年上升

7. 软件开发速度跟不上计算机发展速度

(3)软件工程过程 (重点)

软件工程的基本原理: 1. 用分阶段的生命周期计划严格管理2.

坚持进行阶段评审3. 实行严格的产品控制4. 采用现代程序设

计技术5. 结果应能清楚地审查6. 开发小组的人员应该少而精

7. 承认不断改进软件工程实践的必要性

软件工程方法学3要素: 方法、工具和过程

第二部分 软件过程2

(1)软件生命周期的基本任务(重点)

软件生命周期的各个阶段:(定义、开发、使用及维护)

(1)问题定义(2)可行性分析(3)需求分析: 分析软件

需求,编写软件需求规格说明(4)概要设计和详细设计: 确

定软件体系结构,设计软件模块(5)程序编写(6)软件测

试(7)运行和维护

(2)Rational 统一过程(次重点)

识记:RUP(统一软件开发过程)的6条软件开发经验(①迭

代式开发②管理需求③体系结构④可视化建模⑤验证软件质

量⑥控制软件变更)

理解:RUP软件开发生命周期(初始阶段、细化阶段、构造阶

段、迁移阶段)

第三部分 结构化分析

(一)考核知识点及考核目标

(1)软件需求分析概述(重点)

需求分析:是指开发人员要准确地理解用户的要求,进行细致的

调查分析,将用户非形式化的需求陈述转化为完整的需求定义,

再由需求定义转化为相应的软件需求规格说明书(即需求分析

的结果)的过程

需求分析的任务:是确定系统必须完成哪些工作,也就是对目标

系统提出完整、准确、清晰、具体的要求

过程:可行性分从收集资料到形成软件需求分析文档,一般来说

要经过四个过程:获取用户需求,分析用户需求,编写需求文

档,评审需求文档

可行性分析的内容?

经济可行性 技术可行性 运行可行性 法律可行性

需求分析的主要原则?

一. 确定对系统的综合要求

1. 功能需求2. 性能需求3. 可靠性和可用性需求4. 出错

处理需求5. 接口需求6. 约束7. 逆向需求8. 将来可能提

出的要求

二 .分析系统的数据要求

三. 导出系统的逻辑模型

四. 修正系统开发计划

(2)结构化分析方法(重点)

结构化分析方法的含义:结构化分析方法就是用抽象模型的概

念,按照软件内部数据传递、变换的关系,自顶向下逐层分解,

直到找到满足功能要求的所有可实现的软件为止

第四部分 结构化设计

(1)软件设计的目标和任务(重点)

软件设计的重要性:软件设计是后续开发步骤及软件维护工作

的基础。如果没有设计,只能建立一个不稳定的系统结构。

软件设计的任务:将需求分析的结果(分析模型与需求分析规

约)转化为实际软件系统的一个模型或软件表达式,即用于构

造软件的“蓝图”。

(2)程序结构与程序结构图(重点)

(3)模块的独立性(重点)

所谓模块,是指具有相对独立性的,由数据说明、执行语句等

程序对象构成的集合。程序中的每个模块都需要单独命名,通

过名字可实现对指定模块的访问。在高级语言中,模块具体表

现为函数、子程序、过程等。一个模块具有输入/输出(接口)、

功能、内部数据和程序代码四个特征。

模块的独立性:模块独立性, 是指软件系统中每个模块只涉及

软件要求的具体的子功能, 而和软件系统中其它的模块的联系

最小且接口是简单的.

一般采用两个准则度量模块独立性。即模块间耦合和模块内聚

耦合是模块之间的互相连接的紧密程度的度量。

内聚是模块功能强度(一个模块内部各个元素彼此结合的紧密

程度)的度量。

模块独立性比较强的模块应是高内聚低耦合的模块。

模块化:模块化是指将整个程序划分为若干个模块,每个模

块用于实现一个特定的功能。划分模块对于解决大型复杂的

问题是非常必要的,可以大大降低解决问题的难度。

模块化可以降低解决问题的复杂度,从而降低软件开发的工作

量。模块化不但可以降低软件开发的难度,而且可以使程序结

构清晰,增加易读性和易修改性。此外,模块化还有利于提高

代码的可重用性及团队合作开发大型软件的可行性。

抽象是人类在解决复杂问题过程中使用的思维工具,即抽出事

物本质的共同的特性而暂不考虑它的细节.

软件系统进行模块设计时,可有不同的抽象层次。

在最高的抽象层次上,可以使用问题所处环境的语言概括地描

述问题的解法。

在较低的抽象层次上,则采用过程化的方法。

结构化程序中自顶向下、逐步求精的模块划分思想正是人类思

维中运用抽象方法解决复杂问题的体现。此外,在程序设计中

运用抽象的方法还能够提高代码的可重用性。

(4)结构化设计方法(次重点)

(5)结构化数据系统开发方法(一般)

1.系统规则

用结构化系统开发方法开发一个系统,将整个开发

过程划分为首尾相连的五个阶段,即一个生命周期

(Life Cycle)

根据用户的系统开发请求,进行初步调查,明确

问题,确定系统目标和总体结构确定分阶段实施

进度,然后进行可行性研究;

2. 系统分析:

分析业务流程、分析数据与数据流程、分析功能

与数据之间的关系,最后提出分析处理方式和新

系统逻辑方案;

3. 系统设计

:进行总体结构设计、代码设计、数据库(文件)

设计、输入/输出设计、模块结构与功能设计,根

据总体设计,配置与安装部分设备,进行试验,

最终给出设计方案;

4. 系统实施:

同时进行编程(由程序员执行)和人员培训(由

系统分析设计人员培训业务人员和操作员),以

及数据准备(由业务人员完成),然后投入试运

行;

5.系统运行与维护:

进行系统的日常运行管理、评价、监理审计,修

改、维护、局部调整,在出现不可调和的大问题

时,进一步提出开发新系统的请求,老系统生命

周期结束,新系统诞生,构成系统的一个生命周

期。

在每一阶段中,又包含若干步骤,步骤可以不分先

后,但仍有因果关系,总体上不能打乱。

第五部分 结构化实现

(1)软件测试的基础(重点)

软件测试是动态查找程序代码中的各类错误和问题的过程,

软件测试是保证软件可靠性的主要手段。测试阶段的主要任

务是发现并改正软件中的错误。

白盒测试和黑盒测试是软件测试的两类基本方法。

软件测试通常至少分为单元测试、集成测试和系统测试三个基

本阶段。

软件维护的目的是要保证软件的正常运行,尽可能延长软件生

命周期。

软件测试的对象:

软件测试并不等于程序测试。软件测试应贯穿于软件定义与开

发的整个期间。

需求分析、概要设计、详细设计以及程序编码等各阶段所得到

的文档,包括需求规格说明、概要设计规格说明、详细设计规

格说明以及源程序,都应成为软件测试的对象。

(2)测试用例设计(重点)

黑盒法

该方法把被测试对象看成一个黑盒子,测试人员完全不考

虑程序的内部结构和处理过程,只在软件的接口处进行测

试,依据需求规格说明书,检查程序是否满足功能要求。因

此,黑盒测试又称为功能测试或数据驱动测试。

黑盒测试是功能测试,根据程序的功能来测试设计用例。

白盒法

该方法把被测试对象看成一个白盒子,测试人员须了解程

序的内部结构和处理过程,以检查处理过程的细节为基础,

对程序中尽可能多的逻辑路径进行测试,检验内部控制结构

和数据结构是否有错,实际的运行状态与预期的状态是否一

致。

白盒法根据被测程序的内部结构设计测试用例。

(3)白盒测试用例设计(重点)

1逻辑覆盖:是以程序内部逻辑为基础的测试技术,

2语句覆盖的含义是选择足够多的测试用例,使得被测程序中

的每条语句至少执行一次。

3判定覆盖就是设计若干个测试用例,运行所测程序,使得程

序中每个判断的取真分支和取假分支至少经历一次。判定覆盖

又称为分支覆盖。判定覆盖的每个语句至少经历一次。

4条件覆盖就是设计若干个测试用例,运行所测程序,使得程

序中每个判断的每个条件的可能取值至少执行一次。(条件覆盖

使得每个语句至少执行一次。)

5判定/条件覆盖就是设计足够的测试用例,使得判断中每个

条件的所有可能取值至少执行一次,同时每个判断的所有可

能判断结果至少执行一次。即要求各个判断的所有可能的条

件取值组合至少执行一次。

6条件组合覆盖就是设计足够的测试用例,运行所测程序,使

得每个判断的所有可能的条件取值组合至少执行一次

(4)黑盒测试用例的设计(重点)

等价类的划分:输入数据的可能值划分为若干个等价类,使每

类中的任何一个测试用例,都能够代表同一等价类中的其他测

试用例,把漫无边界的随即测试变成有针对性的等价类测试。

(需要考虑有效等价类和无效等价类)

边界值分析的方法过程:使被测程序能在边界值及其附近运

行,从而更有效得暴露从程序中隐藏的问题;

(5)软件测试的策略(重点)

测试步骤:

单元测试(测试模块功能)编译→静态分析器检查→代码评审→

动态测试(白盒黑盒)

组装测试(测试软件设计信息)自顶向下测试:先广后深、先

深后广;自底向上测试;两种测试混合。

确认测试(测试软件需求信息)测试组装完毕的程序是否满足

SRS

系统测试(测试与系统其它部分的兼容性等)对硬件或其他软

件是否实现SRS要求

第六部分 维护

(一)考核知识点

(1)软件维护的定义(重点)

1. 纠错性维护:纠正在开发期间未能发现的问题

2. 适应性维护: 适应性维护就是为了和变化了的环境适当地

配合而进行的修改软件的活动。3: 完善性维护:不断改善和加

强,以满足用户的新需求等,

4. 预防性维护:“把今天的方法学应用于昨天的系统以满足明

天的需要”。改善软件的可维护性

(2)软件维护的特点(一般)

1 结构化维护与非结构化维护差别悬殊

2 维护的代价高昂

3 维护的困难性

(3)软件维护过程(一般)

首先必须建立一个维护组织,随后必须确定报告和评价的

过程,而且必须为每个维护要求规定一个标准化的事件序

列。此外,还应该建立一个适用于维护活动的记录保管过程,

并且规定复审标准。

第七部分 面向对象的概念与模型

(一)考核知识点

(1)面向对象的概念(重点)

1.面向对象: 面向对象=对象+类+继承+消息通信

2.对象 为它本身的一组属性和它可执行的一组操作。

3.类 一组具有相同数据结构和相同操作的对象的集合。

4.继承 从已存在的类为基础建立新类的技术。

5多态性 同一个消息可根据发送消息对象的不同表现出多

种不

同的行为方式。

(2)面向对象的优点(重点)

与人类习惯的思维方法一致,可重用性好,稳定性好等。

1:提高软件系统的可复用性

2:提高软件系统的可扩展性

3:提高软件系统的可维护性

(3)面向对象的分析与模型化(重点)

理解:面向对象的分析,论域分析,应用分析;对象模型技术

的要点。

面向对象分析(OOA,Object-Oriented Analysis) 面向对象

分析最后得到的是对问题论域的清晰、精确的定义。属于软件

开发过程中的问题定义阶段,产生描述系统功能和问题论域的

基本特征的综合文档。

论域分析(Domain Analysis) 论域分析是在一个更广泛的领

域考虑问题,把相关的概念都标识到,以便把核心知识掌握得

更好。

(1)语义数据模型(semantic data models) 分为3层模型:

外部模型、概念模型和内部模型。

(2)在语义数据模型中的关系

(3)标识对象和类

(4)标识联系

应用分析(Application Analysis)论域分析时建立起来的问题

论域模型是应用分析的依据,要把它们用于当前正在建立的系

统当中。在应用分析阶段产生影响的条件则伴随用某种基于计

算机系统的程序设计语言来表示。重点考虑应用视图和类视

图。必须详细描述对每个类的规格说明和操作,同时表示形成

系统结构的类之间的相互作用。

对象模型技术(OMT,Object Model Technology)

Rumbaugh等人提出对象模型技术,它把分析时收集的信息

构造在3类模型中,即对象模型、动态模型和功能模型

(4)高层设计(一般)

理解:高层设计的概念。

高层设计开发系统的结构,用来构造系统的总体模型,并把任

务分配给系统的各个子系统。

(5)类的设计(重点)

理解:类设计的一般概念。

类的设计可通过复用来完成,可以利用现存类来设计类。常用

的有4种方式:选择、分解、配置和演变。

(6)对象模型(重点)

1.对象模型:它的作用是描述系统的静态结构,包括构成系统

的类和对象,它们的属性和操作,以及它们之间的联系。

第八部分 面向对象分析

(1)建立对象模型(重点)

1建立对象模型的步骤如下:

2确认对象及类

3建立数据字典

4加入对象间的关联

5确认对象属性

6使用继承加强类之间的关系

7确定存取数据的可能路径

8反复修正对象模型

(2)建立动态模型(次重点)。

动态模型 系统的涉及时序和改变的状况,可用动态模型来描

述。

动态模型着重于系统的控制逻辑。它包括两个图:状态图、事

件追踪图。

建立动态模型的步骤为:

1准备对话式的节目(事件记录)

2确认对象的事件

3准备每个程序的事件追踪图

4确保对象间事件的一致性

(3)建立功能模型(次重点)

理解:建立功能模型的过程

功能模型着重于系统内部数据的传送和处理。功能模型由

多个数据流图组成,它们指明从外部输入,通过操作和内部存

储,直到外部输出的整个的数据流情况。

数据流图的表示方法

建立功能模型的步骤为:

确认输出及输入数据

建立每个功能的数据流程图

描述每个系统的功能

确认对象间的限制

详述最优系统分析准则

第九部分 面向对象设计

(一)考核知识点

(1)面向对象设计的准则(重点)

理解:模块化,抽象,信息隐藏,弱耦合,强内聚,可重用的

概念。

(1) 模块化

模块化是软件设计的重要准则。在面向对象开发方法

中,将对象定义为模块。对象把数据结构和作用在数据上的操

作(方法)封装起来构成模块。对象是组成系统的基本模块。

(2) 抽象

类是一种抽象数据类型,在该数据类型之上,可以创建

对象(类的成员)。类包含相似对象的共同属性和服务,它对外

定义了公共接口,构成了类的规格说明(即协议),供外界合法

访问。

(3) 信息隐藏

在面向对象方法中,对象是属性和服务的封装体,这就

实现了信息隐藏。类结构分离了接口与实现,类的属性的表示

方法和操作的实现算法,对于类的用户来说,都应该是隐藏的,

用户只能通过公共接口访问类中的属性。

(4) 弱耦合

所谓耦合,是指一个软件结构内不同模块之间互连的

依赖关系。依赖关系越多耦合度越强,依赖关系越少耦合度越

弱。在面向对象方法中,对象是最基本的模块,不同对象之间

相互关联的依赖关系表示了耦合度。衡量设计优良的一个重要

标准就是弱耦合,弱耦合的设计中某个对象的改变不会或很少

影响到其他对象。

不同对象之间耦合是不可避免的。两个对象必须相互联

系相互依赖时,应该通过类的协议(即公共接口)实现两个对象

相互依赖(耦合),而不是通过类的具体实现细节来描述。

(5) 强内聚

所谓内聚,是一个模块内各个元素彼此结合的紧密程

度。结合得越紧密内聚越强,结合得越不紧密内聚越弱。强内

聚也是衡量设计优良的一个重要标准。在面向对象设计中,内

聚可分为下述三类:

1) 服务(操作)内聚。一个服务应该是单一的,即只完成一个任

务。

2) 类内聚。类内聚要求类的属性和服务应该是高内聚的,而且

它们应该是系统任务所必需的。一个类应该只有一个功能,如

果某个类有多个功能,通常应该把它分解成多个专用的类。

3) 一般-特殊内聚。一般-特殊内聚表示:一般-特殊结构符合领

域知识的表示形式,也就是说,特殊类应该尽量地继承一般类

的属性和服务。这样的一般-特殊结构是高内聚的。

(6)可重用

在面向对象设计中,一个类的设计应该具有通用性,为开

发相似的系统提供软件重用可能。因此,在软件开发过程中,

为了实现重用,既要尽量重用已有的类,又要创建可重用的新

类。

(2)启发规则(重点)

识记:各种启发式设计规则。

(1)设计结果应该清晰易懂

(2)一般-特殊结构的深度应适当

(3)设计简单的类

(4)设计简单的协议

(5)设计简单的服务

(6)减少设计变动

(3)设计问题域子系统(重点)

理解:设计问题域子系统的方法。

在面向对象设计过程中,可能对面向对象分析所得出的问题域

模型做的补充或修改

1. 调整需求2. 重用已有的类3. 把问题域类组合在一起 4.

增添一般化类以建立协议 5. 调整继承层次:(1) 使用多重继

承机制(2) 使用单继承机制

(4)设计人机交互子系统(重点)

理解:设计人机交互子系统的准则和策略。

11.6 设计人机交互子系统

1. 分类用户 2. 描述用户 3. 设计命令层次 4. 设计人机交

互类

(5)设计任务管理子系统(次重点)

理解:设计任务管理子系统的方法。

设计任务管理子系统

1. 分析并发性

2. 设计任务管理子系统:(1) 确定事件驱动型任务(2) 确

定时钟驱动型任务(3) 确定优先任务(4) 确定关键任务(5)

确定协调任务(6) 尽量减少任务数(7) 确定资源需求

(6)设计数据管理子系统(次重点)

理解:设计数据管理子系统的方法。

两种设计途径:

(1) 扩展的关系数据库管理系统是在关系数据库的基础上,

增加了抽象数据类型和继承机制,此外还增加了创建及管理类

和对象的通用服务。

(2)扩展的面向对象程序设计语言扩充了面向对象程序设计

语言的语法和功能,增加了在数据库中存储和管理对象的机制

.8.1 选择数据存储管理模式

1. 文件管理系统2. 关系数据库管理系统

8.2 设计数据管理子系统

1. 设计数据格式(1)文件系统(2)关系数据库管理系统3)

面向对象数据库管理系统

2. 设计相应的服务:使用不同数据存储管理模式时的设计要

点:(1) 文件系统(2) 关系数据库管理系统(3) 面向对

象数据库管理系统

(七)设计优化(重点)

识记:设计优化的方法。

理解:设计优化的方法。

11.1 确定优先级

11.2 提高效率的几项技术

1. 增加冗余关联以提高访问效率2. 调整查询次序3. 保留派

生属性

.11.3 调整继承关系

1. 抽象与具体2. 为提高继承程度而修改类定义3. 利用委托

实现行为共享

第十部分 面向对象实现

(一)考核知识点

(1)面向对象语言的优点(重点)

理解:面向对象语言的相对于传统的程序设计语言的各种优

点。

优点:(百度)

1、维护简单 2、可扩充性 3、代码重用

(1)一致的表示方法(2)可重用性(3)可维护性

(2)面向对象语言的技术特点(一般)

理解:在选择面向对象语言时应该着重考察的一些技术特点。

技术特点:(1)支持类与对象概念的机制(2)实现整体----部

分结构的机制(3)实现一般----特殊结构的机制(4)实现属性

和服务的机制(5)类型检查(6)类库(7)效率(8)持久保

存对象(9)参数化类(10)开发环境

面向对象技术具有如下良好特点:

(1)模块性; (2)封装功能; (3)继承性;(4)易维

护性;(5)扩充性;

(3)选择面向对象语言的方法(次重点)

理解:开发人员在选择面向对象语言时应该考虑的因素。

(1)将来是否占主导地位(2)可重用性(3)类库和开发环

(4)其他因素(4)程序设计风格(重点)

理解:提高软件可重用的方法,提高软件可扩充性的方法以及

提高软件健壮性的方法。

提高软件可重用的方法:(1)提高方法的内聚(2)减小方法

的规模(3)保持方法的一致性(4)把策略与实现分开(5)

全面覆盖(6)尽量不使用全局信息(7)利用继承机制 {调

用子过程 分解因子 使用委托 把代码封装在类中}

提高可扩充性:(1)封装实现策略(2)不要用一个方法遍历

多条关联链

(3)避免使用多分支结构(4)精心确定公有方法

提高健壮性:1)预防用户的操作错误(2)检查参数的合法

(3)不要预先确定限制条件(4)先测s试后

优化

(5)面向对象测试策略(重点)

理解:设计测试用例的方法,面向对象的集成测试和确认测试。

答:设计测试用例 随机测试、划分测试、基于故障的测试

测试顺序:单元测试->集成测试->确定测试->系统测试

·集成测试:每次将一个操作组装到类中(像传统的增殖式组装

那样)常常行不通,因为在构成类的各个部件之间存在各种直

接的和非直接的交互。

对于面向对象系统的集成测试,存在两种不同的测试策略。

基于线程测试 基于使用的测试

确认测试

• 在进行确认测试和系统测试时,不关心类之

间连接的细节。着眼于用户的要求和用户能

够认可的系统输出。

• 为了帮助确认测试的执行,测试者需要回到

分析模型,根据那里提供的事件序列(脚本)

进行测试。

• 可以利用黑盒测试的方法来驱动确认测试。

补充:第十一部分 统一建模UML

(4) 面向对象分析方法的运用(重点)

本文标签: 软件设计测试系统需求