目录
一、概述
1.1软件与软件危机
软件的概念
软件危机
1.2软件工程
软件工程的本质特性:
软件工程基本原理:
软件工程方法学:
软件工程方法学分类
1.3软件生命周期
1.4软件过程
瀑布模型
快速原型模型
增量模型
螺旋模型
喷泉模型
二、可行性研究
2.1可行性研究任务
2.2可行性研究内容
可行性研究步骤
2.3系统流程图
2.4数据流图与数据字典
数据流图(DFD)
数据流图画法
数据字典
2.5成本效益分析
成本估计
成本/效益分析步骤
三、需求分析
3.1需求分析任务
3.2与用户沟通获取需求方法
3.3分析建模与规格说明
3.4实体练习图、状态转换图
实体联系图(E-R图)
状态转换图
3.5其他图形工具
层次方框图
Warnier图
IPO图
3.6验证软件需求
四、总体设计
4.1设计过程
系统设计阶段
结构设计阶段
4.2设计原理
概念
耦合
内聚
4.3启发规则
4.4描绘软件结构的图形工具
层次图与IPO图
结构图
4.5面向数据流设计方法
五、详细设计
5.1详细设计的目的
5.2结构程序设计
5.3人机界面设计
设计人机界面常遇到的4个问题:
人机界面设计指南:
5.4过程设计工具
程序流程图:
盒图(N-S)
PAD图
判定表
判定树
PDL:
5.5程序复杂度定量度量
六、实现与测试
6.1实现
语言选择
编码风格
6.2软件测试基础
软件测试的准则
软件测试的方法
软件测试的步骤:
6.3单元测试
6.4集成测试
6.5确认测试
6.6白盒测试
6.7黑盒测试
等价划分法
边界值分析法
6.8调试
6.9软件可靠性和可用性
七、维护
7.1软件维护定义
7.2软件维护特点
7.3软件维护过程
7.4软件可维护性
7.5预防性维护
7.6软件再工程过程
八、面向对象方法学引论
8.1 面向对象方法学引论
8.2面向对象概念
8.3面向对象建模
8.4对象模型
8.5动态模型
8.6功能模型
8.7三种模型之间的关系
九、软件项目管理
软件是计算机系统中与硬件相互依存的另一部分,包括程序、数据及其相关文档的完整集合(软件=程序+数据+文档)
数据:使程序能够适当处理信息的数据结构
程序:能够完成预定功能和性能的可执行指令序列
文档:是开发、使用和维护过程程序所需要的图文资料
软件的特点:
软件危机的概念:在计算机软件开发和维护过程中所遇到的一系列严重问题
软件危机包含两方面内容:
软件危机的表现:
软件危机的原因:
消除软件危机的途径:
软件工程出现来源于软件危机
定义: 采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来,经济的开发出高质量的软件并维护它
把在软件生命周期全过程中使用的一整套技术方法的集合称为方法学,也称为泛型
软件工程方法学包括三个要素:方法、工具和过程
传统方法学(生命周期方法学):
面向对象方法学:
为了获得高质量软件所需要完成的一系列任务框架。通常用软件生命周期模型描述软件过程
主要包括:
将软件生存周期的各项活动规定为依照固定顺序连接的若干阶段工作,最终得到软件产品
特点:
快速建立可运行的程序,它完成的功能往往是最终产品功能的一个子集
优点:开发的软件通常满足需求、软件开发基本是线性过程
缺点:准确原型设计困难、不利于开发人员创新
先完成一个系统自己的开发,再按同样的开发步骤增加功能,如此递增下去直至满足全部系统需求
优点:短时间内可提交部分功能;逐渐增加产品功能,用户适应产品快
缺点:增量构件划分以及集成困难;容易退化为边做边改模型
在每个阶段之前都增加了风险分析过程的快速原型模型。看作增加了风险分析的快速原型模型
优点:利于把软件质量作为软件开发目标;减少测试;维护和开发不分开
缺点:风险评估困难
典型的面向对象软件过程模型。体现迭代和无缝的特性
研究目的:用最小的代价在最小的时间内确定问题是否能够解决
实质:系统分析和设计过程的大大压缩和简化,在较高层次上以较为抽象的方式进行系统的分析和设计过程
过程:
是一种描绘物理系统的图,用图形符号以黑盒子形式描绘物理系统的各部件,表达数据在系统各部件之间流动的情况。而不是对数据进行加工处理的控制过程
描述信息流和数据从输入到输出过程所经受的变换。没有任何具体物理部件,只是描绘数据在软件中流动和被处理的逻辑过程
是关于数据的信息集合,即对数据流图中包含的所有元素定义的集合
内容:数据流、数据流分量(数据元素)、数据存储、处理
用途:在软件分析和设计过程中给人提供关于数据的描述信息
目的:从经济角度分析系统的开发是否能够盈利
代码行技术:软件成本=每行代码的平均成本*行数
任务分解技术:每个任务的成本=人力*平均工资
模型:为了理解事物而对事物做出的一种抽象,是对事物的一种无歧义的书面描述
模型分类:
状态:系统的行为模式,包括初态、终态、中间形态
事件:是指在某个特定时刻发生的事情,即对系统从一个状态转换到另一个状态的事件抽象
表示方式:实心圆=初态、同心圆=终态、圆角矩阵=状态
表示方式:用树形结构的一系列矩阵框描述数据的层次结构
优点:随着层次的逐步惊喜,对数据结构的描绘也越来越详细
表示方式:用树形结构描绘信息的层次结构
优点:可以表明信息的逻辑组织。可以表明某类信息出现的条件或是否重复出现
表示方式:是输入、处理、输出图的简称,能够方便地描绘输入数据、对数据的处理和输出数据之间的关系
优点:简略描绘系统主要算法
从那些方面验证软件需求的正确性
验证软件需求的方法
总体设计又称为概要设计或初步设计
任务:
设计过程包括系统设计阶段和结构设计阶段
模块:能够单独命名,由边界元素限定的程序元素的序列,是构成程序的基本构件
模块化:把程序划分为独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求
抽象:抽出事物的本质特征而暂时不考虑细节
逐步求精:逐步揭露出底层细节
信息隐藏:指一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的。主要是指模块的实现细节
局部化:指把一些关系密切的软件元素物理地放得彼此靠近,有助于实现信息隐藏
模块独立
是对一个软件结构内不同模块之间互连程序的度量。
耦合强度取决于模块接口的复杂程度、通过接口的数据等。耦合性越高,模块独立性越弱
耦合分类(低->高):无直接耦合=>数据耦合=>标记耦合(特征耦合)=>控制耦合=>外部耦合=>公共耦合
用来衡量一个模块内部各个元素彼此结合的紧密程度
内聚分类(低->高):偶然内聚=>逻辑内聚=>时间内聚=>过程内聚=>通信内聚=>顺序内聚=>功能内聚
同其他模块强耦合的模块意味着弱内聚;
软件设计目标:强内聚、低耦合
层次图:用方框和连线表示,连线表示上下层的调用关系
IPO图 :层次图加编号
不仅描述调用关系,还描述传递的信息和调用模式
箭头代表调用过程中传递的信息。尾部空心代表数据,实心代表控制信息
调用模块分类:简单调用、循环调用、选择调用
面向数据流设计方法也称为结构化设计方法(SD)
数据流图分类:
变换分析:把具有变换流特点的数据流图映射成软件结构
目的:确定怎样具体地实现所要求的系统。得出对目标的精确描述
任务:
只用三种基本的控制结构就能实现任何单入口单出口的程序
三种基本控制结构:选择结构、顺序结构、循环结构
扩充的控制结构:Do-case多分枝和Do-UNTIL循环。
修正的结构程序设计:出了基本控制结构和扩展控制结构还是用BREAK结构
是接口设计的一个重要的组成部分
是描述程序处理过程的工具
又称为程序框图,它是历史最悠久使用广泛的描述软件设计的方法,然而它也是用的最混乱的一种方法
处于要有一种不允许违背结构程序设计精神的图形工具的考虑
它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易
当算法中包含多重嵌套的条件选择时,判定表却能够清晰地表示复杂的调节组合与应做的动作之间的对应关系
组成:
是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系
过程设计语言也叫伪代码
定量的度量详细设计模块的质量
McCabe方法:将程序图转化为程序流程图再计算复杂度
计算方法:
软件生命周期的编码和测试统称为实现
选择适宜的程序设计语言是减少变成的难度、减少程序测试量、容易维护的现实基础
软件测试:为了发现错误而执行程序的过程。分为编码阶段(单元测试)和测试阶段(各种综合测试)
黑盒测试法:将软件看作一个黑盒子,不考虑其内部结构和处理过程,只按照规格说明书的规定,测试软件是否能够正确接收输入数据,产生正确的输出数据。即程序是否正确的实现了其功能。又称为“功能测试”
白盒测试法:完全知道程序的内部结构和处理算法,因此可以将程序看作一个透明的百合子,根据程序内部的逻辑结构测试程序内部的主要执行通路是否能按照预定的要求正确工作。又称“结构测试”
测试依据:详细设计文档
测试技术(设计测试用例的方法):白盒测试技术
着重点:
目标:发现与接口有关的问题
实施者:独立的测试机构或第三方人员
集成方法:非渐增测试、渐增测试(自顶向下集成、自底向上集成)
自顶向下与自底向上相结合的方法:上层模块用自顶向下,下层模块用自底向上
回归测试:重新执行已经做过测试的某个子集,以保证程序的变化没有带来非预期的副作用
目标:验证软件的有效性
验证:为了确保软件正确的实现了某个特定要求而进行的一系列活动
确认:为了保证软件确实满足了用户要求而进行的一系列活动
测试用例:测试输入数据和预期的输出结果
测试方案:测试目的、测试用例的集合
控制结构测试:基本路径测试、条件测试、循环测试
输入等价类和输出等价类的边界就是应该做中测试的程序边界情况。选取的测试数据应该刚好等于、刚好小于、刚好大于边界值
是在测试发现错误之后排除错误的过程
方法;蛮干法、回溯法、原因排除法
结果:找到了原因,然后改正和排除;没有找到原因,猜测一个原因,并设计附加测试用例来验证这个假设
软件可靠性:程序在给定时间间隔内,按照规格说明书的规定成功运行的概率
软件可用性:程序在给定的时间点,按照规格说明书的规定成功运行的概率
软件维护: 是在软件已经交付使用之后,为了改正错误或满足新的需要而修改软件的过程
分类:
结构化维护与非结构化维护差别巨大
非结构化维护:唯一成分是程序代码,那么维护活动从艰苦地评价代码开始
结构化维护:有完整的软件配置再,那么维护工作从评价设计文档开始
维护的代价高昂
维护的问题很多
维护人员理解、改正、改动或改进这个软件的难易程度
决定软件可维护性的因素:
为了提高未来的可维护性或可靠性,主动地修改软件
预防性维护也称为软件再工程
按人类习惯的思维方式,以现实世界中客观存在的对象为中心来思考和认识问题
采用的思想方法与原则:抽象、集成、封装分类、聚合等
要点:
面向对象=对象+类+继承+通信
优点:
略
模型:是一组图示符号和组织这些符号的规则,利用它们来定义和描述问题域中的属于和概念
UML中,对象模型通常由“类图”组成
类和类之间的联系称为关系。通常分为:关联、繁华、以来和细化四种
用来描述系统与事件相关的动态行为,从对象的“事件”和“状态”的角度出发,表现对象经过相互作用后,随时改变的不同运算顺序
动态模型包括“状态图”和“事件追踪图”
数据流图和用例图来描述功能模型
用例模型:
三个模型从三个侧面描述了索要开发的系统,它们相互补充、互相配合。使我们对系统的认识更全面
略