目录
第一章:概述
1.软件危机的表现原因
2.常见的软件开发方法包括:
3.软件工程基本原则
4.软件工程三要素
5.设计模式的分类
6.针对变换型数据流设计步骤
7.针对事务型数据流设计步骤
第二章:软件过程
1.软件生命周期
2.软件过程模型
(1)瀑布模型(特点:带反馈)
(2)快速原型模型
(3)增量模型(判断标准:系统是否被模块化)
(4)螺旋模型
(5)喷泉模型
第三章:可行性研究及需求分析
1.需求分析常用方法
2.需求分析步骤
3.可行性研究步骤
4.需求分析的任务
第四章:结构化分析
1.数据流图(简称DFD图)
2.环境图(顶层数据流图)
3.数据流图的分解
第5章:软件设计
1.软件设计的原则
2.软件设计包括
3.UML具有以下几个特点:
第6章:结构化设计
1.表示软件结构的图:
(1)层次图
(2)结构图
2.体系结构设计
第7章:面向对象方法与UML
1.面向对象方法
2.统一建模语言UML
3.动态建模机制
第8章:面向对象分析
1.面向对象分析原则:
2.面向对象建模:
3.例题:
(1)编写脚本
(2)画UML顺序图
(3)画状态图
(4)总行状态图
(5)分行状态图
第10章 面向对象设计
1.设计原则
2.面向对象结构设计步骤
3.系统设计
第12章 :软件测试概述
1.软件测试的原则
2.分类
第13章 :软件测试方法与过程
1.黑盒测试
2.白盒测试
3.集成测试
表现:软件危机是指人们在开发软件和维护软件过程中所遇到的一系列的问题。
软件开发的过程中,不能按时完成任务、产品质量得不到保证、工作效率低下和开发经费严重超支等现象。
原因:(软件本身的特点及开发方法)
(1)忽视软件开发前期的调研和需求分析工作
(2)缺乏软件开发的经验和有关软件开发数据的积累,使得开发计划很难制定
(3)开发过程缺乏统一的、规范化的方法论指导
(4)忽视与用户、开发组成员间的及时有效的沟通
(5)文档资料不规范或不准确。导致开发者失去工作的基础,管理者失去管理的依据
(6)没有完善的质量保证体系
(7)忽略测试的重要性和不重视维护
目标:在给定成本、进程的前提下、开发具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性、可互操作性并满足用户需要的软件产品。
(1)结构化方法
(2)面向数据结构方法
(3)面向对象方法
(4)形式化方法
(1)模块化(2)抽象(3)逐步求精(4)信息隐藏(5)复用性设计(6)灵活性设计
方法、工具、过程
(1)创建型模式
(2)结构型模式
(3)行为型模式
输入数据、变换中心、输出数据
找出事务中心、接收数据、处理路径
从设计该产品,到软件需求的确定、软件设计、软件实现、产品测试与验收、投入使用及版本更新,到该产品被市场淘汰。
瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、基于组建的开发模式、统一软件开发过程模型以及敏捷模型与极限编程。
具有不可回溯性,可以一次性获取到全部需求,软件项目风险较低。
快速搭建,再根据用户需求进行修改
开发人员不需要一次性地把整个软件产品提交给用户,而是可以分批次进行提交
将每个模块作为一个增量组件,从而分批次地分析、设计、编码和测试这些增量组件。
风险较大地大型软件项目开发地过程模型,将风险扩展到各个阶段。
将瀑布模型与快速原型模型结合起来,并且加入了这两种模型忽略了地风险分析。
开发过程:制定计划、风险分析、实施工程和客户评估。
适用于:
– 支持需求不明确、特别是大型软件系统的开发,
– 支持面向过程、面向对象等多种软件开发方法
喷泉模型主要适用于面向对象的软件项目的开发。
各阶段之间没有明显的界限,而且常常重复、迭代地进行。
可行性研究:不是解决问题,而是确定问题是否值得去解决
可行性研究内容:战略可行性、操作可行性、计划可行性、技术可行性、社会可行性、市场可行性、经济可行性、风险可行性。
(1)功能分解方法:将一个系统看成是由若干功能模块组成。
(2)结构化分析方法:由数据流图和数据词典构成并表示。它是一种面 向数据流的需求分析方法。
(3)信息建模方法:使用E-R图,其基本要素由实体、属性和关系构成。
(4)面向对象的分析方法:
•描述系统静态结构的对象模型
•描述系统控制结构的动态模型
•描述系统计算结构的功能模型
四个步骤:需求获取、需求建模、需求描述(即编写 SRS)和需求验证
(1)明确系统目标
(2)分析研究现行系统
(3)设计新系统高层逻辑模型
(4)获取可行方案
(5)撰写可行性研究报告
(1)确定系统的运行环境要求
(2)功能性、非功能性需求
功能建模:按照软件内部数据传递和变换的关系,自顶向下逐层分解。
数据流图中的表示符号
环境图地作用是确定系统在其环境中地位置
实例:
假设一家工厂的采购部里的采购员每天需要订货系统产生一张订货报表。报表按照零件编号排序,表中列出了所有需要再次订货的零件。对于每个需要再次订货的零件应该列出下述信息:零件编号、零件名称、价格、主要供应商、次要供应商。2、零件入库或出库称作事务,仓库管理员通过仓库的终端把事务报告给订货系统。当某种零件的库存少于库存量临界值时就应该再次订货了。
数据建模:用实体-关系图来描述(E-R图)
数据模型E-R图——仓库管理系统实例
•请为某仓库的管理系统设计一个ER模型。该仓库管理系统主要管理零件的订购和供应等事项。仓库管理系统向工程项目供应零件,并且根据需要向供应商订购零件。
•实体类型“零件”的主要属性是:零件编号,零件名称,颜色,重量。实体类型“工程项目”的属性主要是:项目编号,项目名称,开工日期。实体类型“供应商”的属性主要有:供应商编号,供应商名称,地址。
行为建模:它描述系统状态和事件,适合用来描述实时系统。
行为模型状态转换图——图书馆系统实例
图书馆系统里的图书主要有这几种状态:新上、可借阅、已借出、已丢弃这四种状态,触发这些状态进行转换的事件有分类、借阅、归还、续借、破损、遗失等。
数据字典:以一种系统化的方式定义在分析模型中出现的数据对象及控制信息的特性
数据字典——实例
航空公司名称=2{字母}8
航班号=3{十进制数字}3
字母="a"…“z”
十进制数字="0"…“9”
起点=终点=1{汉字}5
起飞时间=降落时间=时+分
(1)模块化(2)抽象(3)逐步求精(4)信息隐藏(5)复用性设计(6)灵活性设计
模块化:就是把系统或程序划分为独立命名并且可以独立访问的模块,每个模块完成一个特定的子功能。
模块化注意:规模适中、提高独立性低耦合、高内聚、加强保护性。
模块的三个基本属性:功能、逻辑、状态。
耦合:模块之间相互连接的紧密程度的度量。
内聚:一个模块内各个元素彼此结合的紧密程度用内聚来度量。
(1)软件设计
(2)数据库结构设计
(3)用户界面设计
(1)统一标准
(2)面向对象
(3)可视化,表达能力强大
(4)独立于过程
(5)容易掌握使用
面向对象分析原则:
(1)定义有实际意义的对象
(2)模型描述要规范、准确
(3)共享性
(4)封装性
Jackson图
3种基本类型:
顺序型结构、选择型结构(" 。“表示选一个)、循环型结构(” * "表示重复)。
例子:将高考后考生的基本情况文件和考生高考成绩文件合并
成一个新文件。
从已知条件可以得出如下的三个基本文件结构图:
step1:画出输入,输出结构的Jackson图。
step2:从输入输出的数据结构中找出有对应关系的数据单元。
step3:导出程序结构的Jackson图。
接口设计
过程设计
图形设计符号:流程图、N-S图、PAD图等
流程图:
分类:顺序型、选择性、先判定型循环、后判定型循环
N-S图
又称盒图
PAD图
又称分析图,自顶向下,逐步求精
实例:计算n阶乘的程序流程图
实例:计算n阶乘的N-S图。
实例:计算n阶乘的PAD图
对象、类、消息、类的特性(抽象、继承、封装、多态、重载)、包。
注:类是对象的抽象,对象是类的实例。
面向对象的实施步骤
(1)面向对象分析
(2)面向对象设计
(3)面向对象实现
(4)面向对象测试
概念:UML是一种标准的图形化建模语言,它是面向对象分析与设计的一种标准表示。
应用范围:需求分析阶段到系统完成后的测试阶段都能起到重要作用
用例图
用例、参与者、之间的关系
参与者之间可以存在泛化关系,类似的参与者可以组成一个层级结构
参与者与用例之间的关系——关联
用例之间的关系有3种
(1)包含:带箭头的虚线,虚线上有《include》
(2)扩展:带箭头的虚线,虚线上有《extend》
(3)泛化:带三角形实线,泛化描述一般与特殊(父用例子用例)
包含关系:
扩展关系:
泛化关系:
例:建立一航空公司的机票预定系统,让客户通过电话或网络买票、改变订票、取消订票、预定旅馆、租车等等。
类图
类与类之间的关系:
关联(相互连接)、依赖(一个类依赖于或使用另一个类)、泛化(一个类是另一个类的特殊情况)、实现。
关联
依赖
实现
是指一个类描述了另一个类保证实现的合约。子类与父类关系是泛化,类与接口关系是实现。
顺序图
状态图
活动图
带泳道地活动图
面向对象分析的三种模型:
对象模型、动态模型、功能模型
(1)定义有实际意义的对象
(2)模型的描述要规范、准确
(3)共享性
(4)封装性
对象模型(核心)、动态模型、功能模型
(1) 模块化
(2) 抽象化
(3) 信息隐藏
(4) 低耦合
(5) 高内聚
(6) 复用性
(1)建立软件体系结构图
(2)软件体系结构设计
(3)对各个子系统进行设计
(4)对象设计及优化
软件测试是为了发现错误而执行程序的过程,它并不可能找出所有的
错误,但是却可以减少潜在的错误或缺陷
大的功能模块采用黑盒测试,小的构件采用白盒测试
把被测试的软件系统看成是一个黑盒子,并不需要关心盒子的内部结构和内部特性,而只关注软件产品的输入数据和输出结果。
黑盒着重测:软件功能
方法:
(1)等价类划分法
(2)边界值分析法(常用)
(3)错误推测法
(4)因果图法
关注软件产品的内部细节和逻辑结构,即把被测的程序看成是一个透明的盒子。
白盒测试,有时也称为玻璃盒测试,它关注软件产品的内部细节和逻辑结构
方法:
(1)逻辑覆盖测试方法
语句覆盖
分支覆盖
条件覆盖
分支-条件覆盖
条件组合覆盖
路径覆盖
有效等价类:对程序规格有意义、合理的输出的集合
无效等价类:对程序规格无意义、不合理的输出的集合
(2)基本路径测试
(测试用例尽可能多的覆盖有效等价类,无效等价类输入刚好超过的数值)
计算流图的环形复杂度
V(G)=E-N+2
N:边数
G:结点
独立路径:
至少包含一条在定义该路径之前不曾用过的边
例:
假设输入的取值范围是1000 < year < 2001,请使用基本路径测试法为变量year 设计测试用例,使其满足基本路径覆盖的要求。
(1)画出流图
(2)计算环形复杂度
V(G)=4
(3)确定独立路径
(4)设计测试用例执行基本集合中地路径
路径1:1-2-4-6-8 输入:1600输出:1
路径2:1-2-4-7-8输入:1800输出:0
路径3:1-2-5-8 输入:1996输出:1
路径4:1-3-8输入:1999输出:0
案例:黑盒白盒测试
自顶向下的集成方式的主要优点:
(1)可以及早地发现和修复模块结构图中主要控制点存在的问题
(2)能较早地验证功能的可行性
(3)最多只需要一个驱动模块,减少驱动模块的开发成本
(4)支持故障隔离
自顶向下的集成方式的主要缺点:
是需要开发和维护大量的桩模