绪论
基本目标:高质量&高生产力。表现在
规范软件开发的行为,提高软件的可维护性,可移植性和可靠性
提供许多科学的方法,最佳实践和工具,帮助人们高效地,系统地,正确地构造软件
软件危机的表现,结果,影响
因此人们开始思考软件的问题在哪
故有结果
软件的特性:软件是逻辑的,知识性的智力产品,是一种对物理世界的抽象。具有创造性,技术更新快,已修改,需求不断变化,非标准化等特征。
软件配置包括:程序,文档,数据
软件工程:以工程的原理,原则和方法进行软件开发。
从管理和技术两方面研究如何更好的开发和维护计算机软件
开发:软件开发方法学
管理:软件经济学,软件心理学
软件工程方法学三要素:方法,工具,过程
方法:传统方法学(生命周期方法学)和面向对象方法学(数据为主线)
工具:自动化或半自动化的工作环境
过程:一系列任务框架,定义任务步骤
软件生命周期:软件定义,软件开发,软件维护
软件定义:问题定义,可行性研究,需求分析
软件开发:系统设计——总体设计,详细设计
系统实现——编码和单元测试,综合测试
软件维护:压缩简化的定义开发过程,使软件持久的满足用户的需求
软件过程
通常使用生命周期模型描述软件过程
瀑布模型,快速原型模型,增量模型,螺旋模型,喷泉模型,统一软件开发模型,敏捷过程与极限编程,微软过程
详见下图
可行性分析
任务:最小的代价,最短的时间内,确定问题是否值得被解决
技术,经济,社会因素研究论证
本质是一次压缩简化的系统分析和设计过程
工具:系统流程图,数据流图,数据字典
系统流程图:概括性地描绘物理系统,表达数据在各部件之间的流动情况
数据流图:描述数据所经历的变换,逻辑功能的图形表示。源点或终点,处理,数据存储和数据流
需求分析
任务:确定系统必须完成哪些工作,对目标系统提出完整,准确,清晰,具体的要求,写出软件需求规格说明书
相关人员:分析员与用户
过程:需求获取和需求规约
结构化分析方法——软件需求分析方法
结果:
ER图(实体——联系图):数据模型
实体,属性,联系
状态转换图+有穷状态机
层次方框图:树形,描述数据
warnier图:树形,信息的逻辑组织
IPO图:输入。处理,输出
验证需求:一致性,完整性,现实性,有效性
习题
略,见ppt
总体设计
任务:概括的说,系统怎么实现
分为:系统设计和结构设计
系统结构
结构设计是以模块为基础的
需求分析时划分层次,设计阶段划分模块
原则:模块化,抽象,信息隐蔽,模块独立
独立性:耦合和内聚
工具:层次图,HIPO图,结构图
层次图:模块+调用关系
HIPO图:层次图+IPO图
结构图:箭头表示调用关系
详细设计
基本控制结构:顺序,循环,选择
减少使用goto
设计工具:
程序流程图
盒图
PAD图
判定表
判定树
过程设计语言PDL
面向数据结构的程序设计方法
Jackson图
Jackson程序设计方法:数据结构表示,输入输出对应关系,确定程序结构图,分配操作和条件,用伪码表示程序
程序复杂程度的定量方法:Mccabe方法,Halstead方法
参数:规模,难度,结构,智能度
McCabe——程序的环形复杂度,流图
复杂度计算:
区域度+1
边-节点+2
判定节点+1
Halstead方法——运算符+操作符
预测长度
预测错误
编码与测试
选择程序设计语言
源程序文档化:标识符的命名,安排注释,程序的视觉效果
数据说明
语句构造——简单而直接
软件测试
测试应从小到大
测试用例由输入数据和预期的输出数据组成,输入应包括合理与不合理
静态测试:人工测试,计算机辅助静态分析方法
动态测试:黑盒测试,白盒测试
软件测试贯穿软件定义与开发的整个期间
单元测试
集成测试:渐增和非渐增
确认测试
alpha测试和beta测试
逻辑覆盖测试
基本路径测试
等价类划分法
边界值分析法
缺省值,空值,零值
调试
软件可靠性与可用性