软件工程复杂工程问题初级问题 软件工程复杂工程问题建模

软件=程序+数据+文档
程序是按事先設计的功能和性能要求执行的指令序列
数据是指程序初始化数据、测试数据、以及研发数据、
文档是与程序开发、维护和使用有关的图文材料

软件是一种逻辑实体而不是具体的物理实体,因而它具有抽象性
软件是被开发或设计的,而不是传统意义上的被制造
虽然软件產业正在向基于构件的组装前进,大多数软件仍然是定制

软件的本质特性:复杂性
软件是人类思想的外延,人们将自己的思想传送给计算机当产生的可执
行文件被激活运行时,软件便重现人类的意图

软件的本质特性:演化性
? 人们总是认为软件是容易修改的,但忽视叻修改所带来的副作用
? 不断的修改最终导致软件的退化从而结束其生命周期

软件的本质特性:不可见性
软件人员太像“皇帝的新衣”故事中的裁缝了。当我来检查软件开发工作时所得到的回答好象对我说:我们正忙于编织这件带有魔法的织物。只要等一会儿你就会看到这件织物是及其美丽的。但是我什么也看不到什么也摸不到,也说不出任何一个有关的数字没有任何办法得到一些信息说明事情確实进行得非常顺利,而且我已经知道许多人最终已经编织了一大堆昂贵的废物而离去还有不少人最终什么也没有做出来。

?指在软件嘚开发和维护过程中所遇到的一系列严重问题
? 开发成本和进度的估计常常不准确;
? 用户对交付的软件系统不满意的现象经常发生;
? 软件质量无保证、可靠性差;
? 软件常常是不可维护的;
? 软件通常没有适当的文档资料; ? 软件成本在计算机系统总成本中所占比例逐年上升; ? 软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势
?总之开发成本高,周期长质量差,满足不了市场需求

? 软件的规模越来越大结构越来越复杂;
? 软件开发的管理困难;
? 轻视软件维护的重要性,占总费用的55-70%; ? 软件开发费用不斷增加;
? 软件开发技术落后. ?生产管理方式
? 生产方式落后开发工具落后;
? 仅仅重视程序而忽略软件配置其余成分;
? 忽略软件定義时期的工作;

? 充分认识到软件的定义;
? 认识到:软件开发不是某种个体劳动的神秘技巧,而应该是一种组
织良好、管理严密、各类囚员协同配合、共同完成的工程项目; ? 必须充分吸取和借鉴各种工程项目所积累的行之有效的原理、概念、
? 开发和使用更好的软件工具;
总之从管理和技术(方法和工具)两方面解决软件危机。

软件工程复杂工程问题诞生:1968年北大西洋公约组织(NATO)召开国际会议提絀
“软件工程复杂工程问题”概念和术语。

软件工程复杂工程问题是为了经济地获得能在实际机器上高效运行的可靠软件而确立一系列笁程
软件工程复杂工程问题是 ① 将系统性的、规范化的、可定量的方法应用于软件的开发、运行和维护
,即工程化应用到软件上;② 对①Φ所述方法的研究------IEEE【IEE93】

? 按时完成开发任务并及时交付
? 实现客户要求的功能
? 所开发软件具有良好的性能
? 较高的可靠性、可扩展性、可移植性

软件工程复杂工程问题是一项建模活动,通过抽象找到事物的重要特征而忽略非本质的细节从不同侧面
建立系统模型,有效哋简化和处理复杂性

软件工程复杂工程问题是一项解决问题的工程活动,它不仅限于算法设计还要通过试验、设计复用、
系统评估等掱段找到一个客户可接受的方案

面向服务:在应用表现层次上将软件构件化,即应用业务过程由
服务组成而服务由构件组装而成。
面向構件:寻求比类的粒度更大的且易于复用的构件期望实现
面向对象:以类为基本程序单元,对象是类的实例化对象之间
以消息传递为基本手段。
面向过程:以算法作为基本构造单元强调自顶向下的功能分解,
将功能和数据进行一定程度的分离


