1 软件与软件危机

1.1 软件的特性

  • 软件是一种逻辑实体,而非具体的物理实体;
  • 软件产品的生产主要是研制
  • 软件具有“复杂性”,其开发和运行常受到计算机系统的限制;
  • 软件成本昂贵,其开发方式目前未完全摆脱手工生产方式;
  • 软件不存在磨损和老化问题,但是存在退化问题

  软件产品一般分为两类:通用软件产品(如数据库软件、文字处理软件、绘图软件、工程管理工具…)和定制软件产品(如电子设备的控制软件、特定的业务处理系统、空中交通管制系统…)。

1.2 软件的发展

  • 程序设计时代:1946~1956年,生产方式为个体手工劳动,使用机器语言和汇编语言,程序难读难修改,可靠性差;
  • 程序系统时代:1956~1968年,生产方式为作坊式的小集团合作生产,使用高级语言,提出了结构化方法,该阶段产生软件危机。
  • 软件工程时代:1968年至今,生产方式为工程化的生产,使用数据库、开发工具、分布式、面向对象技术等来开发软件,开发技术有很大进步,但没有突破性进展,软件价格不断上升,没有完全摆脱软件危机。

1.3 软件危机
  随着计算机应用的日益普及,软件数量急剧增长,软件产品质量低下,可维护性差,这些问题不断堆积形成日益尖锐的矛盾,这种现象即为软件危机。
  为此,NATO(北约组织)于1967年提出“软件工程”概念,次年于计算机科学国际会议上得到签署,软件工程学由此产生。

1.软件危机的主要表现

  • 对软件开发成本和进度的估计常常很不准确;
  • 用户对“已完成的”软件系统不满意的现象经常发生;
  • 软件产品的质量往往靠不住;
  • 软件常常是不可维护的;
  • 软件通常没有对应的文档资料;
  • 软件成本在计算机系统总成本中所占的比例逐年上升;
  • 软件开发生产率提高的速度远远跟不上计算机应用迅速普及及深入的趋势。

2.产生软件危机的原因

  • 软件是计算机的逻辑部件而不是物理部件。软件问题是在开发时期引入的而在测试阶段没能测出来的故障,修改软件故障要修改软件原来的设计。
  • 软件不同于一般程序,它的一个显著特点是规模庞大,而且程序复杂性将随着程序规模的增加而呈指数上升。为了在预定时间内开发出规模庞大的软件,必须由许多人分工合作,软件开发工作量随软件规模增大非线性增长。
  • 与早期软件开发个体化特点有关:认为软件开发就是写程序并设法使之运行,轻视需求分析和软件维护。也就是说是和软件开发和维护有关的许多错误认识和作法的形成,可以归因于在计算机系统发展的早期阶段软件开发的个体化特点。
  • 缺乏正确的理论指导。缺乏有力的方法学和工具方面的支持。由于软件开发不同于大多数其他工业产品,其开发过程是复杂的逻辑思维过程,其产品极大程度地依赖于开发人员高度的智力投入。由于过分地依靠程序设计人员在软件开发过程中的技巧和创造性,加剧软件开发产品的个性化,也是发生软件开发危机的一个重要原因。

3.缓解软件危机的途径

  • 方法:推广使用在实践中总结出来的开发软件的成功的技术和方法;
  • 工具:开发和使用好的软件工具;
  • 组织管理:组织良好、管理严密、各类人员协同配合。

2 软件工程

2.1 软件工程的概念

  软件工程是一类工程,是将理论与知识应用于实践的科学,它借鉴了传统工程的原则与方法以求高效的开发高质量的软件。

2.2 软件工程框架

  软件工程的框架可概括为:目标、过程、原则。

  • 目标:生产具有正确性、可用性以及开销合宜的产品;
  • 过程:生产一个最终可以满足需求且达到工程目标的软件产品所需要的步骤,包括开发过程、运作i过程、维护过程;
  • 原则:选取适宜的开发范型、采用合适的设计方法、提供高质量的工程支持、重视开发过程的管理。

