滴水恩情 发表于 2024-8-16 21:50:26

软件工程概述(上)

1、软件的概念、特点和分类

       要了解软件工程,首先让我们重新认识一下软件。如今可以说是一个软件定义统统的时代,虽然人工智能发展的如火如荼,但究其本质,核心照旧软件。那么,怎样给软件下一个定义呢?软件又具有哪些特点?怎样对软件举行分类?我们一起来了解一下。
       (1)软件的概念

   软件的定义:软件是盘算机体系中与硬件相互依存的另一部分,它是包罗程序,数据及其相干文档的完整聚集。
       不停以来,人们对软件的认识都存在误区,一种比较典型的误解是:软件就是程序,开发软件就是编程序。从上面的定义可以看出,软件是由程序、数据和文档三部分构成的。


[*]程序:盘算机可以担当的一系列指令,运行时可以提供所要求的功能和性能。
[*]数据:使得程序可以或许适本地操作信息的数据布局。
[*]文档:描述程序的研制过程、方法和使用的图文资料。
       当然,对软件的定义还有其他一些具有代表性的说法:


[*]IEEE定义(1983年):盘算机程序、方法、规则、相干的文档资料以及在盘算机上运行程序时所必需的数据。 
[*] 盘算机软件是由专业人员开发并长期维护的软件产品。
        注:IEEE是电气与电子工程师协会(Institute of Electrical and Electronics Engineers)的简称, 总部位于美国纽约,是一个国际性的电子技术与信息科学工程师的协会,也是环球最大的非营利性专业技术学会。在本栏目的文章中还会多次提到它,有关其详细介绍可拜见百度百科。
     思考题:当前火遍环球的ChatGPT是不是软件?
(2)软件的特点 

        由上面的定义可以得知,软件是盘算机体系不可缺少的构成部分,那么与硬件相比,它具有哪些特别性呢?下面我们来一起认识一下。


[*]软件形态的逻辑性
        我们对事物的认识,一般都是首先从其外形入手的。不外,软件却让你失望了,由于它是一个逻辑实体,是抽象的、不可见的。这样导致其开发过程中进度难以衡量、质量难以评价、管理和控制相当困难。


[*]生产过程的非制造性
       软件的生产过程就是软件的开发过程,不外,与一般产品的生产过程不同,它的开发过程中没有显着的制造过程。正如前面的定义所提到的,软件是由程序、数据和文档构成的,软件并不是传统意义上的制造产生的,软件一旦开发完成,只需颠末简单的拷贝就可以完成其大规模的发布。在互联网时代,其发布更为简单,用户只需在网站上完成注册,即可轻松使用,你并不必要关心它是怎样生产出来的。软件成本集中于开发上,这意味着软件项目不能象硬件制造项目那样来管理。


[*]使用方式的无磨损性 
        在软件的运行和使用期间,没有硬件那样的机器磨损和老化问题。软件不会被“用坏”,但是会存在“不好用”的问题,为了让其好用,软件开发者就必要对其举行维护,维护意味着改正或修改原来的设计。当一个硬件构件磨损时,可以用另外一个备用零件替换它,但对于软件则否则。每一个软件故障都表明了设计/编程中存在错误。因此,软件维护更复杂。 


[*]开发和运行对情况的依靠性
       正如定义中所提到的,软件的开发和运行常受到盘算机体系的限定,对盘算机体系有着不同程度的依靠性。 


[*]软件的复杂性
       软件可以说是人类可以或许创造的最复杂的产物,其复杂性体现在实际问题的复杂性、程序逻辑布局的复杂性和其他领域专门知识的复杂性。 


[*]开发方式的手工化
       正是由于软件具有的复杂性,软件的开发至今尚未完全摆脱手工的开发方式。大多数软件是定制的,而不是通过已有的构件组装而来的。 当前正处于人工智能时代,涌现出一批包罗ChatGPT在内的“编程机器人”,但它们仅仅能处理一些通用的情况,对于特别情况的软件开发,仍旧必要开发人员手工来完成。


[*]成本的昂贵性 
       由于软件多为“纯手工打造”,所以软件的成本相当昂贵。在软件开发过程中,会投入大量的、复杂的、高强度的脑力劳动,投入的研发和管理成本相对比较高。


[*]社会因素
       软件之所以可以或许得到推广,就是由于它可以或许让人们借助盘算机大大提高了工作的效率。也正由于如此,软件的使用必然会引起劳动力的释放、机构的重组,由此带来一系列的社会问题。这与人们不停以来讨论的“人工智能是否会替代人类”是一个原理。 
(3)软件的分类

        我们可以从不同的角度对软件举行分类,最直接的就是按照软件实现的功能来对其分类。包罗:


[*]体系软件:用于管理和控制盘算机硬件资源,并提供用户界面和其他体系服务。
[*]应用软件:包罗办公软件、图形设计软件、音视频播放软件、游戏软件、网络通信软件、实用工具软件等,用于满足用户实际需求的各种软件。
[*]支撑软件:介于体系软件和应用软件之间,用于为应用软件的开发和运行提供支撑。包罗开发工具软件、数据库管理软件等。
   思考题:针对上面各类软件,你能举出一些具体的例子吗?其中哪些是国产的软件,与国外的软件相比,我们有哪些优势和劣势?
       除了按照功能分类以外,下图还给出了一些其他的软件分类方式。
https://i-blog.csdnimg.cn/direct/e202c8ce97e64d6fb41322bc736b97ba.png
      
2、软件危急   

       对软件有了基本的认识之后,我们就必要了解一下与软件工程发展有着密切关系的另一个基本概念,那便是“软件危急”。首先来看看对其的定义:
   软件危急的定义: 软件危急是在盘算机软件开发、维护过程中所遇到的一系列严肃问题,导致软件的开发、维护出现风险。
       由定义可以看出, 软件危急通常包含两方面的问题:
    (1)怎样开发软件,以满足对软件日益增长的需求。
    (2)怎样维护数量不断膨胀的已有软件。
不管是开发照旧维护,一旦出现问题,都将带来不可预估的风险和损失,我们先来看几个例子:
   软件危急示例1:1996年6月4日,Ariane5火箭在发射37秒之后偏离其飞行路径  并突然发生爆炸, 其时火箭上载有代价数亿美元的通信卫星。
https://i-blog.csdnimg.cn/direct/285612288dda407c8f86d4d5fb14fb22.png 事故原因:
      

[*]程序中试图将64位浮点数转换成16位整数时产生溢出
[*]缺少对数据溢出的错误处理程序
[*]备份软件通过复制而成
        在这个例子中,正是由于软件开发过程中出现的疏忽,导致了数亿美元的损失,想象一下,假如这样的事故发生在载人航天领域,其后果将更为凄惨。 
    
3、软件工程的发展历程



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 软件工程概述(上)