软件工程:第一章笔记

第一章 软件工程概述

1.1软件工程

1、软件工程定义:是指导计算机软件开发和维护的一门工程学科。

2、软件的定义:软件是由程序、数据和文档组成的集合。

​ 程序:是按事先设计的功能和性能要求执行的指令序列

​ 数据:使程序能正常操纵信息的数据结构

​ 文档:是与程序开发,维护和使用有关的图文资料

3、软件工程三要素:方法、工具、过程

1.2

软件开发最重要的是,考虑到客户需求以及社会发展的需要,不能脱离实际

1.3软件危机

1.3.1软件危机

软件危机:是指在计算机软件的开发和维护过程中所遇到的一系列严重问题

涉及:

如何开发软件

如何维护数量不断膨胀的已有软件

1.3.2面临的问题

应用的扩大:软件需求量增加,规模增加

软件的复杂度增加,数万行,数百万行

人员数量的增加,组织、协调、通讯、管理

项目超出预算,花费越来越多,完成超期
程序运行错误 用户新的需求 硬件, O S 的更新 } = 程序 \left. \begin{matrix} 程序运行错误 \\ 用户新的需求\\ 硬件,OS的更新 \end{matrix} \right\}=程序 程序运行错误用户新的需求硬件,OS的更新 =程序

1.3.3产生软件危机的原因及应对

1.3.3.1**客观原因:**软件本身的特点

a)软件不同于硬件,它是计算机系统中的逻辑部件

1、产品开发和生产过程上的不同:

硬件设计与制造并重,制造需要质量管理

软件重开发,需要质量管理,生产只是复制

2、产品维护不同:
在这里插入图片描述

b)软件规模跨度大

软件不同于一般程序,复杂性将随程序规模的增加而呈指数上升。

c)软件的分类(按功能)

系统软件、支撑软件、应用软件

1.3.3.2**主观原因:**软件开发与维护的方法不正确

软件开发无计划行(成本和进度估计不足)

软件需求不充分(用户,开发人员)

软件开发过程没有统一、公认的规范

软件产品测试阶段检测不充分(大量用户涌入,极限负荷,自动刷票,买票时间错误)

缺乏有效的大型软件项目管理

轻视软件维护

  • 消除软件开发人员对软件产品的个性影响的措施可能为:

    制定编码规范——统一代码的编写习惯与命名习惯(在参考文档中提供范本)。

    统一需求表达方式(UML)——学习并应用UML,用文字与图表来表达需求与设计,让所有开发人员有统一认识,特别要理解团队的习惯性概念与假定。

    制定界面规范——统一界面表现的字体,排列习惯,操作习惯等(在参考文档中提供范本)。软件常用工具积累(Utility)——归类整理常用软件工具程序,提升开发速度与质量。

    开发并应用通用软件基础设施——发展应用框架通用基础设施,不断复用前人的开发成果,降低应用难度,降低维护成本。

    提供开发示例——新人入职时使用开发示例培训,统一开发习惯与思维模式。

1.3.3.3清除软件危机的途径

(1)客观——正确认识计算机软件

软件=程序+数据+文档

(2)主管——软件工程

把软件当成一种工业产品,采用工程化的原理和方法对软件进行计划、开发和维护。

软件的文档:

管理人员:可行性研究报高,项目开发计划,模块开发卷宗,开发进度月报,项目开发总结报告; 开发人员:可行性研究报告,项目开发计划,软件需求说明书,数据要求说明书,概要设计说明书,详细设计说明书,数据库设计说明书,测试计划,测试分析报告; 维护人员:设计说明书,测试分析报告,模块开发卷宗; 用户:用户手册,操作手册。

1.4软件开发模型

  • 瀑布模型
  • 快速原型模型
  • 增量模型
  • 螺旋模型
  • 基于构件的开发方法
  • 净室模型
    在这里插入图片描述

