软件工程的定义 :◆传统定义为了经济地获得可靠的和能在实际机器上有效运行的软件,确立并应用健全的工程原理◆ IEEE 定义软件工程是. 将系统的、规范的和可计量的方法应用于软件的开发、操作和维护,即将工程化应用于软件软件的构成要素 :软件是计算机系统中与硬件相互依存的另一部分,它是包括程序、数据及其相关文档的完整集合。
程序:是按事先设计的功能和性能要求执行的指令序列;数据:是使程序能正常操纵信息的数据结构;文档:是与程序开发、维护和使用有关的图文材料。
软件的特点:1. 软件是一种逻辑实体,具有抽象性;2. 是开发的,而不是制造的3. 具有柔性4. 不磨损软件工程的范围:每个软件项目都是为某种商业需要而设计的已经成为基于计算机的系统和产品演变过程中的关键因素已经从专门问题的解决方案和分析信息的工具,转变为完整的结构良好的行业涉及广泛的技术和应用领域,然而所有软件的演变都遵循着 30 多年来一成不变的规律软件工程为构建高质量的软件提供基础框架软件工程的三个要素是方法、工具、过程。
瀑布模型的特点:1. 阶段间具有顺序性和依赖性2. 推迟实现的观点3. 质量保证的观点快速原型模型的特点:◆快速原型模型先开发一个“原型”软件,完成部分主要功能,展示给用户并征求意见,然后逐步完善,最终获得满意的软件产品。
◆快速实现和提交一个有限的版本,可以应付市场竞争的压力。
螺旋模型的特点:◆对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标;◆减少了过多测试(浪费资金)或测试不足(产品故障多)所带来的风险;◆更重要的是,在螺旋模型中维护只是模型的另一个周期,在维护和开发之间并没有本质区别。
◆螺旋模型的主要优势在于它是风险驱动的,但这也是其一个弱点,要求开发人员具有丰富的风险评估经验和这方面的专门知识。
螺旋模型主要适用于内部开发的大规模软件项目增量模型的特点:◆采用瀑布模型和快速原形模型等开发软件时,目标都是一次就把一个满足所有需求的产品提交给用户。
而增量模型则是一个构件接一个构件地提交,因此能在较短的时间内向用户提交可完成部分工作的产品;◆逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品;◆开发人员既要把软件看作一个整体,又要把它分解成合适的构件序列,每个构件本质上都独立于另一个构件,这一点较难做到喷泉模型特征:◆喷泉模型是一种以用户需求为动力,以对象为驱动的模型,主要用于描述面向对象的软件开发过程◆软件开发过程自下而上周期的各阶段是相互重叠和多次反复的,就像水喷上去又可以落下来,类似一个喷泉。
◆各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏可行性分析考虑的方面:技术,经济,操作,法律,时间,社会等;可行性研究的步骤:1 、复查确认系统的目标规模,明确限制的约束2 、研究目前正在使用的系统3 、导出新系统的高层逻辑模型 (conceptual design)4 、重新定义5 、导出和评价供选择的方案6 、推荐可行的方案7 、草拟开发计划(粗略)8 、编写可行性研究报告、审查、存档需求分析的任务 :一、确定对系统的综合要求二、分析系统的数据要求三、导出系统的逻辑模型四、修正系统开发计划数据建模 :数据模型包括三种互相关联的信息:数据对象,描述对象的属性,描述对象间相互连接的关系。
数据对象是对软件必须理解的复合信息的抽象。
所谓复合信息是指具有一系列不同性质或属性的事物,仅有单个值的事物不是数据对象。
由一组属性来定义的实体都可以被认为是数据对象。
属性定义了数据对象的性质。
必须把一个或多个属性定义为“标识符”,也就是说,当我们希望找到数据对象的一个实例时,用标识符属性作为“关键字” ( 通常简称为“键” ) 。
应该根据对所要解决的问题的理解,来确定特定数据对象的一组合适的属性。
数据建模数据对象彼此之间相互连接的方式称为联系,也称为关系。
联系可分为以下 3 种类型:(1) 一对一联系(1 ∶ 1)(2) 一对多联系(1 ∶ N)(3) 多对多联系(M ∶ N)联系也可能有属性。
在需求分析阶段 , 通常使用 E-R 图 (entity-relationship diagram) 来建立数据模型 ,描述数据对象和它们之间的关系。
相应地可把用 E-R 图描绘的数据模型称为 E-R 模型。
E-R 模型使用简单的图形符号表达系统分析员对问题域的理解,不熟悉计算机技术的用户也能理解它,因此, ER 模型可以作为用户与分析员之间有效的交流工具。
E-R 图中包含了实体 ( 即数据对象 ) 、关系和属性等 3 种基本成分。
通常用矩形框代表实体,用连接相关实体的菱形框表示关系,用椭圆形或圆角矩形表示实体 ( 或关系 ) 的属性,并用直线把实体 ( 或关系 ) 与其属性连接起来。
例如,在教学管理中,一个教师可以教授零门、一门或多门课程,每位学生也需要学习几门课程。
因此,教学管理中涉及的数据对象(实体型)有学生、教师和课程。
数据流图数据流图 (DFD) 是一种图形化技术,它描绘数据从输入移动到输出的过程中所经受的变换。
在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,是分析员与用户之间极好的通信工具。
设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。
数据流图的基本要点是描绘“做什么”而不考虑“怎样做”。
数据流图( DFD )中的主要图形元素数据加工 ( 数据变换 )数据源点或终点 ( 外部实体 )数据流数据存储注意:在数据流图中,应该描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件。
数据字典数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
数据流图描述了系统的“分解”;依靠“词典”来说明各个成分的含义;数据流图中所有名字的定义就构成一本词典;数据字典和数据流图共同构成系统的逻辑模型。
只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明;数据流图中出现的每一个数据流名、每一个文件名和每一个加工名在词典中都应该有一个条目给出这个名字的定义。
行为建模行为建模给出需求分析方法的所有操作原则,但只有结构化分析方法的扩充版本才提供这种建模的符号。
状态转换图提供了行为建模机制。
状态转换图 ( 简称为状态图 ) 通过描绘系统的状态及引起系统状态转换的事件,来表示系统的行为。
状态图还指明了作为特定事件的结果系统将做哪些动作。
1. 状态状态是任何可以被观察到的系统行为模式,一个状态代表系统的一种行为模式。
系统对事件的响应,既可以是做一个 ( 或一系列 ) 动作,也可以是仅仅改变系统本身的状态,还可以是既改变状态又做动作。
在状态图中定义的状态主要有:初态 ( 即初始状态 ) 、终态 ( 即最终状态 ) 和中间状态。
在一张状态图中只能有一个初态,而终态则可以有 0 至多个。
2. 事件事件是在某个特定时刻发生的事情,它是对引起系统做动作或 ( 和 ) 从一个状态转换到另一个状态的外界事件的抽象。
3. 表示符号在状态图中,初态用实心圆表示,终态用一对同心圆 ( 内圆为实心圆 ) 表示。
中间状态用圆角矩形表示,可以用两条水平横线把它分成上、中、下 3 个部分。
上面部分为状态的名称,这部分是必须有的;中间部分为状态变量的名字和值,这部分是可选的;下面部分是活动表,这部分也是可选的。
行为建模活动表的语法格式如下:事件名 ( 参数表 )/ 动作表达式其中:“事件名”可以是任何事件的名称。
在活动表中经常使用下述 3 种标准事件: entry ,exit 和do 。
entry 事件指定进入该状态的动作,exit 事件指定退出该状态的动作,而 do 事件则指定在该状态下的动作。
需要时可以为事件指定参数表。
活动表中的动作表达式描述应做的具体动作。
事件表达式的语法如下:事件名 ( 参数表 ) [守卫条件]/动作表达式其中:守卫条件是一个布尔表达式。
如果同时使用事件名 ( 参数表 ) 和守卫条件,则当且仅当事件发生且守卫条件的布尔表达式为真时,状态转换才发生。
如果只有守卫条件,没有事件名 ( 参数表 ) ,则只要守卫条件为真状态转换就发生。
动作表达式是一个过程表达式,当状态转换开始时执行该表达式。
1、耦合◆耦合是对一个软件结构内不同模块之间的互相连接的紧密程度的度量。
◆耦合强弱取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。
◆一般模块间可能的连接方式有 7 种,构成耦合性的 7 种类型:( 1 )非直接耦合 (Nondirect Coupling)▪两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。
▪非直接耦合的模块独立性最强。
(2) 数据耦合 (Data Coupling)一个模块访问另一个模块时,彼此之间是通过简单数据参数 ( 不是控制参数、公共数据结构或外部变量 ) 来交换输入、输出信息的,称此为数据耦合。
数据耦合是松散的耦合,模块间的独立性比较强,在软件程序结构中至少必须有这种耦合。
(3) 标记耦合 (Stamp Coupling)一组模块通过参数表传递记录信息,就是标记耦合。
这组模块共享了这个记录,它是某一数据结构的子结构,而不是简单变量。
在设计中应尽力避免这种耦合(但允许使用),它使在数据结构上的操作复杂化了。
(4) 控制耦合 (Control Coupling)⏹如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。
⏹控制耦合意味着控制模块必须知道所控制模块内的一些逻辑关系,这样会降低模块的独立性。
去除模块间控制耦合的方法控制耦合增加了理解和编程的复杂性,调用模块必须知道被调模块的内部逻辑,增加了相互依赖。
去除方法:◆将被调用模块内的判定上移到调用模块中进行;◆被调用模块分解成若干单一功能模块。
(5 )外部耦合( External Coupling )⏹一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。
例如: C 语言程序中各个模块都访问被说明为 extren 类型的外部变量。
( 6 )公共耦合( Common Coupling )若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。
公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。
只有在模块之间共享的数据很多,而且通过参数表传递不方便时,才使用公共耦合,否则,还是使用模块独立性比较高的数据耦合较好些。