导图社区 软件工程
软件工程概述梳理,包括软件危机、软件工程、软件生命周期以及软件开发模型四个部分的内容。
编辑于2022-12-07 10:47:12 天津市软件工程概述
软件危机
大纲中了解部分
定义
软件危机就是在软件开发和维护过程中所遇到的一系列严重问题
面临问题
1.如何开发软件,以满足对软件日益增长的需求
2.如何维护数量不断膨胀的已有软件
主要表现
1.对软件开发成本和进度的估计常常很不准确
2.用户对“已完成的”软件系统不满意的现象经常发生
3.软件产品的质量往往是靠不住的
4.软件常常是不可维护的
5.软件通常没有适当的文档资料
6.软件成本在计算机系统总成本中所占比例逐年上升
7.软件开发生产率提高的速度,远远跟不上计算机应用迅速普及及深入的趋势
原因分析
1.自身原因(客观原因)
(1)软件是计算机系统中的逻辑部件而不是物理部件
(2)软件维护通常意味着改正或修改原来的设计,在客观上使得软件维护较为困难
(3)软件规模庞大,程序的复杂性将随着程序规模的增加呈指数上升
2.软件开发与维护方法不正确
(1)存在与软件开发和维护相关的许多错误认识和做法
(2)对用户要求没有完整准确的认识就匆忙着手编写程序
(3)开发人员只重视程序而忽视软件配置的其余部分(文档和数据等)
(4)软件开发人员轻视维护
消除途径
1.对计算机软件有一个正确的认识(即软件=程序+数据+文档)
2.应充分认识到软件开发是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目
3.推广使用在实践中总结出来的开发软件的成功技术和方法,并且探究更好更有效的技术和方法
4.应该开发和使用好的软件工具
软件工程
大纲中了解部分
定义
软件工程就是指导计算机软件开发和维护的一门工程学科。软件工程采用工程的概念、原理、技术和方法来开发和维护软件。
目的
软件工程是一门工程性学科,目的是成功地建造一个大型软件系统
研究内容
软件工程的主要研究内容是软件开发技术和软件开发过程管理两个方面
本质特征
1.软件工程关注于大型软件的构造
2.软件工程的中心课题是控制复杂性
3.软件经常变化
4.开发软件的效率十分重要
5.和谐地合作是开发软件的关键
6.软件必须有效地支持它的用户
7.在软件工程领域通常由一种文化背景的人替具有另一种文化背景的人在创造产品
基本目标
1.降低软件开发成本
2.满足用户要求的全部软件功能
3.符合用户要求,令客户满意的软件性能
4.具有较好的易用性、可重用性和可移植性
5.较低的维护成本,较高的可靠性
6.按合同要求完成开发任务,及时交付用户使用
基本原理
1.用分阶段的生命周期计划严格管理
2.坚持进行阶段评审
3.实行严格的产品控制
4.采用现代程序设计技术
5.结果应能清除地审查
6.开发小组人员应该少而精
7.承认不断改进软件工程实践的必要性
软件工程方法学
三要素
1.过程
2.工具
3.方法
目前使用最广泛的软件工程方法学是传统方法学和面向对象方法学
发展历史
1.程序实际时代(1946-1956)
个人,强调“程序设计技巧”
2.程序系时代(1956-1968)
“软件作坊”,出现软件危机
3.软件工程时代(1968-至今)
程序+文档时代,没有摆脱软件危机
软件生命周期
大纲中掌握部分
组成
计划时期(问题定义、可行性研究) 开发时期(需求分析、概要设计、详细设计、编码、测试) 运行时期
1.软件定义
(1)问题定义
“需要解决什么问题?”
(2)可行性研究
问题是否值得去解
(3)需求分析
“目标系统必须做什么?”
2.软件开发
(4)总体设计
怎么做
(5)详细设计
怎样具体实现
系统设计
(6)编码和单元测试
(7)综合测试
系统实现
3.运行维护(软件维护)
软件开发模型
大纲中掌握部分
1.瀑布模型
概述
在20世纪80年代以前,瀑布模型一直是唯一被广泛采用的生命周期模型,至今仍为使用最广泛的模型
特点
(1)阶段的顺序性和依赖性
(2)推迟实现的观点
(3)质量保证的观点
优点
(1)可强迫开发人员采用规范的方法
(2)严格的规定了每个阶段必须提交的文档
(3)每个阶段的产品质量有保障
(4)对文档的约束,使软件维护容易一些
缺点
(1)瀑布模型是文档驱动
(2)缺乏灵活性,无法解决软件需求不明确或不准确的问题
2.快速原型模型
主要思想
首先快速建立一个能够反映用户主要需求的原型系统
特点
快速原型模型弥补了瀑布模型不适用于需求变更的缺点,其本质是“快速”
3.增量模型(渐增模型)
特点
是瀑布模型的顺序特征和快速原型法的迭代特征相结合的产物
优点
(1)能在较短的时间内向用户提交可完成部分工作的产品
(2)使用户有较充裕的时间学习和适应新产品
技术难点
(1)要求软件体系结构必须是开放的
(2)增量模型本身是矛盾的
适合于软件要求不明确,设计方案有一定风险的软件项目
4.螺旋模型
概述
螺旋模型是目前实际软件项目开发中比较常用的一种模型
特点
螺旋模型加入了瀑布模型与增量模型都忽略的风险分析
是一种风险驱动模型
优点
适合于内部开发的大规模软件项目
有利于软件的重用
减少了过多测试或测试不足所带来的的风险
难点
需要开发人员具有丰富的风险评估经验和知识
5.喷泉模型
概述
喷泉模型是典型的面向对象的软件过程模型之一
特点
以用户需求为动力,以对象为驱动
体现了面向对象软件开发过程迭代和无缝特性
6.统一过程模型(RUP)
概述
RUP软件开发生命周期是一个二维的面向对象的生命周期,纵轴代表核心工作流,横轴代表时间
特点
采用迭代和渐增的方式开发软件
具有多功能性和广泛适用性
7.敏捷过程
敏捷开发宣言
(1)个体和交互胜过过程和工具
(2)可以工作的软件胜过面面俱到的文档
(3)客户合作胜过合同谈判
(4)响应变化胜过遵循计划
极限编程
以极限编程为代表的敏捷过程,具有对变化和不确定性的更快速、更敏捷的反应特性
在快速的同时仍然能够保持可持续的开发速度
8.微软过程
微软软件生命周期
(1)规划阶段
(2)设计阶段
(3)开发阶段
(4)稳定阶段
(5)发布阶段
特点
适用于商业环境下具有有限资源和有限开发时间约束的项目