软件工程第一章 软件工程概述

 

软件工程:
  是一门指导软件开发的工程学科,是以计算机理论及其相关学科的理论为指导,采用工程化得概念、原理、技术和方法进行软件的开发和维护。
1.软件研究内容:
 (1)方法和技术
 (2)工具及环境
 (3)管理技术
 (4)标准与规范(国际标准、行业标准、企业规范、项目规范)
软件开发方法:开发的各种方法及工作模型(软件系统需求分析、总体设计、软件结构、数据结构、算法设计)
软件工程管理:软件工程全过程的控制和管理(计划安排、成本估算、项目管理、软件质量)

2.软件特点:
 a.软件是一种逻辑实体,不是具体的物理实体
 b.软件产品的生产主要是研制
 c.软件具有"复杂性",其开发和运行常受到计算机系统的限制
 d.软件成本昂贵,其开发方式目前尚未完全摆脱手工方式

软件周期5个阶段:定义、设计、编码、测试、维护
定义(可行性研究和项目开发计划、需求分析)
设计(概要设计和详细设计)

生存期模型(瀑布模型、增量模型、喷泉模型、循环模型、演化模型、螺旋模型、变换模型、知识模型)
瀑布模型:(问题定义、可行性研究、需求分析、设计、编程、测试、运行和维护)
循环模型:瀑布模型的缺陷在于将相互重叠的软件开发过程,对瀑布模型进行改进,开发阶段可能循环重复
增量模型:瀑布模型增量模型和原型的快速原型模型
区别: 瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作钱,必须完成前一阶段的所有细节
  增量模型属于非整体开发模型,它推出某些阶段或所有阶段中的细节,从而较早地产生工作软件
螺旋模型(周期):
 第一:制定计划:确定目标、方案和限制条件

 

问答题:

 

1﹑软件产品的特性是什么? 产品特性:
⑴是一种逻辑产品,与物质产品有很大的区别。
⑵软件产品的生产主要是研制,生产成本主要在开发和研制,开发研制完成后,通过复制就产生了大量软件产品。
⑶软件产品不会用坏,不存在磨损,消耗。
⑷生产主要是脑力劳动,还末完全摆脱手工开发方式,大部分产品是"定做"的
⑸开发软件的费用不断增加,致使生产成本相当昂贵。

2﹑软件生产有几个阶段?各有何特征?
⑴程序设计时代:这个阶段生产方式是个体劳动,使用的生产工具是机器语言,汇编语言。
⑵程序系统时代:这个阶段生产方式是小集团合作生产,使用的生产工具是高级语言,开发方法仍依靠个人技巧,但开始提出结构化方法。
⑶软件工程时代:这个阶段生产方式是工程化的生产,使用数据库﹑开发工具﹑开发环境﹑网络﹑分布式﹑面向对象技术来开发软件

3、什么是软件危机?产生的原因是什么?
 1.软件规模越来越大,结构越来越复杂
 2.软件开发管理困难而复杂
 3.软件开发费用不断增加
 4.软件开发技术落后
 5.生成方式落后,仍采用手工方式
 6.开发工具落后,生成率提高缓慢

4. 什么是软件工程?它的目标和内容是什么?
 软件工程就是用科学的知识和技术原理来定义、开发、维护软件的一门科学。
软件工程目标:付出较低开发成本,达到要求的功能;取得较好的性能;开发的软件易于移植;
只需较低的维护费用;能按时完成开发任务,及时交付使用;开发的软件可靠性高。
软件工程内容: 开发技术和开发管理。
开发技术(软件开发方法、开发过程、开发工具和环境)
开发管理(软件管理学、软件经济学、软件心里学)

5.软件工程面临的问题是什么?
 软件生存周期:一个软件从提出开发要求开始直到该软件报废为止的整个时期。
包括(可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护)

6.什么是软件生存周期?它有哪几个活动
 可行性分析、项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护。

7. 什么是软件生存周期模型?有哪些主要模型?
 生存周期模型:描述软件开发过程中各种活动如何执行的模型。对软件开发提供强有力的支持。为开发过程中