软件有生命周期(生存周期):是指从制定软件计划开始,经过软件需求分析、软件设计、编码、软件测试(开发)、运行和维护直到软件被弃的全过程。

1.4.1瀑布模型

也称典型生存周期模型或线性顺序模型
在这里插入图片描述

① 计划阶段:目标定义+可行性研究+软件计划

② 开发阶段:需求分析+软件设计+编码+测试

③ 运行阶段:维护

1.4.1.1计划时期

a、问题定义:确定系统总目标

文档:目标和范围说明书

b、可行性研究:时间,投资,解决方案

文档:可行性论证报告

c、软件计划:制定软件计划,分配角色

文档:软件计划

1.4.1.2开发阶段

设计(需求分析+软件设计)+实现(编码+测试))

a、需求分析:用户对软件系统的全部需求

文档:需求规格说明书
在这里插入图片描述

文档内容:软件的功能需求、性能需求、环境和外部接口、约束条件

b、软件设计:将需求–>软件的表现形式

1、总体设计

软件的总体结构

在这里插入图片描述
在这里插入图片描述

数据设计

字段名数据类型数据长度描述含义
ACHIEVEMENTIDINT11不允许为空,主键成绩ID号
STUDENTIDCHAR12不允许为空,外键学号
COURSEIDVARCHAR10不允许为空,外键成绩的课程号
COURSENUMBERINT11不允许为空成绩的课序号
MARKINT11允许为空分数
MARKTYPEVARCHAR6不允许为空成绩类型
HAVEIFVARCHAR2允许为空是否已有成绩

接口设计

2、详细设计(流程图)

在这里插入图片描述

详细设计每个模块

文档:设计文档(软件的总体结构,数据设计,接口设计,详细设计)

c、编码:设计–>产生计算机源程序

d、测试:发现错误

单元测试,集成测试,确认测试,系统测试

文档:测试报告:测试计划+测试用例+测试结果

测试用例:

成绩修改模块测试1)测试目的:测试修改成绩模块的各个选项是否已经填好,若有错误或为空,则提示错误信息2)测试方法和测试软件: 1) 测试方法:黑盒测试 2) 测试软件:RTF3)测试用例

测试页面功能输入期望结果说明
marUpdate.jsp成绩修改成绩为空成绩:提示成绩为空成绩为1-100的整数
正确的成绩成绩:80转到相应的页面成绩为1-100的整数
错误的成绩成绩:说道提示成绩格式错误成绩为1-100的整数
1.4.1.3运行时期

软件维护:使软件在整个生存期内满足用户的需求,并延长寿命

改正性维护:诊断和改正使用过程中发现的错误

适应性维护:修改软件以适应环境的变化

完善性维护:根据用户要求改进或扩充软件使它更完善

预防性维护:修改软件为将来维护活动预先做准备
在这里插入图片描述

1.4.1.4瀑布模型特点

① 文档驱动,阶段间具有顺序性和依赖性

前—阶段的工作完成之后,才能开始后一阶段的工作

前一阶段的输出文档就是后一阶段的输入文档

前一阶段输出文档正确,后一阶段工作才能获得正确的结果

② 推迟实现

区分逻辑设计与物理设计尽可能推迟程序物理实现

③ 质量保证

每个阶段都必须完成规格的文档,没有交出合格的文档就是没有完成该阶段的任务。

每个阶段结束前都进行评审,若确认,则进行下一阶段,否则返回前项。尽早发现问题改正错误。

1.4.1.5瀑布模型存在的问题

基于准确需求的假设

只有当分析员能够做出准确的需求分析时,才能得到预期的正确结果。

顺序性太过理想化,时文档驱动:

在对软件产品试用前,用户只能从静态的文档来了解产品,要用户完全精确和正确的对一个软件产品提出确切的需求,实际上是不可能的。

瀑布模型适合

软件需求比较明确,需求反复性小,开发技术比较成熟的场合

1.4.2快速原型模型

1.4.2.1原型

1.什么是原型:

