软件工程绪论

1、软件危机
软件危机指的是在计算机软件的开发和维护过程中所遇到的一系列严重问题。
概括来说,软件危机包含两方面问题:
一、如何开发软件,以满足不断增长,日趋复杂的需求;
二、如何维护数量不断膨胀的软件产品。

2、软件危机的表现
(1)对软件开发成本和进度的估计常常不准确,软件生产进度无法控制。开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见。
(2)软件需求定义不准确,易偏离用户需求。用户对“已完成”系统不满意的现象经常发生。
(3)软件产品的质量往往靠不住。Bug一大堆,Patch一个接一个。
(4)软件的可维护程度非常之低。很多程序的错误是很难改正的,不能根据用户的需求变化在原有程序中增加新的功能。
(5)软件通常没有适当的文档资料。这些文档作为管理和评价软件开发工程的进展情况,作为信息交换工具;对于软件维护人员文档更是必不可少。
(6)软件的成本不断提高。随着技术的进步硬件成本不断降低,而软件成本随着人力资源成本的增高、软件规模的增大而不断上涨。
(7)软件开发生产率的提高赶不上硬件的发展和人们需求的增长。
(8)软件可维护性差。

3、软件危机产生的原因
软件本身的特点
对软件开发与维护存在许多错误认识和做法
软件开发与维护的方法不正确

4、软件的特性
软件是一种逻辑实体,具有抽象性。
软件没有明显的制造过程。
软件在使用过程中,没有磨损、老化的问题。
软件对硬件和环境有着不同程度的依赖性。这导致了软件移植的问题。
软件的开发至今尚未完全摆脱手工作坊式的开发方式,生产效率低。
软件是复杂的,而且以后会更加复杂。
软件的成本相当昂贵。软件开发需要投入大量、高强度的脑力劳动,成本非常高,风险也大。
软件工作牵涉到很多社会因素。

5、软件面临的新挑战
软件复杂性的增加
软件规模的不断扩大
软件环境的变化
遗留系统(Legacy System)的集成和复用
软件开发的高质量和敏捷性要求
分散的开发团队的协同

6、软件工程
软件工程(Software Engineering) 采用工程的概念、原理、技术和方法来开发与维护软件的过程。

7、软件工程学
软件工程学是一门研究如何用系统化、规范化、数量化等工程原则和方法去进行软件的开发和维护的学科。

8、软件工程的本质特征
软件工程关注大型程序的构造;
软件工程的中心课题的控制复杂性;
软件经常变化;
软件开发效率很重要;
良好的合作是软件开发的关键;
软件必须有效地支持它的用户;
软件工程领域通常由一种专业人士替另一种专业人士创造产品。

9、软件工程的传统途径—生命周期方法学(Software life cycle)
生命周期方法学的基本内容
  从时间角度对软件开发和维护的复杂问题进行分解,把软件生命的漫长周期依次划分为若干个阶段,然后逐步完成。
. 生命周期方法学的应用方法
  从对任务的抽象逻辑分析开始,一个阶段一个阶段地进行开发;前一个阶段任务的完成是后一个阶段工作的前提和基础,而后一个阶段任务通常是使前一阶段提出的解法更进一步的具体化。
阶段过渡方法
每一个阶段的开始和结束都有严格标准,前一阶段结束的标准是后一阶段工作开始的标准。 技术审查和管理复审。

10、软件的定义
软件是程序以及开发、使用和维护程序需要的所有文档。

11、软件工程(生命周期各阶段的基本任务)
1、问题定义:要解决的问题是什么?问题性质、工程目标和规模的报告;分析员:实际用户+负责人
2、可行性研究:是否有解决办法?高层逻辑模型,准确和具体的工程规模和目标,成本/效益分析等可行性报告。分析员
3、需求分析:为了解决的问题,目标系统必须做什么?准确确定系统的功能。系统的逻辑模型
4、总体设计:如何解决这些问题;模块划分软件结构
5、详细设计:如何具体地实现系统:
每个模块(程序)详细规格说明
6、编码与单元测试:写出正确的容易理解和容易维护的程序模块
7、综合测试:通过各种类型的测试,使软件达到预定的要求
8、软件维护:通过各种必要的维护活动使系统持久地满足用户的需要

12、技术审查和管理复审
必要性
管理复审和技术复审
错误传播模型(扇形)

管理复审的基本任务:在软件生命周期的每个重要的里程碑(一般是每个阶段计划、需求分析、设计、编码、维护)对工程项目的成本、实际花费、投资回报的前景等从管理的角度进行审查。

技术审查的基本任务:在软件生命周期的每个阶段进行正式而严格的技术审查,尽量发现隐藏的错误。

正式技术评审是软件工程实践者实施的一项软件质量保证活动

评审办法:评审会议、评审记录、评审指南

13、软件工程金三角
人:完成软件开发的主体
技术:提供了建造软件在技术上需要 “如何做”的方法,核心技术包括:系统工程、软件需求、软件设计、软件构造、软件测试、软件维护。
管理:提供了质量管理、成本管理、时间管理、范围管理等知识和技能。

过程:这是将人、技术、管理结合在一起的凝聚力

14、控制软件开发的复杂性
技术的复杂性、需求的复杂性、人的复杂性。
1、抽象:抽出共同的、本质的特征,包括两种: 过程抽象与数据抽象 。
2、分解:分而治之,把复杂问题分成若干简单的子问题。
3、迭代:返复、循环求解,当无法正确抽象和分解时采用迭代的方法,以积累经验。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值