第一章《软件工程学概述》
(1)什么是软件
软件是:
- 指令的集合(计算机程序),通过执行这些指令来满足预期的特征、功能和性能需求;
- 数据结构,使得程序可以合理的利用信息;
- 文档描述,用来描述程序操作和使用。
(2)软件的特点
- 软件是逻辑产品,不同于物理产品,软件更新复杂,硬件简单替换。
- 硬件会磨损(浴缸曲线),软件不会(失效曲线)。
- 软件本身复杂,设计开发复杂,如人员要求高,成本、进度难控制,风险大、维护困难等。
(3)软件的发展
机器为中心----->>应用为中心------->>企业为中心
(4)遗留软件为什么要变更
- 软件必须进行适应性调整,以满足新的计算环境和技术的需求。
- 软件必须升级以实现新的商业需求。
- 软件必须扩展使之具有与更多现代系统和数据库的互操作能力。
- 软件必须进行改建使之能适应多样化的网络环境。
(5)软件危机
(6)软件工程
【定义】
(1)将系统化的、规范的、可量化的方法应用于软件的开发、运行和维护,即将工程化方法应用于软件。
(2)在(1)中所述方法的研究。
【特点】
1. 软件工程关注于大型程序的构造
2. 软件工程的中心课题是控制复杂性
3. 软件经常变化
4. 开发软件的效率非常重要
5. 和谐地合作是开发软件的关键
6. 软件必须有效地支持它的用户
7. 在软件工程领域中是由具有一种文化背景的人替具有另一种文化背景的人
(7)软件过程
- 软件过程是各个环节的粘合剂,串联。
- 软件产品构建时所执行的一系列活动、动作,和任务的集合
- 过程框架:框架活动 + 普适性活动
(7)经典软件过程模型
1、瀑布模型
【特点】:
- 提供了软件过程模型的基本框架(模板)。
- 强调了每一阶段活动的严格顺序。
- 质量保证观点:以经过评审确认了的阶段工作 产品(文档)驱动下一阶段的工作,便于管理。
- 是一种整体开发模型,程序的物理实现集中在开发阶段的后期,用户在最后才能看到自己的 产品
【优缺点】
优点:瀑布模型适合于用户需求明确、完整、无重大变化的软件项目开发。瀑布模型的成功在很大程度上是由于它基本上是一种文档驱动的模型
缺点:实际项目很少按照该模型给出的顺序进行; 用户常常难以清楚地给出所有需求; 用户必须有耐心,等到系统开发完成。
2、原型模型
原型模型存在的问题 :
- 为了使原型尽快的工作,没有考虑软件的总体质量和长期的可维护性。
- 为了演示,可能采用不合适的操作系统、编程语言、效率低的算法,这些不理想的选择成了系统的组成部分。
- 开发过程不便于管理。
3、增量模型
【有点】
- 在较短时间内向用户提交可完成部分工作的产品,并分批、逐步地向用户提交产品。从第一个构件交付之日起,用户就能做一些有用的工作。
- 整个软件产品被分解成许多个增量构件,开发人员可以一个构件一个构件地逐步开发。
- 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品,从而减少一个全新的软件可能给客户组织带来的冲击。
- 采用增量模型比采用瀑布模型和快速原型模型需要更精心的设计,但在设计阶段多付出的劳动将在维护阶段获得回报。
【困难】
- 在把每个新的增量构件集成到现有软件体系结构中时,必须不破坏原来已经开发出的产品。此外,必须把软件的体系结构设计得便于按这种方式进行扩充,向现有产品中加入新构件的过程必须简单、方便,也就是说,软件体系结构必须是开放的。
- 开发人员既要把软件系统看作整体。又要看成可独立的构件,相互矛盾。
- 多个构件并行开发,具有无法集成的风险。
4、螺旋模型
什么事螺旋模型
对于复杂的大型软件,开发一个原型往往达不到要求。螺旋模型将瀑布模型和增量模型结合起来,加入了风险分析。在该模型中,软件开发是一系列的增量发布,早期的迭代中,发布的增量可能是一个纸上的模型或原型,在以后的迭代中,逐步产生系统更加完善的版本。
螺旋模型的优点
- 对可选方案和约束条件的强调有利于已有软件的重用,也有助于把软件质量作为软件开发的一个重要目标
- 减少了过多测试或测试不足
- 维护和开发之间并没有本质区别
螺旋模型的特点
- 风险驱动,需要相当丰富的风险评估经验和专门知识,否则风险更大
- 主要适用于内部开发的大规模软件项目,随着过程的进展演化,开发者和用户能够更好的识别和对待每一个演化级别上的风险
- 随着迭代次数的增加,工作量加大,软件开发成本增加
(8)经典软件过程模型
- 初始阶段:进行问题定义,确定目标,评估其可行性,降低关键风险。
- 细化阶段:制定项目计划、配置各类资源、建立系统架构(包括各类视图)。
- 构造阶段:开发整个产品,并确保产品可移交给用户。
- 移交阶段:产品发布、安装、用户培训。
可重用部件组装模型 (构件集成模型)
构件(components)也称为组件,是一段实现一系列有确定接口的程序体,具有自己的功能和逻辑,能同其他构件集成起来协调工作。
该模型支持软件重用(Reusability) ,对缩短软件开发周期、降低项目成本有重要的现实意义。同时,建造符合某应用领域体系结构标准的构件,可以用来搭建分布式的、跨越不同操作平台(集成化软件开发环境(ISEE))的软件,扩展了软件的应用前景,促进了软件标准化、商品化的发展。
因此,在此基础上专家们又提出了“基于构件的软件工程”(CBSE)。 构件集成模型如下图所示:
软件体系结构被建立后,必须用构件去充实,这些构件可从复用库中获得,或者根据专门需要而开发。整个过程可以演化地进行,面向对象方法给予技术上的支持。
Sommerville提出基于组件开发有两种思路:
- 完成高层设计,对设计中的组件给出描述,以便找出可复用的组件,这些组件可在体系结构层次上加入或更详细的设计层次上加入。
- 先根据需求搜寻可复用组件,再将设计建立在获得的组件基础上。
- 这两种思路可结合起来。
第二章《可行性分析》
可行性研究
目的:
- 用最小的代价在尽可能短的时间内确定问题是否能够解决。
- 不是解决问题,而是确定问题是否值得去解决。
2.5 数据字典
DD (Data Dictionary>
数据字典的任务是:对于数据流图中出现的所有被命名的图形元素在字典中作为一个词条加以定义使得每一个图形元素的名字都有一个确切的解释。
数据流图和数据字典共同构成系统的逻辑模型
2.6 成本/效益分析
成本/效益分析的目的:
从经济角度分析开发一个特定的新系统是否划算,从而帮助客户组织的负责人正确地作出是否投资于这项开发工程的决定。
数据字典的内容
一般说来,数据字典应该由对下列4类元素的定义组成:
- 数据流
- 数据流分量(即数据元素)
- 数据存储
- 处理
分层 DFD 图的优点
- 便于实现---->>采用逐步细化的扩展方法,可避免一次引入过多的细节,有利于控制问题的复杂度;
- 便于使用---->>用一组图代替一张总图,方便用户及软件开发人员阅读。
2.4 数据流图
DFD ---- Data Flow Diagram
- 一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
- 在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程是系统逻辑功能的图形表示。
- 设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。
操作可行性
用户使用可能性时间进度可行性组织和文化上的可行性
技术可行性
度量一个特定技术信息系统解决方案的实用性及技术资源的可用性。
考虑的问题:
(1)开发风险分析
(2)资源分析
(3)相关技术的发展(现有技术能否实现新系统,技术难点、建议采用技术的先进性