软件工程概述
2022-08-26 18:00:31 0 举报
AI智能生成
软件工程是一门研究如何有效地开发和维护大型软件系统的学科。它涵盖了从需求分析、设计、编码、测试到部署和维护的整个软件开发生命周期。软件工程的目标是提高软件的质量,降低开发成本,缩短开发周期,并确保软件系统能够适应不断变化的需求和技术环境。为了实现这些目标,软件工程师采用了一系列经过验证的方法和技术,如面向对象编程、模块化设计、版本控制和持续集成等。此外,软件工程还强调团队合作和沟通,以确保所有参与者能够共同为项目的成功做出贡献。总之,软件工程是一门旨在提高软件开发效率和质量的重要学科,对于当今日益复杂的软件系统来说至关重要。
作者其他创作
大纲/内容
软件
定义
软件 = 程序 + 数据 + 文档
数据
程序加工处理的对象。
包括数据的表示、组织与存储。
数据 = 初始化数据 + 测试数据
文档
开发、使用和维护程序所需的图文资料 。
文档 = 开发文档+管理文档+用户文档+维护文档。
程序
能完成预定功能和性能的指令集合。
软件和程序的区别
程序只是完整软件产品的一部分。
编写程序只是软件开发过程数据中的一个阶段,一般来说,其工作量仅仅是软件开发全部工作量的10%-20%
软件的特点
抽象性
逻辑实体。可记录。但看不到,开发过程可视化程度低,开发结果难以直观表示。
可复制性
与开发成本相比,复制成本很低 。
无折旧
受硬件制约
未完全摆脱手工工艺
开发费用高
软件分类
按适用范围分
定制软件(Custom Software)项目软件
满足特定客户的特定需要的软件。例如网站。
通用软件(Generic Software)产品软件
满足市场潜在客户的通用需求的商业成品软件。例如:Office、Windows等。
按软件功能分
系统软件
管理计算机自身的资源、提高计算机的使用效率并为计算机用户提供各种服务的基础软件。例如操作系统OS、数据库管理系统DBMS等
应用软件
解决某一具体领域的实际问题的软件。例如CAD。
支撑软件
协助用户开发的工具软件,如编辑程序、程序库、图形软件包等。
按软件体系结构分
桌面软件
全部工作由在单一机器上的一个软件系统完成。
分布式软件
由多个软件协调工作来完成任务。例如客户端与服务器C/S、浏览器与服务器B/S软件。
并行软件
基于多CPU环境能完成并行计算的软件。
按规模分
小型软件(1-5人年)
中型软件(5-50人年)
大型软件(50人年以上)
按工作方式分
实时软件
分时软件
交互式软件
批处理软件
嵌入式软件(Embedded Software)
运行于特定硬件设备中的软件。例如:手机、汽车等中的软件。
计算机软件发展的三个时期
早期时代(60年代中期之前)
程序设计阶段
硬件通用,软件专用;程序规模小,编写者和使用者为同一人(同组人)。
第二代(60年代中期-70年代中期)
程序系统阶段
出现“软件作坊”、产品软件;“个体化”开发方法。
第三代(70年代中期之后)
软件工程阶段
软件开发成为一门新兴的工程学科——软件工程。
软件危机
软件危机的产生
20世纪60年代中期以后,一些开发大型软件系统的要求提了出来。
然而软件技术的进步一直未能满足形势发展的需要,在大型软件的开发过程中出现了复杂程度高、研制周期长、正确性难以保证的三大难题。
遇到的问题找不到解决办法,致使问题堆积起来,形成了人们难以控制的局面,出现了所谓的“软件危机”。
软件危机的定义
软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。
主要是两个问题:
如何开发软件,怎样满足对软件的日益增长的需求。
如何维护数量不断膨胀的已有软件。
软件危机的主要表现
对软件开发成本和进度的估计不准确,甚至开发过程就夭折。
不满足需求,用户不满意的现象经常发生。
软件质量不高、可靠性差。
缺乏适当的文档资料,软件常常不可维护、错误难以改正。
软件成本占系统总成本的比例逐年上升。
软件开发速度跟不上计算机发展速度,软件生产率低,不能满足需要。
产生软件危机的原因
与软件本身的特点有关,软件是逻辑产品,开发进度、成本难以估计。
缺乏或不完整、不一致的文档给维护带来困难。
用户对软件需求的描述往往不够精确,有遗漏,有二义。
软件开发人员对需求的理解与用户的本来愿望有差异,在软件开发过程中,或多或少地采用了错误的方法和技术。
大型软件项目需多人协同完成,缺乏管理经验。
缺乏有力的方法学和工具的支持。
软件项目的特殊性和人类智力的局限性。
解决软件危机的途径
技术措施
消除错误的概念和做法
使用更好的软件开发方法和开发工具
组织管理措施
软件开发不是某种个体劳动的神秘技巧,而应该是一种组织良好、管理严密、各类人员协同配合、共同完成的工程项目。
软件工程
什么是软件工程
软件工程(Software Engineering)是在克服60年代末所出现的“软件危机”的过程中逐渐形成与发展的。
软件工程是指导计算机软件开发和维护的工程学科。它采用工程的概念、原理、技术和方法来开发与维护软件,把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来。
软件工程的目标
软件工程的目标是在给定成本、进度的前提下,开发出具有可修改性、有效性、可靠性、可理解性、可维护性、可重用性、可适应性、可移植性、可追踪性和可互操作性并满足用户需求的软件产品。
软件工程的发展
第一代软件工程
传统的软件工程
第二代软件工程
对象工程
第三代软件工程
过程工程
第四代软件工程
构件工程
软件工程研究的范畴
软件开发技术
软件开发方法、软件开发过程、工具及环境。
软件管理技术
包括计划、组织、控制、领导和激励等。
软件工程的本质特性
关注大型程序的构造
中心课题是控制软件固有的复杂性
应对需求变更
提高软件开发和维护的效率
提倡有纪律的过程
最终目的是使客户满意
难点是对问题域的认识和描述
软件工程的基本原理
用分阶段的生命周期计划严格管理
坚持进行阶段评审
实行严格的产品控制
采用现代程序设计技术
结果应能清楚地审查
开发小组的人员应该少而精
承认不断改进软件工程实践的必要性
软件工程的基本原则
选取适宜的开发模型。
采用合适的设计方法。
提供高质量的工程支撑。
重视软件工程的管理。
软件过程与软件生存期
软件生存周期
软件的生存周期(Software Life Cycle):
软件产品或软件系统从设计、投入使用到被淘汰的全过程。
软件生存周期一般分为:
软件定义
问题定义
可行性研究
需求分析
软件开发
总体设计
详细设计
编码和单元测试
综合测试
软件维护
软件生存周期各阶段的工作
问题定义
问题是什么?
关于规模和目标的报告书
可行性研究
有可行的解吗?
系统的高层逻辑模型:系统流程图、数据流图、成本/效益分析
需求分析
系统必须做什么?
系统的逻辑模型:数据流图、数据字典、算法描述
总体设计
应该如何解决这个问题?
系统结构:层次图或结构图
详细设计
怎样具体地实现这个系统?
编码规格说明:HIPO图或 PDL
编码/单元测试
正确的程序模块
源程序清单;单元测试方案和结果
综合测试
符合要求的软件
综合测试方案和结果;完整一致的软件配置
维护
持久地满足用户需要的软件
完整准确的维护记录
软件过程(Software process)
软件过程:
是软件生存周期中的一系列相关的过程。过程是活动的集合,活动是任务的集合。它规定了完成各项任务的步骤。
软件过程的三层含义:
个体含义
即指软件产品或系统在生存周期中的某一类活动的集合,如软件开发过程,软件管理过程等;
整体含义
即指软件产品或系统在所有上述含义下的软件过程的总体;
工程含义
即指解决软件过程的工程,它应用软件工程的原则、方法来构造软件过程模型,并结合软件产品的具体要求进行实例化,以及在用户环境下的运作,以此进一步提高软件生产率,降低成本。
ISO/IEC 12207软件生存周期过程
ISO/IEC 12207标准把软件生存周期中可以开展的活动分为5个基本过程,8个支持过程和4个组织过程。每一个过程划分为一组活动,每项活动进一步划分为一组任务。
能力成熟度模型CMM
CMM(Capability Maturity Model):
能力成熟度模型,用于评价软件机构的软件过程能力成熟度的模型。
CMM提供了一个成熟度等级框架:
1级-初始级
2级-可重复级
3级-已定义级
4级-已管理级
5级-优化级
CMMI能力成熟度模型集成模型为每个学科的组合都提供两种表示法:
阶段式模型
连续式模型
软件开发模型
软件开发模型是描述软件开发过程中各种活动如何执行的模型。因此又称为软件过程模型或软件生存周期模型。
软件过程模型
瀑布模型(重要)
演化模型
增量模型
原型模型
螺旋模型
喷泉模型
基于构件的开发模型
形式方法模型
软件开发方法
软件开发的目标是要在规定的投资和时间内,开发出符合用户的需求,高质量的软件,为此需要有成功的开发方法。
软件开发方法
面向过程的开发方法
结构化开发方法
面向对象的开发方法
软件开发工具与环境
为支持软件开发、维护、管理而研制的计算机程序系统称为软件工具。
0 条评论
下一页