复习提纲
什么是软件工程?
软件工程是一门工程学科,涉及软件生产的各个方面,它既是一个创造的过程,又是一个逐步进行的过程,从最初的系统描述到使用后的系统维护。 软件工程定义:
鲍威尔(Fritz Bauer):“建立并使用完善的工程化原则,以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法”。 软件工程项目的基本目标是: (1)付出较低的开发成本; (2)达到要求的软件功能; (3)取得较好的软件性能; (4)开发的软件易于移植; (5)需要较低的维护费用;
(6)能按时完成开发工作,及时交互使用。
软件工程是对技术(或社会)实体的分析、设计、建造、验证和管理。因此工程须回答下列问题:
?要解决的问题是什么?
?要用于解决该问题的实体具有什么特点? ?如何实现该实体(解决方案)? ?如何建造该实体?
?采用什么方法去发现该实体设计和建造过程中产生的错误? 瀑布模型存在的问题:
1、实际的项目很少按照该模型给出的顺序进行.开发过程中变化可能引起混乱; 2、用户常常难以清楚的给出所有需求;
3、在软件开发初期指明软件系统的全部需求是困难的,有时甚至是不现实的。而瀑布模型在需求分析阶段要求客户和系统分析员必须做到这一点才能开展后续阶段的工作;
4、需求确定后,用户和软件项目负责人要等相当长的时间(经过设计、实现、测试、运行)才能得到一份软件的最初版本。 螺旋模型具有以下的优点:
(1)螺旋模型支持用户需求的动态变化;
(2)螺旋模型中,需求分析和软件实现是相互依赖、紧密联系的软件开发活动。 (3)螺旋模型为用户参与软件开发的所有关键决策提供了方便。 (4)螺旋模型有助于提高目标软件的适应能力。
(5)螺旋模型为项目管理人员及时调整管理决策提供了便利,从而降低了软件开发的风险。
◆原型模型(快速原型法)——针对软件开发初期确定软件系统需求方面存在着一定困难的情况下,软件开发人员根据客户提出的问题域,抓住中心快速地开发出一个原型,它向客户展示了待开发软件系统的全部或部分功能和性能,在征求客户对原型意见的过程中,进一步修改、完善、确认软件系统的需求并达到一致的理解。它是一种常用的模型。
◆快速原型方法关键在于快速地实现可运行的原型,以便尽快提交用户确认,
然后再进行改进。
系统分析的目标一般包括下面六个方面: (1)识别用户要求; (2)评价系统的可行性;
(3)进行经济分析和技术分析;
(4)把功能分配给硬件、软件、人、数据库和其它系统元素; (5)建立成本和进度限制;
(6)生成系统规格说明,形成所有后续工程的基础。 可行性研究 :
可行性研究包括经济可行性、技术可行性和社会可行性(法律可行性和开发方案的选择性)。
系统分析过程,一般必须考虑下面八个方面的问题:(系统需求识别) (1)所期望的功能和性能是什么? (2)可靠性和质量问题是哪些? (3)总的系统目标是什么? (4)成本与进度限制如何?
(5)制造(产品)的需求是什么? (6)市场与竞争情况怎样? (7)有效的技术有哪些? (8)将来可能有哪些扩充?
●管理评审必须回答以下一些问题:
(1)系统是否有一个稳定的商业需求,系统开发是否有意义? (2)系统开发是否有市场价值或社会效益? (3)系统开发是否有其它选择方案? (4)系统各部分的开发风险是什么? (5)系统开发所需资源是否具备? (6)成本和进度计划是否恰当?
●技术评审必须分析清楚以下一些问题:
(1)系统功能复杂性是否与开发风险、成本和进度评估保持一致? (2)系统采用的术语、系统与子系统功能定义是否足够详细?
(3)系统与环境的接口以及各个子系统之间的接口定义是否详细? (4)系统规格说明是否指明可靠性和可维护性等方面的系统性能问题? (5)系统规格说明是否为后续的硬件工程、软件工程打下坚实的基础? 需求分析具有一定的困难性,具体表现如下: 1.系统分析员对问题域的理解程度的局限性。 2.需求的不断变化——问题域的动态性。
3. 用户对目标系统的需求具有片面性、模糊性甚至不一致性。 4.人与人之间沟通的复杂性。 5.每个问题域都具有专业术语。 软件需求分析的基本原则如下:
(1)必须能够表达和理解问题的数据域和功能域。
(2)必须按自顶向下,逐层分解的方式对问题进行分解和不断细化。 (3)要给出系统的逻辑模型和物理模型。 (逻辑模型:给出软件要达到的功能和要处理数据之间的关系,而不是实现的细
节。物理模型: 给出处理功能和数据结构的实际表示形式。) 系统分析员的主要焦点是 “做什么” ,不是 “怎样做”. 需求获取的方法:
(1)采访 (2)观察 (3)问卷和调查 (4)会议 (5)建立原型以得到潜在用户的反馈。 OOA 的有关术语 :
问题域(program domain):是指被开发系统的应用领域,即在客观世界中由该系统处理的业务范围。 主题(subject):是指把一些具有较强联系的类组织在一起而得到的类集合。对大的系统而言,当类较多时,会增加人们阅读和理解的难度。运用主题的划分原则,把众多类组合成数量较少的几个主题,通过控制可见性,对人们的注意力加以引导,使人们可以从更高的宏观角度观察这些主题,有助于理解总体模型。 关联(Association):是指对象之间存在的静态联系。如果这种联系是系统责任所需要的,则要求在 OOA 模型中通过连接明确地表示出来。 用 OOA 来定义对象的主要活动过程包括: ① 确定对象 ② 确定属性 ③ 定义服务 ④ 建立结构 ⑤ 确定关联
以上过程的执行次序是可以改变的,而且某些活动可能会重复地发生,交错进行。
整体━部分结构用于描述系统中各对象之间的组成
关系,此结构体现了OO方法的聚合原则,是OOA表示复杂事物的一种重要手段。
OOD分为两个阶段:①高层设计阶段,②低层设计阶段。
● 高层设计阶段主要开发系统的结构,构造系统的总体模型(架构)及用户界面等。
● 低层设计主要集中于类的详细设计,包括对象类的关联、接口形式及实现服务的算法等。
◆ 评审需求规格说明主要有几项指标,它们是:正确性、无歧义性、完全性、可验证性、一致性、可理解性、可修改性以及可追踪性等。
◆ 通常,人们把设计定义为“应用各种技术和原理,对设备、过程或系统做出足够详细的定义,使之能够在物理上得以实现”。
◆ 从工程管理的角度来看,软件设计分两步完成。首先做概要设计,将软件需求转化为数据结构和软件的系统结构。然后是详细设计,即过程设计。 ◆详细设计阶段,需要完成的工作是:
(1)确定软件各个组成部分内的算法以及各部分的内部数据组织。 (2)选定某种过程的表达形式来描述各种算法。 (3)进行详细设计的评审。 ◆、信息隐蔽是指,每个模块的实现细节对于其它模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其它不需要这些信息的模块使用。 ◆模块有三个基本属性:
(1)功能:即指该模块实现什么功能,做什么事情。 (2)逻辑:即描述模块内部怎么做。
(3)状态:即该模块使用时的环境和条件。
模块的独立性度量准则:模块间的耦合和模块的内聚。 术语解析:
◆耦合:是模块之间的相对独立性(相互连接的紧密程度)的度量。 ◆内聚:是模块功能强度(一个模块内部各个元素彼此结合的紧密程度)的度量。 ◆内容耦合:发生下面情形,两个模块之间就发生了什么样的(内容)耦合。? (在什么情况下会发生内容耦合?)
1)一个模块直接访问另一个模块的内部数据; 2)一个模块不通过正常入口转到另一模块内部; 3)两个模块有一部分程序代码重叠 4)一个模块有多个入口。 ◆外部耦合:一组模块都访问同一简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息。 ◆ 七种耦合:
1、控制耦合 2、外部耦合 3、内容耦合4、数据耦合 5、---- 6、----- 7、-----? ◆ 功能内聚:一个模块中各个部分都是完成某一具体功能不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割。
◆ 七种内聚:
1、通信内聚 2、信息内聚 3、功能内聚 4过程内聚 5、----- 6、----- 7、-----? ◆模块化设计的最终目标,是希望建立 模块间耦合尽可能松散 的系统。
◆内聚和耦合是相互关联的。 在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。
◆软件设计在技术上可分为总体结构设计、数据设计、过程设计三个活动;在工程上可分为概要设计和详细设计两个阶段。
◆软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序内部结构而精确设计一批测试用例(即输入数据以及预期的输出结果),并利用这些测试用例去运行程序,以发现错误的过程。 ◆在整个软件开发中,测试工作量一般占30%~40%,甚至≥50%。 ◆ 程序测试能证明错误的存在,但不能证明错误不存在。 ◆软件测试应贯穿于软件定义与开发的全过程。 ◆测试阶段工作步骤:
单元测试: 检验每个模块能否单独工作
集成测试: 检验概要设计中模块接口设计问题 确认测试: 以需求规格说明书为检验尺度 系统测试: 综合检验
测试可视为分析、设计、编码三个阶段的最终复审,以保证软件质量。 ◆测试用例应由输入数据和预期的输出结果两部分组成 . ◆在设计测试用例时,应当包括合理的输入条件和不合理的输入条件。
◆静态测试:基本特征是在对软件进行分析、检查和审阅,不实际运行被测试的软件。
◆动态测试:通过运行软件来检验软件的动态行为和运行结果的正确性

