1.0 简述软件工程的历史

  • 软件工程作为一门独立的学科,其发展已逾五十年。
  • 20世纪60年代,由于高级语言的流行,使得计算机的应用范围得到了较大扩展,对软件系统的需求急剧上升,软件的规模急剧增长,从而出现了所谓的“软件危机”。
  • 软件开发从质量、效率等方面均远远不能满足需求。
  • 20世纪60年代末,如何克服“软件危机”,为软件开发提供高质、高效的技术支持,收到人们的高度关注。
  • 1968年,在NATO会议上首次提出了“软件工程”这一概念,从而使软件开发开始了从“艺术”“技巧”和“个体行为”向“工程化”和“群体协同工作”转化的历程。
  • 多年来,软件工程的研究和实践取得了长足的发展,虽然与彻底解决“软件危机”尚有较大差距,但对软件开发的工程化以及软件产业的发展起到了积极的推动作用,提供了良好的技术支持。

1.1.1 软件的定义

  • 软件是计算机系统中与硬件相互依存的另一部分。
  • 软件是包括程序、数据以及其相关文档的完整集合。
    • 程序:是按实现设计的功能和性能要求执行的指令序列
    • 数据:为进行同行、解释和处理而使用的信息的形式化表现形式
    • 文档:是与程序开发、维护和使用相关的图文材料

1.1.2 软件的特征

软件是整个计算机系统中的一个逻辑部件,而硬件是一个物理部件。

软件具有硬件完全不同的特性:

  • 软件是一种逻辑实体,不是具体的物理实体。
    软件具有抽象性,可以存储在存储介质中,但却无法看到软件本身的形态,必须经过观察、分析、思考和判断去了解它的功能、性能以及其他特性。
  • 软件和硬件的生产方式不同。
    • 在软件的开发过程中,没有明显的制造过程
    • 也不像硬件那样,一旦研制成功就可以重复制造,可以在制造过程中进行质量控制以保证产品的质量
    • 软件是通过人们的智力活动把知识与技术转化为信息的一种产品。
    • 一旦某一软件项目研制成功,以后就可以大量地复制同一内容的副本,应用到更多的地方。
  • 软件与硬件的维护方式不同。
    • 硬件是有损耗的,会产生磨损和老化而使故障率增加甚至损坏。
    • 软件不存在磨损和老化的问题,但却存在退化的问题。
      • 在软件的生存周期中,为了使它能够克服以前没有发现的故障、适应硬件和软件环境的变化以及用户的新要求,必须要多次修改软件,而每次修改都不可避免地会引入新的错误,随着一次次的修改,导致软件失效率升高,从而使软件退化。
  • 软件的复杂性
    • 一方面来自它所反映的实际问题的复杂性
    • 另一方面也来自程序结构的复杂性
    • 软件技术的发展明显落后于复杂的软件需求,并且随着时间的推移,这个差距日益加大
  • 软件成本较高。
    • 软件的研制工作需要投入大量的、复杂的、高强度的脑力劳动,研制成本是比较高的。
    • 在20世纪50年代末,软件的开销大约占总开销的百分之十几,大部分成本花在硬件上。但今天,这个比例完全颠倒过来,软件的开销大大超过硬件的开销。
  • 软件的使用和社会因素有关。
    • 许多软件的开发和运行涉及到机构、体制及管理方式等问题,甚至涉及人的观念和人们的心里,它直接影响到项目的成败

1.1.3 软件的分类

1.按软件的功能进行划分

  • 系统软件:

    • 能与计算机硬件紧密配合在一起,使计算机系统各个部件、相关的软件和数据协调、高效地工作的软件。
    • 例如:操作系统、数据库管理系统、设备驱动程序以及通信处理程序等
  • 支撑软件:
    • 是协助用户开发软件的工具性软件

      • 其中包括帮助程序人员开发软件产品的工具
      • 也包括帮助管理人员控制开发进程的工具
  • 应用软件:
    • 是在特定领域内开发,为特定目的服务的一类软件