原型(prototype)即把系统主要功能和接口通过快速开发制作为“软件样机”,以可视化的形式展现给用户,及时征求用户意见,从而明确无误地确定用户需求。同时,原型也可用于征求内部意见,作为分析和设计的接口之一,可方便于沟通。

2.原型的主要价值:

原型法主要价值是可视化,强化沟通,降低风险,节省后期变更成本,提高项目成功率。一般来说,采用原型法后可以改进需求质量;虽然投入了较多先期的时间,但可以显著减少后期变更的时间;原型投入的人力成本代价并不大,但可以节省后期成本;对于较大型的软件来说,原型系统可以成为开发团队的蓝图;另外,原型通过充分和客户交流,还可以提高客户满意度。

3.基本要求:

体现主要的功能;

提供基本的界面风格;

展示比较模糊的部分,以便于确认或进一步明确,防患于未然。

原型最好是可运行的,至少在各主要功能模块之间能够建立相互连接。

4.处理方法:

抛弃型:抛弃原型,在取得的明确需求基础上重新开始设计与开发;用于试验某些概念,试验完系统将无用处

演化型:在原型的基础上继续开发;原型系统不断被开发和被修正,最终它变为一个真正的系统。

5.表达工具:

原型的表达工具可以有很多,如果是演化型的原型,当然优先选用软件本身的开发工具。否则还可以应用各种快速显示的工具,例如,HTML,Powerpoint等等,只要能够充分而形象地表达就可以了。

1.4.2.2原型在软件过程中的地位

软件的根本目的是实现用户的需求,提供用户日常使用,解决用户工作中有所不便的问题,提高其工作效率,改进质量,加强管理控制,最终直接或间接地提高其效益。因此软件开发本质上就是需求的处理和实现,而软件原型对需求确定来说具有非常重要的意义。

软件过程划分:

需求收集和分析、提供原型并进行评价、实现需求(对迭代的次数,每次迭代的里程碑,要实现的目标,及可提交的成果必须有可验证的清晰的计划)、需求变更

1.4.2.3原型模型

1原型开发模型:

开发人员根据用户的需求,先开发一个原型,让用户试用,用户提出改进、精化及增强系统能力的需求。开发人员根据用户的反馈意见,实施开发的迭代过程。这一过程反复进行,逐渐演化成最终的系统。每一迭代过程均由需求、设计、编码、测试、集成等阶段组成,如果在一次迭代中,有的需求不能满足用户的要求,可在下一次迭代中进行修正。

2存在的问题:

用户误解原型的角色:他们认为原型应该和真实系统一样

缺少控制:由于用户可能不断提出新要求,因而原型迭代的周期很难控制

额外的花费:研究结果表明构造一个原型可能需要10%额外花费。

为了尽快实现原型,采用了不合适的技术,没有修改,运行效率会受到影响

原型法要求开发者与用户密切接触,有时这是不可能的。例如外包软件。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4.2.4原型系统的注意事项(功能大致实现,突出可现部分)

原型应充分展示软件的可见部分。

本质是快速,尽量缩短开发原型的时间:

使用快速原型语言、采用软件重用技术、在算法的时/空开销方面也可以让步

原型系统:类似的相关系统、已有系统、现场(手绘)

在这里插入图片描述

1.4.3软件演化模型

挑战:软件需求不断变化、紧迫的市场压力

思想:渐增式或者迭代开发

演化模型是利用一种迭代的思想方法,它的特征是使软件工程师渐进地开发逐步完善的软件版本。

  • 增量模型
  • 螺旋模型
1.4.3.1增量模型(增加功能)

把软件产品看作一系列增量构件,在开发过程的各次迭代中,每次完成一个增量。

融合了快速原型开发模型和瀑布模型

在这里插入图片描述

特点:

优点:

  • 分批逐步提交产品,短时间内提交部分功能产品
  • 逐步增加产品功能,用户有时间学习适应新产品
  • 可以把难度大的构件放在后期增量中开发,避免用户长时间等待。

