一. 前言
<1>. 软件危机:
20世纪60年代,随着计算机的广泛应用,软件生产率,软件质量越来越难以满足社会发展的需求,成为制约社会、经济的制约因素,人们把这一现象称为软件危机;
<2>. 软件的发展历史:
20世纪60年代末至80年代初,软件系统规模,复杂性以及在关键领域的广泛应用促进了软件的工程化开发和管理;这一时期主要围绕软件项目开展了有关开发模型,开发方法和支持工具的研究;
20世纪80年代以来,基于已开展的大量软件工程实践,围绕对软件工程过程的支持,开展了大量有关软件生产技术特别是软件复用技术和软件生产管理的研究和实践;
<3>. 软件工程:
软件工程是应用计算机理论与技术,工程管理的原则和方法,按照预算和进度实现满足用户要求的软件的工程,或以此为研究的学科;
<4>. 软件,软件的本质:
软件是对特定问题域的抽象,是被开发出来的一个逻辑实体,而不是一个有形的物理部件; 软件的本质是实现问题域中的术语和处理逻辑到解空间的术语和逻辑的映射;
<5>. 所要做的工作:
一是如何实现映射,这是技术层面的问题,又可分为过程方向,即求解软件的开发逻辑,如各种模型;和过程途径,即求解软件的开发手段,如结构化方法,面向对象方法等; 二是如何管理这些映射,这是管理层面的问题;
系统建模是运用所掌握的知识,经过抽象,给出系统的一个结构——系统模型;
<6>. 基本途径:
求解一个问题的基本途径是系统建模;
所谓系统建模,是根据已掌握的知识,通过抽象给出系统的一个结构——系统模型;
模型是一个抽象,该抽象是在意图所确定的视角和抽象层上对物理系统的描述,描述其中的成分以及各成分之间所具有的特殊语义关系,还包括对系统边界的描述;
在软件设计领域,系统模型分为概念模型和软件模型;概念模型描述了软件是什么;软件模型描述了实现概念模型的软件解决方案;软件模型又可分为设计模型,实现模型和不熟模型等;
OUTLINE:
二. 软件需求分析
1. 需求
(1). 需求的定义:
一个需求是一个有关要予构造的陈述,它描述了待开发产品/系统功能上的能力,性能参数或其它性质;
(2). 需求的属性:
必要性:该需求用户所要求的; 无歧义性:该需求只能用一种方式解释; 可测性:该需求是可进行测试的; 可测量性:该需求是可测量的;
可跟踪性:该需求可以从一个开发阶段跟踪到另一个阶段;
(3). 需求的分类:
功能需求:规约了系统或系统构件必须执行的功能;
性能需求:规约了系统或系统构件在性能方面必须具有的一些特性;
外部接口需求:规约了系统或系统构件必须与之交互的用户、硬件、软件或数据库元素; 设计约束:是一种需求,它限制了软件系统或软件系统构件设计方案的范围; 质量属性:规约了软件产品所具有的一个性质必须达到其质量方面所期望的一个水平;
(4). 需求发现技术:
自悟; 交谈; 观察; 小组会; 提炼;
在使用以上技术时,还都可以辅以诸如原型构造等其它方法; 在实际使用中,往往组合地使用以上技术;
执行需求发现这项活动的人,其技能水平对这项活动的成功具有重大影响;
2. 需求规约:
(1). 需求规约的定义:
需求规约是一个软件项/产品/系统所有需求陈述的正式文档,它表达了一个产品/系统的概念模型;
(2). 需求规约的性质:
重要性和稳定性程度;
可修改的; 完整的; 一致的;
(3). 需求规约的作用:
需求规约是软件开发小组同用户之间一份事实上的技术合同书,是产品功能和环境的体现; 对产品/系统开发,需求规约是一个正式的受控的起始点; 对于项目的其余大多数工作,需求规约是一个管理控制点; 需求规约是创建产品验收测试计划和用户指南的基础;
(4). 需求规约的表达方式:
非形式化的需求规约; 半形式化的需求规约; 形式化的需求规约;
OUTLINE:
三. 结构化方法
基本思想:一切信息系统都是由信息流构成的,每一信息流都有自己的起点信息源,有自己的归宿信息潭,有驱动信息流动的加工,所谓信息处理主要体现为信息的流动;
缺点是:依然没有摆脱冯诺依曼体系结构的影响,所捕获的数据和功能恰恰是客观事物的异变性质,由此所构建的系统结构很难与客观实际系统的结构保持一致;
基本术语 过程指导 系统模型
内部联系:
1. 主体为上面图所示,基本术语,过程指导,系统模型;
2. 由基本术语联系到过程指导,因为过程指导要涉及到基本术语中的元素,如:
建立系统环境图,确定系统语境,则对应基本术语中的数据源,数据流,加工,和数据潭; 建立系统的层次数据流图,主要对应基本术语中的数据流,数据存储和加工; 定义数据字典,对应基本术语中的数据流和数据存储; 描述加工,则对应基本术语中的加工; 3.结构分析与结构设计的联系,
设计准备,确定边界,对应确定系统边界;
第一次,第二层分解,对应建立系统的层次数据流图; 精化设计,对应定义数据字典; 详细设计,对应描述加工;