2.按软件规模进行划分

  • 按开发软件所需的人力、时间以及完成的源程序行数,可确定6种不同规模的软件。
类别 参加人数 研制期限 产品规模(源程序行数)
微型 1~4 10周以下 1k
小型 5~20 2~10月 2k~10k
中型 20~50 1~2年 10k~100k
大型 50~500 2~4年 100k~1M
甚大型 500~1000 4~6年 1M~10M
极大型 1000以上 7年以上 10M以上
  • 规模大、时间长、很多人参加的软件项目,其开发工作必须要有软件工程的知识做指导。
  • 规模小、时间短、参加人员少的软件项目也要有软件工程的概念,遵循一定的开发规范。
  • 任何软件的开发的基本原则是一样的,只是对软件工程技术的以来的程度不同而已。

3.按软件工作方式划分

  • 实时处理软件:

    • 指在事件或数据产生时,立即予以处理,并及时反馈信号,控制需要监测和控制的过程软件。
    • 主要包括数据采集、分析、输出三部分。
  • 分时软件:
    • 允许多个联机用户同时使用计算机
  • 交互式软件:
    • 能实现人机通信的软件
  • 批处理软件:
    • 把一组输入作业或一批数据以成批处理的方式一次运行,按顺序逐个处理完的软件。

4.按软件服务对象的范围划分

  • 项目软件(定制软件):

    • 是受某个特定客户(或少数客户)的委托,由一个或多个软件开发机构在合同的约束下开发出来的软件。
    • 例如,军用防空指挥系统、卫星控制系统。
  • 产品软件:
    • 是由软件开发机构开发出来直接提供给市场,或是为千百个用户服务的软件。
    • 例如:文字处理软件、文本处理软件、财务处理软件、人事管理软件等。

5.按使用的频度进行划分

  • 有的软件开发出来仅供一次使用。

    • 例如:用于人口普查、工业普查的软件。
  • 有些软件具有较高的使用频度。
    • 例如:天气预报软件。

6.按软件失效的影响进行划分

  • 有的软件在工作中出现了故障,造成软件失效,可能给软件整个系统带来的影响不大。
  • 有的软件一旦失效,可能酿成灾难性后果。这类软件被称为关键软件。
    • 例如:财务金融、交通通信、航空航天等

1.1 软件的定义、特征和分类相关推荐

  1. NIST 按行政令关于加强软件供应链安全的要求,给出“关键软件”的定义及所含11类软件...

     聚焦源代码安全,网罗国内外最新资讯! 专栏·供应链安全 数字化时代,软件无处不在.软件如同社会中的"虚拟人",已经成为支撑社会正常运转的最基本元素之一,软件的安全性问题也正在成为 ...

  2. 芯片如何储存信息_机器视觉检测设备相机的分辨率是如何定义的怎么分类?

    机器视觉相机的目的是将通过镜头投影到传感器的图像传送到能够储存.分析和(或者)显示的机器设备上.今天思普泰克要跟大家机器视觉检测设备中相机的分辨率是如何定义的怎么分类? 1.机器视觉检测设备相机的分辨 ...

  3. opendaylight_使用OpenDaylight在软件中定义网络

    opendaylight 多年来,网络中的传统模型需要大量的硬件工作. 但是随着云计算和虚拟化技术的兴起,以及对网络变得比以往任何时候都更加敏捷和灵活的需求,一种趋势正在逐渐趋向于将网络连接到与计算所 ...

  4. MT4电脑版软件有哪些特征?相比MT5软件有什么不同?

    在竞争激烈的外汇投资市场,数据分析的重要性不言而喻,无论是投资产品的组合还是汇率波动的趋势分析,都需要通过专业的软件工具来完成.事实上,很多消息都是可以在外汇行情软件上了解到的,只要掌握外汇行情软件的 ...

  5. 什么是微控制器? 通用组件的定义特征和架构

    文章目录 写在前面 正文 什么是微控制器? 微控制器与微处理器 微控制器与数字信号处理器(DSP) 微控制器的要素 中央处理单元 存储器 外围设备 支持电路 下一篇文章 交个朋友 写在前面 原文链接 ...

  6. 软件工程-软件的本质特征

    软件的本质特征包括:一致性.复杂性.不可见性和可变性 一致性包括: 软件不能独立存在,要依附于一定的环境(如硬件.网络.以及其他软件) . 软件必须遵循从人为的惯例并适应已有的技术和系统. 软件需要随 ...

  7. 新能源汽车档位控制器软件功能定义及其策略

    **新能源汽车档位控制器软件功能定义及其策略** 整车档位定义及控制策略(P.R.N.D) 1档位定义 1.1 停车档(P档) 当换挡手柄在P时,P档锁止,使驱动轮不能转动,防止汽车移动.P档系统主要 ...

  8. 软件危机定义、发生原因、常见表现,如何避免软件危机?

    软件危机定义: 是指在计算机软件的开发和维护过程中所遇到的一系列严重问题. 表现在: (1)对于软件开发的成本和进度的估计很不准确. (2)开发的软件产品不能完全满足用户要求,用户对已完成的软件系统不 ...

  9. 赛门铁克软件(北京)有限公司:有关更新赛门铁克防病毒软件病毒定义代码的问题

    这是来自官方的声明,原文地址:http://www.symantec.com/zh/cn/enterprise/theme.jsp?themeid=important_information 尊敬的用 ...

  10. CAD制图初学入门:CAD软件如何定义视口?

    在使用正版CAD软件绘制图纸的过程中,经常会用到视口的功能.如果想要使用已定义视口,该如何操作呢?有些CAD制图初学入门者对此并不了解.接下来就让小编以正版CAD软件--浩辰CAD建筑软件为例来给大家 ...