的活动提供统一的政策保证,为参与开发的人员提供帮助和指导,是软件生存周期模型化技术的基础,
也是建立软件开发环境的核心。

主要有: 瀑布模型、增量模型、螺旋模型、喷泉模型、基于知识的模型、变换模型。

8.什么是软件开发方法?有哪些主要方法?
 使用早已经定义好的技术集及符合表示习惯来组织软件生产的过程。通过使用成功的软件开发方法
在规定的投资和时间内,开发出符合用户需求的高质量的软件。软件开发方法是克服软件危机的重要
方面之一,对软件工程及软件包产业的发展起了不可估量的作用。
主要:结构化方法,jackson方法,维也纳开发方法,面向对象开发方法
结构化方法:本质是功能分解,从代表目标系统整体功能的单个处理,自向下不断地把复杂的处理分为子处理。

结构化方法是围绕实现处理功能的过程结构造系统的。然而,用户需求的变化大部分是针对功能的,因此用
结构化方法设计出的系统结构不稳定。
结构化方法定义了目标系统的边界,且开发出的系统结构依赖与对系统边界的定义,因此,很难把系统扩展到新的边界
结构化方法设计系统时,几乎每开发一个新的系统,都要针对具体系统作大量重复的工作。

结构化方法可以用数据流图、系统结构图、数据辞典、状态转移图、实体关系图来进行系统逻辑模型的描述
面向对象方法:对象模型图、数据辞典、动态模型图、功能模型图。

面向对象方法抽象的系统结构往往并不必结构化方法产生的系统结构简单,但它能映射到数据库结构中,很容易实现
程序与数据结构的封装。

结构化由于用户的需求和软硬技术的不断发展变化,作为系统基本成分的功能模块很容易受到影响。
面向对象从处理数据入手,以数据为中心来描述系统,数据像对于功能而言,具有更强的稳定性。这样设计出能较好地映射问题
域模型。对象、类、继承性、多态性

jackson设计:从输入、输出数据结构入手,导出程序框架结构,在补充其他细节。就可得到完整的程序结构图。
jackson设计方法是一种面向数据结构的软件设计方法,jackson分析方法是面向数据流的分析方法。
(1)分析并确定输入数据和输出数据的逻辑结构,并用jackson结构图来表示这些数据结构
(2)找出输入数据结构和输出结构中有对象关系的数据单元
(3)按一下的规则由输入、输出的数据结构导出程序结构

维也纳开发方法:
 VDM,M基于集合论,提供了四个基本类型:集合、复合、映射、序列。
每个基本运算都具有相应的运算和关系,可以在断言中使用。程序的功能由刻画其初始状态钱的取值之间的关系,在后断言
中可以用特定的符号来应用变量在程序执行钱的初值。M采用面向模型的取值之间的关系。数据类型的规约1.状态集2.初始值
3.各种运算的描述。

 

 

 

 

 

 

 

 


 


 第二:风险分析:评估方案、标识风险和解决风险
 第三:实施工程:开发确认产品
 第四:客户评估:计划下一周工作
喷泉模型是以面向对象的软件开发方法为基础,以用户需求作为喷泉模型的源泉:
a.喷泉模型规定软件开发过程有4个阶段: 分析,系统设计、软件设计、实现
b.喷泉模型的各阶段相互重叠,它反映了软件过程并行性的特点。
c.喷泉模型以分析为基础,资源消耗成塔型,在分析阶段消耗的资源最多。
d.喷泉模型反映了软件过程迭代的逐步提炼的过程
e.喷泉模型强调增量开发,它依据分析一点,设计一点的原则,并不要求一个阶段的彻底
完成,整个过程是一个迭代的逐步提炼的过程
f.喷泉模型在实现时,由于活动不同,可分为系统实现和对象实现,这既反映了全系统的开发过程,也反映了对象族的开发和重用过程
智能模型:基于知识的软件开发模型,是知识工程与软件工程在开发模型上结合的产物,是以瀑布模型与专家系统的综合应用为基础
模型优点:
  a.通过领域的专家系统,可是需求说明更完整、准确和无二义性
  b.通过软件工程的专家系统,提供一个设计库支持,在开发过程成为设计者的助手
  c.通过软件工程知识和特定应用领域的知识和规则的应用提供开发的帮助
 