2.3 软件生命周期

  软件生命周期(Software Life Cycle,SLC)是指软件产生直到报废的生命周期,包括可行性分析和项目开发计划、需求分析、概要设计、详细设计、编码、测试、维护等阶段。

  • 可行性分析和项目开发计划:该阶段回答的问题是要解决什么问题?需要多少费用?需要多长时间?
  • 需求分析:确定软件系统必须具备的功能;
  • 概要设计:开发人员把确定的个项功能需求转换成需要的体系结构,即设计软件的结构;
  • 详细设计:为每个模块的功能进行具体描述,即模块的控制结构是怎样的;
  • 编码:把每个模块的控制结构转换成程序代码;
  • 测试:保证软件质量的重要手段,设计测试用例以检验软件的组成;
  • 维护:已交付的软件投入正式使用后,为了改正软件运行错误,或者为了满足用户新的需求而加入新功能的修改软件的过程。

3 软件过程模型

3.1 瀑布模型
  该模型规定了各项关键的软件工程活动,自上而下,如同瀑布一样固定次序。

1.特点
  瀑布模型是以文档形式驱动的,是一种整体开发模型,逆转性很差或着说不可逆转。

2.适用条件

  • 开发期间需求没有或者很少变化;
  • 分析设计人员对应用领域很熟悉;
  • 低风险项目;
  • 用户使用环境很稳定;
  • 用户提出需求以外,很少参与开发工作。

3.优点

  • 每个阶段的任务与目标很明确;
  • 可为每个阶段指定开发计划,进行成本预算,组织开发力量了;
  • 通过阶段评审,将开发过程纳入正确轨道;
  • 严格的计划性保证软件产品按时交付。

4.缺点

  • 缺乏灵活性,无法适应用户需求的改变;
  • 开始阶段的小错误被逐渐放大,可能导致软件产品报废;
  • 返回上一级的开发需要十分高昂的代价;
  • 随着软件规模和复杂性的增加,软件成品成功的概率大幅下降。

3.2 快速原型模型

  借助软件开发工具或环境尽快的构造一个实际系统的简化模型。

1.特点

  • 利用原型法技术能够快速实现系统的初步模型,以便准确的获取用户的需求;
  • 采用逐步求精方法使原型逐步完善。

2.适用条件

  • 不能预先确切定义需求的软件开发;
  • 项目组成员不能很好协同配合,相互交流或通信上存在困难;
  • 已有产品或产品的原型,只需客户化的工程项目;
  • 项目所在领域是那些简单而熟悉的行业;
  • 要求进行产品移植或升级的软件项目。

3.优点

  • 开发者与用户充分交流,可以澄清模糊需求;
  • 开发过程与用户培训过程同步;
  • 为用户需求的改变提供了充分的余地;
  • 开发风险低,产品柔性好;
  • 开发费用低,时间短;
  • 系统易维护,对用户友好。

4.缺点

  • 开发者在不熟悉的领域中不易分清主次,原型不切题;
  • 限制了开发人员的创新;

3.3 增量模型

  也称为渐增模型,是遵循递增方式来进行软件开发的。在该模型中,软件产品被作为一组增量构件(模块),其中第一个增量构件往往实现软件的基本需求,提供最核心的功能。

1.特点

  • 任务或功能模块驱动,可以分阶段提交产品;
  • 开发过程中有多个任务单,多个任务单的集合构成项目的《需求规格说明书》。

2.适用条件

  • 客户能够接收分阶段交付;
  • 项目为中等或高风险项目;
  • 用户可参与到整个软件开发过程中;
  • 开发需要使用面向对象语言或第四代语言;
  • 软件开发组织拥有较好的类库,构件库。

3.优点

  • 短时间内向用户交付可完成部分工作的产品;
  • 逐步增加产品功能可以使用户有较充裕的时间学习和适应新产品;
  • 项目总体性失败的风险比较低。

4.缺点

  • 分析设计人员若对应用领域不熟悉,难以一步到位;
  • 软件系统的组装和拆卸行不强。

3.4 螺旋模型

  该模型综合了瀑布模型和快速原型模型的优点,还增加了两者都忽视的风险分析,把开发活动和风险管理结合起来,将风险减到最小并控制风险。

1.特点

  • 每一圈是一个阶段;
  • 每一个阶段又有一个活动;
  • 降低了开发的风险。

2.适用

  • 内部开发的大规模软件项目。

3.优点:风险驱动
4.缺点:只能用于大型内部软件产品,开发者必须精通风险分析和风险排除。