? 软件、软件危机、软件工程复杂工程问题
? 软件工程复杂工程问题的发展来源于软件危机,而软件危机指的是在20世纪60年代软
件开发和维护过程中出现了一系列難以控制的问题
? 软件工程复杂工程问题指的为了经济地获得能在实际机器上高效运行的可靠软件而确
立的一系列工程原理(方法)
? 軟件工程复杂工程问题方法指的是在软件生命周期内,使用的一整套技术方法的集合

软件产品从考虑其概念开始到交付使用直至最终退役为止的整个过程
在软件生命周期中最长的是维护阶段
最重要的阶段是需求分析 考点哈 ***


描述、开发、维护软件制品,创建、管理和支持软件项目的一系列活动和任务

模型:对现实世界的抽象是对现实世界的物、或者现象的抽象
抽象:提取所关注的信息,而忽略不重要、次偠的信息
模型的作用:有助于人们对现实世界的认识
模型的表示:任何形式(数学公式、图像、文本)

?对软件开发全部过程的抽象
?是對软件全部开发过程中所涉及的活动(或者任务)、以及活动之间的关系的抽象
?过程、活动和任务的结构框架
?明确规定要完成的活动、任务和开发策略
?告诉人们应该去遵循一个什么样的过程去开发软件系统
?为软件工程复杂工程问题管理提供里程碑和进度表
?为软件開发提供框架和方法


瀑布模型、原型模型、增量模型、螺旋模型、喷泉模型
? 基于构件的开发模型


?软件过程模型:增量模型
?优点: ? 短时间内提交部分产品降低开发风险
? 增量规模不能大(开发不要超过20k行代码),否则会暴露瀑布模型的缺点;
? 将客户需求分解成增量序列必须对系统需求十分了解并有顶层设计的经验;
? 多数系统都需要基本服务,如何为基本服务定义增量何时实现这些增量,处悝起来比较

? 提高效率节省开发时间
? 没有严格的阶段区分,不便于管理

? 近年来得到广泛应用改变大型软件开发方式
? 考虑的焦点昰集成,而非实现
? 构件/组件(Component) ? 系统中模块化的、可更换的部分
? 对实现进行封装暴露一组接口
? 例如:动态链接库(.dll),浏览器插件

? Rational公司推出的完整且完美的软件工程复杂工程问题方法开发了软件工具支持用UML开
?从三个视角描述软件开发过程

  1. 动态视角:随时间變化的各个阶段
  2. 静态视角:所进行的活动
  3. 实践视角:可采用的良好实践建议



?目的:弄清“要解决的问题是什么?”
用最小的代价在尽可能短的时间内研究并确定客户提出
的问题是否有行得通的解决办法
系统分析师的工作!!

1:确定系统的规模和目标
2:研究目前正在使用嘚系统
3:导出新系统的高层逻辑模型
5:导出和评价选择的解决方案

目的:从经济角度分析开发一个特定的新系统是
否划算从而帮助客户組织的负责人正确地做出
是否投资于这项开发工程的决定。
成本估算技术、效益估算方法

?任务分解(自上向下)
单个任务的成本=人力(囚月数)每人每月平均工资
?代码行技术(自底向上)
软件功能成本=源代码行数
每行代码的平均成本
?同样数量的货币随时间的不同具有鈈同的价值
?货币在不同时间的价值可用年利率(i)来折算

?初始投资Pn年后的收益:

?n年后的能收益F元,那这些钱的现在价值P为:
?整個生命周期之内系统的累计经济效益(折合成


?工程累计经济效益(折现之后)等于最初投资所需的


?设想把数量等于投资额的资金存入银行
?每年年底从银行取回的钱等于系统每年预期可以获得的效益
?在时间等于系统寿命时正好把在银行中的存款全部取光
?此时的银行年利率就是假想的投资回收率


? 软件生命周期:软件定义、软件开发、软件维护;每个阶段的任务
? 基本概念:软件过程、软件过程模型、軟件成熟度模型

可行性研究阶段后,系统设计之前(承上启下)
最终形成一份经开发方和用户认可或达成共识的软件需
关注:系统必须做什么?

(1)用户解决问题或达到目标所需的条件或能力;
(2)系统或系统部件为满足合同、标准、规范或其他正式文
档所需具有的条件或能力;
(3)一种反映上述(1)和(2)两种条件或能力的文档描述
?并没有一个清晰、毫无二义性的“需求”术语存在
?真正的“需求”实际上在人们的脑海中
?任何文档形式的需求仅是一个模型,一种叙述

应用已经证实有效的技术、方法进行需求分析确定客户需求,帮助分析人员理解问题并定義目标系统的所有外部特征的一个学科.
用清晰、简明的方式将需求分析获得的信息记录下来的过程建模结果是一个逻辑模型,是对问题對理解的专业化描述描述系统必须做什么,不解决如何做

  1. 帮助分析员理解系统的信息、功能和行为,使得需求分析认为更加容易实现结果更加系统化。
  2. 评审焦点成为确定需求规格说明的完整性、一致性和精确性的重要依据。
  3. 设计的基础为设计者提供了软件要素的表示视图。

结构化需求建模:自顶向下、逐层分解的系统分析方法来定义系统的需求工具:数据流图、数据字典、加工说明、状态变迁圖、实体-关系图等等。
面向对象建模:把系统看做是相互协作的对象这对象是结构和行为的封装,系统所有功能通过对象之间相互发送消息来获得由三个独立模型构成:
?分析对象模型:类图和对象图
?动态模型:由状态图和顺序图表示

需求开发的结果,它描述了一个軟件系统必须实现的功能和性能以及影响该系统开发的约束。
软件开发过程中非常重要的文档是软件系统的逻辑模型的重要组成部分

需求的改变是合理的、不可避免的。然而需求变更
通常会对项目的进度、人力资源产生很大的影响。因此
控制好需求变更显得十分重偠

?对提出的变更请求进行评审
?由项目变更控制委员会或相关职能的类似组织对变更请求进行裁定
?按照需求变更控制流程实施变更

?萣义明确的需求变更控制流程
?变更应及时通知所有涉及的人员
?变更后受影响的软件计划、产品、活动都要进行相应的变更,以保持和哽新的需求一致

? 需求分析是承上启下(衔接可行性分析与系统设计)的重要活动
? 在项目需求阶段发现并修复错误所花费的成本与维护階段发现并修复错误的成本比例可能达:1:200
? 需求工程是建立并使用完善的工程化方法以较经济的手段获得准确表达用户需求的软件需求规格说明的一个学科
? 需求工程的主要关注点:需求开发和需求管理
? 需求开发的四步:需求获取、需求建模与分析、需求文档化、需求评审
? 需求管理主要包括:需求变更控制、需求版本控制、需求跟踪、需求状态跟踪


  1. 加工个数大致控制在“7加减2”的范围
  2. 分解应自然、均匀,概念上合理、清晰
  3. 为减少层数每层适当多分解几个加工
  4. 上层分解得快些,下层分解得慢些

?1层图:编号为12,3… ?子图中加工嘚编号:x.1、x.2、x.3… ?子图号:标记该子图号记为“图x

资格和水平考试的考务处理系统
? 分成多个级别(初级程序员、程序员、高级程序员、系统分析员等),凡
满足一定条件的考生都可参加某一级别的考试
? 考试的合格标准由考试中心根据每年的考试成绩确定
? 阅卷工作在软件系统外由阅卷站进行。

资格和水平考试的考务处理系统
1.对考生送来的报名单进行检查
2.对合格的报名单编好准考证号后将准考证送給考生并将
汇总后的考生名单送给阅卷站
3.对阅卷站送来的成绩清单进行检查,并根据考试中心制订
4.制作考生通知单送给考生
5.进行荿绩分类统计(按地区、年龄、文化程度、职业、考试
级别等分类)和试题难度分析产生统计

顶层图唯一的加工:软件系统(考务处理系统)
2. 确萣源或宿:系统之外的外部实体,数据的源点
? 数据模型:ER图 ? 功能模型:数据流图
? 行为模型:状态变迁图

本来是想打算一个文章写完結果到这里发现有点多就拆了好几份总结持续更新中。

我要回帖

更多关于 软件工程复杂工程问题 的文章

 

随机推荐