最新文章

  1. datatable与SqlDataReader
  2. 用gameMaker做个小游戏
  3. python里读写excel等数据文件的6种常用方式
  4. SQL Server 2008空间数据应用系列十一:Bing Maps中呈现GeoRSS订阅的空间数据
  5. svn钩子程序上传文件中文文件导致报错的处理办法
  6. 第三次学JAVA再学不好就吃翔(part96)--异常
  7. HDU 6755 Fibonacci Sum(二次剩余 + 二项式展开)
  8. python cx_oracle配置_用Python设置cx_Oracle环境变量
  9. mybatis mysql 模糊查询语句_mybatis+Spring mysql的模糊查询问题
  10. 2014年计算机应用文摘,2014年江西信息技术高考试卷Word版
  11. 南京林业大学计算机考研资料,2021南京林业大学考研历年真题复习资料
  12. java adt下载_Android ADT 离线下载操作步骤
  13. windchill安装搭建(保姆式)
  14. 第五十三回 关云长义释黄汉升  孙仲谋大战张文远
  15. 逻辑学是计算机 创始人,逻辑学的创始人:亚里士多德
  16. wireshark 过滤omci包_中兴OLT、ONU常见故障问题处理
  17. 杭电和深大计算机专业哪个好,杭州电子科技大学 还是 深圳大学?
  18. ​​​LabVIEW DLL传递一个二维数组报错
  19. 鹏业云计价i20(四川)CJZ阅读模式功能
  20. 帧服务器支持会声会影哪个版本,会声会影哪个版本好用

热门文章

  1. 计算机启动过程:MBR和BIOS
  2. 耐得住寂寞,守得住繁华
  3. Overture五线谱打曲谱用得上的排版技巧
  4. OSChina 周五乱弹 —— 谁说胖,来一个neng一个
  5. Matlab视觉处理模块定位控制全向轮小车运动:目标跟踪测试
  6. 织梦留言板模板 .php,DEDECMS 留言薄模块的使用方法
  7. 全球化业务渐入佳境,BIGO盈利持续大幅提升,是时候重估欢聚集团
  8. matlab怎么显示bfm模型的纹理模型,【计算机视觉基础】如何通过BFM模型得到人脸关键特征点的信息...
  9. selenium 浏览器打开新标签页
  10. 网站html源代码如何修改,如何修改网页源代码