第一讲,概述
一 软件危机
概念:在计算机开发和维护过程中出现的一系列严重问题
软件危机的表现
1.软件无法维护(很多人写很多行程序,但是发行的版本都只是之前版本的修正)
2.工期拖延,成本超支
3.软件质量无法保证
软件危机爆发的原因
1.客户:需求不明确;需求变化
2.软件:软件需求量快速增加;软件复杂度增加
3.开发人员:轻视软件维护;认为软件开发就是写程序并没有设法使之运行;没有完整准确的认识就匆忙着手写程序
消除软件危机的途径
1.改变认识观念
软件=程序+数据+文档
2.借鉴前人成果
3.推广实践经验
4.开发和使用更好的软件工具
二 软件工程
软件工程的本质特性
1.关注于大型程序的构造
2.软件工程的中心课题是控制复杂性
3.软件经常变化
4.开发软件效率很重要
5.和谐地合作是开发软件的关键
6.有效地支持它的用户
7.由具有一种文化背景的人替另一种文化背景的人
软件工程7条基本原理
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制(需求评审)
4.采用现代程序设计技术
5.结果能清楚地审查(如产品标准,完成期限,总目标)
6.开发小组的成员尽量少而精(人多开发通信成本会增加)
7.承认不断改进软件工程实践的必要性
三 软件工程方法学
概念:在软件周期全过程中使用的一整套技术方法的集合
三要素:
1.方法(完成软件开发各项任务的技术方法)
2.工具(软件工程支撑环境)
3过程(一系列任务框架,规定了完成各项任务的工作步骤)
1.传统方法学
也称生命周期方法学或结构化泛型,把软件生命周期的全过程依次划分为若干阶段,软后顺序完成每个阶段的任务
审查两阶段之间的文档
审查目的:前一阶段的结束,后一阶段的开始
文档作用:1.通信工具;2.备忘录
优点
1.降低开发难度;2.提高软件质量
缺点
当软件规模庞大,需求模糊且会随时间变化时,开发往往不成功
使用传统方法开发出来的软件维护起来仍然很困难
原因
结构化技术把 数据 和 操作 认为地分离成两个独立部分会增加软件开发和维护的难度,因为数据和对数据的处理是密切相关的
2.面向对象方法学
把数据和行为看成同等重要;以数据为主线,把数据和对数据的操作紧密结合
四 软件工程发展历程
1.可持续演化的软件理论
2.软件的智能化开发方法
3.软件定义的云计算平台
4。人机融合的软件系统
5.智能系统中的软件技术
第二讲 软件过程和生命周期模型
软件过程
问题定义(要解决什么问题)--可行性研究--需求分析(用户,系统分析员,软件开发人员)--总体设计(概要设计)--详细设计(模块设计)--编码和单元测试--综合测试(如集成测试和验收测试)--软件维护(改正性维护,适应性维护,完善性维护,预防性维护)
瀑布模型
唯一被广泛采用的生命周期模型
特点
1.
顺序性:必须等前一阶段工作完成后才能开始后一阶段的工作
依赖性:前一阶段的输出文档是后一阶段的输入文档,只有前一阶段的输出文档正确,后一阶段的工作才能获得正确的结果
2.推迟实现
清楚区分逻辑设计与物理实现,尽可能推迟程序的物理实现
3.质量保证
(1)阶段文档
(2)文档评审
意义
1.让软件开发过程有序可控
2.让分工协作变成可能
3.让软件质量有了保障
改进
优缺点
优点:提供按阶段划分的检查点;提供可使软件开发过程有共同指导的模板;当前阶段完成后只需要关注后续阶段;有利于大型软件开发过程中人员组织和管理
缺点:产生大量文档工作量大;无法适应用户需求的频繁变化
应用场景
1.适用于具有关键系统的大型项目
如:桥梁、工厂和道路建设、飞机制造、银行业、国防领 域、卫生保健系统、核系统、企业级应用程序(例如客户 关系管理 (CRM)、人力资源管理系统 (HRMS)、供应链管理 系统 (SCMS)、库存管理系统 (IMS) 和销售点 (POS) 系统)
2. 适用于需求明确稳定、实现需求的手段比较清晰的软件开发项目
V模型
优点
1.测试在开发的早期阶段进行,可以防止缺陷向下流动并有助于在早期发现缺陷
2.提高软件质量
3.更正和返工的成本降低
缺点
1.初次投资更多(因为测试团队一开始就参与)
2.缺乏灵活性,如果需要更新需求文档,还需要更新测试文档
3.不建议用于短期项目,因为每个阶段都要审查
4.导致进一步的文档工作
应用场景
1. 中小型项目,定义明确,规范设置,宜采用V型布局。
2. 如果软件开发和测试人员有足够的技术工具和必要的 技术专长,则应使用 V 模型。
快速原型模型
原型用途:获知用户的真正需求
本质:快速
优点
减少需求不明确带来的开发风险;降低培训用户的难度;有利于提高用户满意度和进行短期推广
缺点
对开发人员的创造力和想象力有要求;快速建立起来的系统和连续的修改可能会导致产品质量低下
应用场景
小型或中等规模的交互式系统,大型系统的某些部分。 例如:用户界面,生命周期较短的系统。
螺旋模型
使用原型及其他方法来尽量降低风险
理解:把它看作在每个阶段之前都增加了风险分析过程的快速原型模型
螺旋模型是风险驱动的,这是优势,也可能是弱点
适用场景
强调了其他模型所忽视的风险分析,所以适合于大型复杂的系统
增量模型
为了适应用户逐步细化需求的形成过程,以减少软件开发过程中的返工
根据用户的需求增加或改变构件,然后将其集成到一起,而不必影响整个系统
优点
1.有利于增加客户对系统的信心
2.降低系统失败风险
3.提高系统可靠性
4.提高系统的稳定性和可维护性
缺点
1.增量的颗粒度难以选择
2.过程控制失去整体性
3.软件需具备开放式的体系结构
喷泉模型
分析一点,设计一点,并不要求一个阶段彻底结束
对象驱动的过程,对象是所有活动作用的实体
统一软件开发过程RUP
Rational Unified Process基于UML的一种面向对象开发模型
敏捷软件开发
极限编程(XP):把好的开发运用到极致,多应用于软件需求模糊的场合。降低因需求变更而带来的成本
斯克拉姆方法(Scrum):强调自组织的软件开发 团队、开发人员与业务人员的协 同和不超过一个月的迭代。
水晶方法(Crystal):是最具轻量级、最 灵活的软件开发方法之一。 它是由 Crystal Clear 、 Crystal Yellow 、 Crystal Red 等几种具有独特特征的敏 捷方法组成。
微软解决问题框架(Microsoft Solution Framework,MSF) 1.微软过程准则 2.微软软件生命周期 (1)规划阶段 (2)设计阶段 (3)开发阶段 (4)稳定阶段 (5)发布阶段 3.微软过程模型
第三讲 可行性研究
定义what:
可行性研究也被称为可行性分析,是在调查的基础上,对拟实施软件项目
技术上的先进性、适用性, 经济上的合理性、营利性, 实施上的可能性、风险性
进行全面科学的综合分析 为项目决策提供客观依据的研究活动
how:
(实际相当于简化系统的分析和设计过程)
1.判定原定的系统规模和目标是否现实
2.值不值得开发
意义why:
1.节省资源
减少软件开发的盲目性,节省人力物力财力
2.降低风险
减低后续的需求分析,减少软件研发的失误风险,提高设计工作效率
任务
最根本任务:对以后的行动方针提出建议
需要的时间长短:取决于工程规模;
成本:预期工程总成本的5%-10%
结论
可以(按原计划);基本可行(做必要修改);不可行(不能立项)
目的
内容
1)技术可行性
开发风险分析
资源分析
相关技术的发展(现有技术能否实现新系统,技术难点,建议采用技术的先进性)
2)经济可行性
开发运行的成本/效益
价值和成本的关系
3)操作可行性(实施可行性)
研究在确定环境中,新软件有效进行业务处理并被用户方便使用的程度和能力
用户使用可行性
时间维度可行性
组织和文化可行性
4)其他可行性
社会可行性(法律可行性)
市场可行性:分析市场发展历史和发展趋势,判断本产品处于市场什么发展阶段
步骤
系统流程图
概括地描绘物理系统的工具;表达 数据 在系统各部件之间流动的关系
用 图形符号 以 黑盒子 形式描绘组成系统的每个部件
图形符号
数据流图DFD
描绘信息流和数据从输入移动到输出过程中经受的变换
基本符号
1.有时数据的源点和终点相同,再重复画一个同样的符号表示数据的终点
2.一个处理框可以代表一系列程序,单个程序或程序的一个模块
3.可以表示一个文件,文件的一部分,数据库的元素或记录的一部分等;数据可存储在磁盘,磁带,穿孔卡片及其他任何介质上
4.数据流图描绘所有可能的数据流向而不描绘出现某个数据的条件
层级结构
例子
假设一家工厂的采购部每天需要一张定货报表,报表 按零件编号排序,表中列出所有需要再次定货的零件。对 于每个需要再次定货的零件应该列出下述数据:零件编号, 零件名称,定货数量,目前价格,主要供应者,次要供应 者。零件入库或出库称为事务,通过放在仓库中的CRT终 端把事务报告给定货系统。当某种零件的库存数量少于库 存量临界值时就应该再次定货。
数据字典
定义:
数据流图中包含的所有元素的定义的集合
作用:
在软件分析和开发过程中提供关于数据的描述信息
数据流图和数据字典共同构成了系统的逻辑模型
组成:
1)数据流
2)数据流分量(即数据元素)
3)数据存储
4)处理
内容:
一般信息:姓名,别名,描述
定义:数据类型,长度,结构
使用特点:值的范围,使用频率,使用方式--输入,输出,本地,条件值等
控制信息:来源,用户,改变权,使用权
分组信息:父结构,从属结构,物理位置--记录,文件和数据库等
定义
=:等价于(定义为)
+:和(连接两个分量)
[]:或(各分量之间用 | 隔开)
{}:重复(即重复花括号内的分量)
():可选(即圆括号内的分量可有可无)
用途
成本效益分析
1.代码行技术
简单定量估算:把开发每个软件功能的成本和实现这个功能用的源代码行数联系起来
总成本=源代码行数*每行代码的平均成本
COCOMO模型估算
2.任务分解技术
3.自动估计成本技术
采用自动估计成本的软件工 具可以减轻人的劳动,并且使得估计的结果更客观。
成本效益分析的方法
1.估计开发成本,运行费用和新系统将带来的经济效益
运行费用取决于系统的操作费用(操作员人数,工作时间, 消耗的物资等等)和维护费用。
经济效益因使用新系统而 增加的收入加上使 用新系统可以节省 的运行费用。
软件寿命:总的效益和生命周期的 长度有关,所以应该合理地估计。一般假设为5年