困难:

  • 构件集成问题–>软件体系结构必须是开放的(在把每次新增量构件集成到现有的软件体系结构中时,必须不破坏原来已经开发的产品)
  • 本身具有矛盾性,一方面要求开发人员把软件看作一个整体,另一方面要求开发人员把软件看作构件序列,且构件间彼此独立
1.4.3.2螺旋模型

1背景:“软件风险”是任何软件开发项目中都普遍存在的

2风险(Risk)项目风险:

在预算、进度、人力、资源、客户及需求方面潜在的问题->成本、时间上升

技术风险:在设计、实现、接口、维护方面的问题 ->质量下降,甚至无法完工

商业风险:市场、商业策略、推销策略->软件的生存能力项目越大,软件越复杂,所冒风险越大

3螺旋模型:

瀑布模型+快速原型+风险分析(risk analysis)

迭代过程沿螺旋线顺时针迭代,每迭代一次,螺旋线前进一周

每一轮周期均包含风险分析

每一轮都采用原型作为减少风险的机制

在这里插入图片描述

4过程:

1.确定计划

确定该阶段的目标、为完成这些目标选择的方案和设定这些方案的约束条件

2.风险分析

从风险的角度分析上一步(本阶段指定的目标、方案。。)的工作成果,必要时建立一个原型来确定风险的大小,然后据此决定是按照原目标执行,还是修改或终止项目。若成功排除所有风险,则启动下一个步骤(

3.实施工程:

实施软件开发开发验证下一产品,这个象限相当于纯粹的瀑布模型。比如,如果用户界面是最主要的风险,则选择原型法开发

若安全性是最主要的风险,则选用形式化模型开发

若子系统集成成为主要考虑的风险,则应选用瀑布模型开发。。。

4.客户评估,评价前一步的工作,提出修改意见,计划下一轮的工作

5特点:

优势:

风险驱动:在项目所有阶段考虑技术风险,能够在风险变成问题前降低它的危害

适合大型软件系统开发

缺陷:

比较复杂,需要且成功依赖于风险评估技术

主要适用于内部大型开发(若风险分析的费用接近整个项目预算,则风险分析是不可行的,只有内部开发的项目,风险过大时,才能方便停止。)

1.4.4迭代模型(完善功能)

在这里插入图片描述
在这里插入图片描述

1.4.5面向对象开发模型

软件规模庞大,或者需求是模糊或者随时间变化时,传统方法开发软件往往不成功。

在这里插入图片描述

1.4.5.1喷泉模型

“喷泉” 一词体现了面向对象软件开发过程的迭代无缝

圆圈重叠: 不同阶段的重叠,各活动存在交迭——无缝

中轴线:总目标,避免开发无序

向下的箭头:该阶段内的迭代

维护圈较小

无缝——各阶段都使用统一的概念和表示符号——对象

迭代——容易实现各步骤的多次反复迭代

在这里插入图片描述

喷泉模型是一种迭代的开发模型,它强调用户需求的驱动和面向对象的开发过程。喷泉模型认为软件开发过程是一个自下而上的循环过程,各个开发阶段之间可以相互重叠和多次反复。喷泉模型的特点是各个开发阶段没有特定的次序要求,可以交互进行,且可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。这种模型适用于需求不稳定、项目规模较大、开发团队需要灵活应对变化的项目。

1.4.5.2基于构建的软件开发

思想:参照硬件标准零部件生产、组装

依据:应用软件系统的开发经历需求~维护, 若每天系统均从头开发,则必然存在大量重复工作 --构件?复用?

软件复用:将已有的软件成分用于构造新系统 ——“开发伴随复用,开发为了复用”

构件:可以复用,相对独立的部件

  • 需求规格说明
  • 设计文档
  • 测试计划和用例
  • 源代码…

CBD:利用预先封装好的软件来构造应用

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值