软件工程复习

第一章绪论

1.软件的定义:

软件是计算机系统中与硬件相互依存的另一部分,它包括程序、数据及其相关文档的完整集合。软件=程序+文档+数据
程序是按事先设计的功能和性能要求执行的指令序列;
数据是使程序能正常操纵信息的数据结构,具体来说包括使系统初始运行所必须的数据如数据库和表的结构及初始的数据,系统运行中所需要的各种代码表、各种标志等。
文档是与程序开发,维护和使用有关的图文材料(是有关于管理、开发、用户、维护人员使用的文档)

2.软件技术面临的问题:

规模,复杂性,生产率

3.软件危机

(1)、介绍:软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题;概括地说,软件危机包含下述两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,这种现象称做软件危机
(2)、表现:
·对软件开发成本和进度的估计常常很不准确;
·用户对“已完成的”软件系统不满意的现象经常发生;
·软件产品的质量往往靠不住;
·软件常常是不可维护的;
·软件通常没有适当的文档资料;
·软件成本在计算机系统总成本中所占的比例逐年上升;
·软件开发生产率提高的速度,远远跟不上计算机应用迅速普及深入的趋势。
(3)、原因: 内在原因:复杂性
·软件开发无计划性,项目没有被很好地理解;计划不周,最终导致进度拖延,经费预算上升。
·软件需求不充分,开发的软件不能满足用户的需求。
·软件开发过程无规范,没有充分的文档资料。
·软件可靠性缺少度量的标准,质量无法保证。
·软件难以维护,易升级。
(4)、解决方法:
组织管理——工程项目管理方法
技术措施——软件开发技术与方法、软件工具
按工程化的原理和方法组织软件开发是软件开发中的问题的一个主要出路。

4.软件工程

(1)定义:软件工程是用工程、科学和数学的原则与方法研制、维护计算机软件和有关技术及管理方法。
把系统的、规范的、可度量的途径应用于软件开发、运行和维护过程,也就是把工程应用于软件。(IEEE定义)
软件工程包括技术和管理两方面的内容,是技术与管理紧密结合所形成的工程学科。
(2)三要素:方法、过程、工具
(3)中心思想:是把软件当作一种工业产品,要求“采用工程化的原理与方法对软件进行计划、开发和维护”。
(4)基本原理:是确保软件产品质量和开发效率的原理的最小集合。

5.软件开发方法(如何做)

为软件开发提供了 “如何做” 的技术

个性化方法->结构化方法->面向对象方法->软件复用

6.三种编程范型

·过程式编程范型:程序=数据结构+算法
·面向对象编程范型:程序=对象+消息
·基于构件技术的编程范型:程序=构件+架构

7.三代软件工程

·传统软件工程
结构化分析->结构化设计->面向过程的编码->软件测试
·面向对象软件工程
面向对象基本概念:对象+类+继承+消息通信
OO分析与对象抽取->对象详细设计->面向对象的编码和测试
·基于构件的软件工程
领域分析和测试计划定制->领域设计->建立可复用构件库->查找并集成构件

第二章软件生存周期与软件过程

1.软件生存周期:

一个软件项目从开始立项起,到废弃不用止,统称为软件的生存周期。
软件生存周期被划分为计划、开发、运行三个时期。
由于软件生存周期被划分为较小的阶段,使得因为软件规模增长而大大增加的软件复杂性变得较易控制和管理。

2.典型的软件生存周期:

计划->需求分析->软件分析->软件设计->编码(测试)->软件测试->运行维护

需求分析:(准确回答,系统必须做什么)
提交:软件需求说明书/系统功能说明书/初步的系统用户手册
软件设计:(回答怎么做的问题)概要设计、详细设计
提交:设计说明书(软件结构图)
程序编写:(具体实现)
提交:源程序清单
软件测试:(挑错)单元测试、组装测试 有效性测试
提交:测试报告文档(测试计划、测试用例、测试结果)
运行维护:改正性维护、适应性维护、完善性维护

3.软件过程

围绕软件开发所进行的一系列活动
软件生存周期中的阶段和软件过程中的活动是基本一致的。
(1)传统的软件过程:瀑布模型、快速原型模型
·瀑布模型:基于软件生存周期的线性开发模型
强调软件文档:每一个阶段必须完成规定的文档,每一个阶段都要复审完成的文档。
特点:阶段间的顺序性和依赖性、推迟实现的观点、质量保证的观点
顺序性:前一阶段的工作完成后才能执行下一阶段的任务
依赖性:前一阶段的输出文档是下一阶段的输入文档
存在问题:不适合需求模糊的系统,开发初始阶段很难彻底弄清软件需求
需求定义与分析->总体设计->详细设计->编码->测试->使用维护

·快速原型模型

特点:
·“逼真”的原型可以使用户迅速作出反馈
·循环回溯和迭代:非线性模型
·使用快速开发工具
种类:
·渐进型:对原型补充和修改获得最终系统
·抛弃型:原型废弃不用
应防止的倾向:舍不得抛弃,从而影响软件质量
(2)软件演化模型(采用渐增式或迭代式的开发方法):增量模型、螺旋模型、构件集成模型
·增量模型
定义:把软件看作一系列相互联系的增量,每次迭代完成一个增量。
增量:
·小而可用的软件
·第一个增量通常是软件的核心
特点:
·在前面增量的基础上开发后面的增量
·每个增量的开发可用瀑布或快速原型模型
·每个增量开发的顺序性和总体的迭代性相结合
·有利于控制技术风险