软件工程方法学:
 方法、工具和过程
 方法:完成软件开发各项任务的技术方法
 工具:为方法的运用提供自动或者半自动的支撑环境
 过程:为开发高质量软件所规定的各项任务的工作步骤。

1.典型的传统软件开发方法:
 Jackson方法、结构化开发方法、原型化方法、HIPO方法、IDEF方法
2.面向对象的开发方法:
 coda方法、Booch方法、OMT方法已经UML统一建模语言

结构化程序设计:
 SP方法(Stuctured Program)
 SD方法(Stuctured Design)
 SA方法(Stuctured Analysis)
SA/SD/SP方法互相衔接,形成了一整套开发方法。若将SA,SD方法结合起来,又称为结构化分析和设计技术(SADT)
结构化分析方法给出一组帮助系统分析人员产生功能规约的原理和技术。
需求分析结果主要以图形方式表示,以数据流图和控制流图为基础,伴以数据字典,并配上结构化语言、判定树和判定表

a.分析当前情况,做出反映当前物理模型的数据流图
b.推到出等价的逻辑模型的数据流图
c.设计新的逻辑系统,生成数据字典和基元描述
d.建立人机接口界面,提供选择的目标的物理模型数据流图
e.选择一种方案
f.建立完整的需求规约
结构化设计给出一组帮助设计人员在模块层次上分析设计质量的原理和技术
结构化设计方法适用于变换型结构和事务型结构的目标系统,结构化设计步骤:
1.评审和细化数据流图
2.确定数据流图的类型
3.把数据流图映射到软件模块结构,设计出模块结构的上层
4.基于数据流图逐步分解高层模块,设计中下层模块
5.对软件模块结构进行优化,得到更为合理的软件结构
6.描述模块接口
结构化方法的工作模型 -- 瀑布模型
瀑布模型是将其分割为独立的几个阶段,不能从本质上反映软件开发过程本身的规律。此外过分强调复审,并不能
完全避免较为频繁的变动

面向数据结构的开发方法:
结构化开发方法:一种面向数据流、数据封闭性的开发方法,而JACKSON系统开发方法则是面向数据结构的开发方法
思想:先建立输入输出的数据结构,在将其转换为软件结构。其分析的重点放在构造与系统相关的现实世界,并建立
现实世界的信息域的模型上。其最终目标是生成软件的过程性描述。强调程序结构与问题结构像对应。
1.jsp方法主要体现程序结构的设计,不严格区分软件概要设计和详细设计。可以根据jsp的规则之间导出程序结构
2.jsd是对jsp的扩充,正对jsp的缺陷而提出的解决方案。解决i/o结构的冲突问题
jackson三种典型动作: 顺序、选择、重复。
a.建立数据结构: 顺序、选择、循环
b.数据结构与模块结构像对应,因此不难从数据结构导出程序结构
Jackson方法:
 优点:结构清晰、易于理解、易于修改。不会过多依赖与设计者的经验
 缺点:当系统规模及复杂度大时,确定数据结构困难。

原型化开发方法:
 原型是软件开发过程中,软件的一个早期可运行的版本。
1.快速建立需求规格原型
2.快速建立渐进原型:
 快速分析
 构造原型
 运行和评价原型
 修改和改进

面向对象开发方法:
 OOSD: 对问题领域进行自然的分割,更接近人类通常思维的方式建立问题领域。
 面向对象 = 对象+类+继承+消息
OOSD = OOA + OOD + OOP

 OOA:
  对象模型(信息模型) -- 定义构成系统的类和对象,它们的属性与操作
  状态模型(动态模型) -- 描述任何时刻对象的联系及其联系的改变,即时序。通常用于状态图,事件追踪图
  处理模型(函数模型) -- 描述系统内部数据的传送处理

 

 

 

 

 

 

 

你可能感兴趣的:(软件工程第一章 软件工程概述)