软件工程导论--软件工程概述相关推荐

  1. 【软件工程导论】知识点汇总 | 适用于考试复习 | 轻松通过考试

    软件工程导论 软件工程的概念 建立并使用完善的工程化原则, 以较经济的手段获得能在实际机器上有效运行的可靠软件的一系列方法. 软件工程三要素 软件工程方法 软件工具 软件工程过程 常见软件开发模型 瀑 ...

  2. 软件工程导论复试——一、软件工程学概述

    软件工程导论复试 本文用书 <软件工程导论>第六版张海藩.牟永敏 清华大学出版社 一.软件工程学概述 软件危机:计算机软件开发和维护时遇到的一系列严重问题 典型表现: (1) 对软件开发成 ...

  3. 软件工程导论团队项目

    软件工程导论团队项目(速课小龙) 一.团队介绍 1.团队成员 邓  旭 2016012068 (组长) 陈逸璇 2016012056 周紫伊 2016012043 谢月鹏 2016012066 洪泽芳 ...

  4. 《软件工程导论》课后习题答案

    <软件工程导论>课后习题答案 第一章 软件工程概论 1.什么是软件危机? 软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题.这些问题表现在以下几个方面: (1)用户对开发出 ...

  5. 《软件工程导论》考研复试整理

    一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...

  6. 首经贸电子信息复试软件工程导论

    一.名词解释 DFD 数据流图Data Flow Diagram PDL 过程设计语言 Process Design Language PAD 问题分析图 Problem Analysis Diagr ...

  7. 软件工程导论第三章复习总结附思维导图

    软件工程导论第三章复习总结附思维导图 概述 准确回答"系统必须做什么" 必须理解并描述问题的信息域,根据这条准则应该建立数据模型 必须定义软件应该完成的功能,这条准则要求建立功能模 ...

  8. 软件工程导论期末考点总结

    文章目录 一.软件工程学概述 1.1.软件危机 1.2.软件工程 1.2.1.软件工程的介绍 1.2.3.软件工程方法学 1.3.软件生命周期 1.4.软件过程 1.4.1.瀑布模型 1.4.2.快速 ...

  9. 软件工程导论考试-试卷4

    软件工程试题及答案 第一部分  选择题 一.单项选择题 每小题1分,共20分.(在每小题的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内) 1.在下列工具与环境中(  ) ...

  10. 软件工程导论概念集合

    <软件工程导论>主编:薛继伟 哈尔滨工业大学出版社 第一章软件工程概述 软件:软件是程序以及所有使程序正确运行所需的相关文档和配置信息.软件=程序+数据+文档 软件危机:随着计算机应用的普 ...

最新文章

  1. Android Tab大总结 Fragment+TabPageIndicator+ViewPager
  2. 如何检查linux是否安装了php
  3. 中国批准AMD收购赛灵思!苏妈花350亿美元集齐CPU\GPU\FPGA三大芯片业务
  4. 4python 解析库的使用
  5. Wireshark使用学习
  6. SVN Unable to connect to a repository at URL问题解决
  7. PAT甲级1035 Password:[C++题解]字符串修改
  8. 销售订单按交货单合并Billing
  9. pgAdmin启动时浏览器页面一直转圈圈 无法正常打开页面
  10. OpenCASCADE:构建配置文件
  11. Solidworks如何绘制装饰螺纹线
  12. [蓝桥杯][2013年第四届真题]危险系数-dfs+图的遍历
  13. 计算机二级mysql大题_2016年计算机二级MySQL练习题及答案
  14. 【python学习-2】python起步必备
  15. via浏览器如何拦截广告
  16. web前端教程,详解引入CSS的4种方式
  17. 如何从零开始学习Java语言
  18. gridview动态添加行
  19. 隧道技术_宏润建设隧道技术荣获教育部科技进步奖
  20. 地铁+单车一体化智慧接驳,哈罗单车升级为哈啰出行

热门文章

  1. 软件工程——第六次作业——团队作业
  2. vue仿网易云音乐播放器
  3. C语言中bzero函数
  4. 用阿里服务器搭建彩虹网代刷平台
  5. steam授权_号商福利,Steam验号机器人上线,再也不用手动验号了
  6. java怎么控制数据权限_Java权限控制算法
  7. java如何设计转账业务_Java实现转账业务
  8. 空间权重矩阵构建(Stata代码)
  9. C语言课程设计|学生成绩管理系统(含完整代码)
  10. 制作课件的软件及特点作用