·螺旋模型
特点:
·瀑布模型(顺序性、边开发边复审)+快速原型(迭代性)
·风险分析->发现、控制风险
一个螺旋式周期
·计划:确定目标,选择方案,选定完成目标的策略
·风险分析:从风险角度分析该策略
·开发:启动一个开发活动
·评审:评价前一步的结果,计划下一轮的工作

·迭代和瀑布的区别
迭代和瀑布的最大的差别就在于风险的暴露时间上。
瀑布模型的特点(文档是主体),很多问题再最后才会暴露出来。
迭代特点,根据风险列表选择要在迭代中开发新的增量内容,每次迭代完成时都会生成一个经过测试的可执行文件,可核实是否降低了目标风险。
·构件集成模型
构件
·在某个领域中具有通用性,可以复用的软件部件
·将可以复用的构件存储起来,形成构件库
特点
·面向对象
·基于构件库
·融合螺旋模型特征
·支持软件开发的迭代方法
·软件复用

(3)形式化方法模型
基于程序变换和验证技术的软件开发
转换模型,净室模型
·转换模型
开发过程:
·确定形式化需求规格说明书
·进行自动的程序变换
·针对形式化开发记录进行测试
特点
·形式化软件开发方法
·形式化需求规格说明
·变换技术
·程序自动生成技术
·确保正确

·净室模型
净室思想
·在分析和设计阶段消除错误
·在“洁净”状态下实现软件制作
形式化
·盒结构表示分析和设计
·正确性验证
增量模型
·把软件看成一系列的增量

(4)软件过程模型的特点汇总
·瀑布模型:
线性模型,每一阶段必须完成规定的文档,适合需求明确的中小型软件开发
·快速原型:
用户介入早,通过迭代完善用户需求,原型废弃不用,适合需求模糊的小型软件开发
·增量模型:
每次迭代完成一个增量,可用于OO开发。适合容易分块的大型软件开发
·螺旋模型:
典型迭代模型,重视风险分析,可用于OO开发。适合具有不确定性大型软件开发
·构件集成模型:
软件开发与构件开发平行进行,适用于领域工程、行业的中型软件开发
·转换模型:
形式化的规格说明,自动的程序变换系统。属于理想化模型,尚无成熟工具支持
·净室模型:
形式化的增量模型,在洁净状态下实现软件制作。适合开发团队熟悉形式化方法,中小型软件开发。
(5)统一过程和敏捷过程
·统一过程(RUP)
描述了软件开发中各个环节应该做什么、怎么做、什么时候做以及为什么要做,描述了一组以某种顺序完成的活动
RUP将软件开发分为四个阶段:
·初始阶段:定义整个项目的范围
·细化阶段:制定项目计划、描述功能、建立体系架构框架
·构造阶段:构造软件产品
·迁移阶段:将软件产品移交到最终用户手中
每个阶段又分为若干次迭代,每次迭代有一个核心工作流,都会经历需求、分析、设计、实现和测试等活动。

9个核心工作流,分为6个核心过程工作流和3个核心支持流。
核心过程工作流:商业建模、需求、分析和设计、实现、测试、部署
核心支持流:配置和变更管理、项目管理、环境

统一过程(RUP)的基本特征是“用例驱动、以架构为中心的和受控的迭代式增量开发”,一个RUP可分为若干个周期,每个周期的开发过程被分为4个阶段,每个阶段可进行若干次迭代。
RUP将一个周期的开发过程划分为如下的4个阶段:
(1)初始阶段:该阶段的主要任务包括确定项目范围和边界,识别系统的关键用例,展示系统的候选架构,估计项目费用和时间,评估项目风险。其意图是建立项目的范围和版本,确定业务实现的可能性和项目目标的稳定性。提交结果包括原始的项目需求和业务用例。

制品:构想文档、有关用例模型的调查、初始的业务用例、早期风险评估、显示阶段和迭代的项目计划等制品;
(2)精华阶段:该阶段的主要任务包括分析系统问题领域,建立软件架构基础,淘汰最高风险元素。其意图是对问题域进行分析,建立系统的需求和架构,确定技术实现的可行性和系统架构的稳定性。提交结果包括系统架构及其相关文档、领域模型、修改后的业务用例和整个项目的开发计划。

制品:补充需求分析、软件架构描述、可执行的架构原型
(3)构建阶段:该阶段相对简单一些,其主要任务包括资源管理、控制和流程优化,开发剩余的构件,然后进行构件组装和测试等。其主要意图是增量式开发一个可以交付用户的软件产品。

制品:准备交到最终用户手中的产品,包括具有最初运作能力的在适当的平台上集成的软件产品、用户手册和对当前版本的描述。
(4)提交阶段:该阶段的主要任务包括进行β测试,制作发布版本,用户文档定稿,确认新系统,获取用户反馈,培训、调整产品使最终用户可以使用产品。其主要意图是将软件产品提交用户。

·敏捷过程
是一种以人为核心、迭代、循序渐进的开发方法,其软件开发过程称为“敏捷过程”
敏捷过程价值观:
·个

  • 31
    点赞
  • 181
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值