浅析软件工程发展历史及前景和专业人才培养

浅析软件工程发展历史及前景和专业人才培养

摘  要 

从多个方面论述了软件工程的发展历程,并着重分析了软件危机的出现和解决途径。同时探讨了软件工程和计算机的关系,和数学的关系以及软件硬件之间的联系。其次介绍了软件工程的构成和管理层面,以及软件本质和软件工程方法学。最后,根据我国目前软件人才的需求现状,引出高素质软件人才的要求和培养方案,同时,也计划了大学四年的软件工程专业学习计划。

关键词 

软件工程,计算机,素质要求

1. 软件工程

 1.1 定义

软件工程是应用计算机科学、数学、逻辑学及管理科学等原理,开发软件的工程。软件工程借鉴传统工程的原则、方法,以提高质量、降低成本和改进算法。[1]

1.2 软件工程的发展历

1.2.1 软件工程的出现

   最早的计算机ENIAC诞生于1946年,当时的计算机主要是由军方使用,用于计算武器研制时繁琐而又复杂的计算。但因为硬件条件不足,最早的计算机巨大无比,也决定了它无法民用。直到20世纪中叶,硬件在市场需求的推动下飞速发展,体积更小,质量更轻,功耗更低的计算机出现了。这时候的计算机才真正进入民用领域。随着电脑数量的增多,计算机技术开始飞速发展,具体表现在当时各种编程语言的出现和发展。在那个年代,计算机硬件不仅非常昂贵,而且性能也不好,尤其是早期的计算机时常因为各种外界因素发生故障。因此当时的编程人员每天想的都是如何在当时硬件不足的情况下,创造出体积小,但可以满足要求且运行速率快的程序。这极为考验一个编程人员的技巧。

在20世纪60年代,计算机的普及面大大增加,与此同时,对软件系统的需求和软件自身的复杂度急剧上升,传统的开发方法无法满足用户对软件质量的需求。这就是 “软件危机”。为解决这个问题,1968年NATO会议上首次提出“软件工程”的概念,其基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照预算和进度,实现满用户要求的软件产品的定义、开发、发布和维护的工程。从此也诞生了一门新的学科——软件工程。 [2]

1.2.2 软件工程发展的三大时期

人类的科学技术在不断向前发展,软件工程也跟随科技的迭代,经历了一代又一代的改变,从历史的角度来看,软件工程的发展历程主要经历了以下三个时期:

        (1)第一时期:传统软件工程时期,这个时期(1970年前后)软件工程随着计算机的普及开始逐步发展,但因为没有合适的方法处理“软件危机”,这个时间段的软件项目总是会出现失败的案例,因为研发的软件非常容易出现错误。而且因为没有统一的标准,一个软件通常被认定为编程人员的个人思维体现,也就意味着旁人难以理解,导致如何进行软件维护成为了极具困扰的问题。所以在当时,软件开发人员和软件使用客户都希望有一套方案能使软件研发变得更加标准化,易于管理的同时,也方便日后的软件维护。为了能够更好的应对软件危机,当时的研发人员也做出了尝试,这也就导致软件工程的定义、技术以及框架的出现,为日后软件工程的发展奠定了基础。

        (2)第二时期:过程软件研发时期,因为对软件生产效率和质量的追求,一种面向对象的技术在1980年左右出现,基于这种技术,全新的操作系统诞生,这种功能更加全面的系统使系统的可利用寿命大大提升,更加利于计算机的推广和使用。软件的研发迈入了更高一层的阶段,软件研发的过程也从最开始对目的管理转变为对过程的管理。

        (3)第三个时期:在部件软件工程时代,万维网出现,一种汇聚网络资源平台的出现,让人们意识到计算机未来的前景,而软件开发技术的研究主要走向也将改变为网络计算和能够支持更多多媒体的万维网。为了满足日益增加的团队合作需求和数据共享需要,开发更多的分布式处理系统提上日程。此时为了开发功能更加强大的软件,团队合作成为了软件研发的新模式。相应的,在软件开发的过程中,人们不断积累经验,在追求高效地研发同时,不能忽视协议和相关操作性。软件的重用以及软件部件手段成为了软件技术的潮流。[3]

1.2.3 软件工程的新发展

软件的性质并完全属于纯物化,里面还包括了人的心理影响。相较于只考虑了对人的心理影响的早期软件开发,现代软件人才考虑更多的则是是人与物的心理关系,这也是人与机器之间在历史发展中,通过长时间的磨合而产生的关系

二十世纪末的因特网发展为人类提供了一种全球范围的信息技术基础设施,从而建立了一个能够将各种网络资源有效聚合的平台,而如何在因特网网络平台上高效集成各类网络资源,以便使各种网络资源能够更加有效地为所有的网络客户服务,已经成为了软件技术领域最新的研究方向。因此在因特网平台上存在着一些与传统软件平台所不能符合的特点:分布特性、节点的高度自治性、开放性、异构性、不可预测性、以及服务环境的多样性等等。这也就表明处理好这种问题后,就需要新的技术和办法来处理好这种问题。 

综上所述,Internet的快速发展,也就意味着软件行业的环境将变得更加开放,但随之而来的问题是,软件面临的环境也将变得更加难以预测。想要去适应这样一种发展趋势,未来的软件将会向着一种新的网状结构发展。面对这种新型结构,传统的软件理论和方法也意味着将面临很多挑战。但在迎接挑战的同时,这种挑战为软件的新发展提供了新的机遇,促使我们去建立一个更加符合现代软件网络所需要的平台和结构。同时,最开始对于操作系统的研发,也会随着技术发展,将研发重点转向新型中间件平台。这样的转型也势必会引领新一批科技的发展进步。

1.3 软件危机

谈到软件工程的发展历程,其中必须谈及的一个节点就是“软件危机”。软件危机是指落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发和维护过程中出现众多严重问题的现象。正是这种危机,给当时的软件开发行业带来了相当大的困扰,但同时也促使了软件工程的诞生,软件开发的标准化于可重用性得到了重视。虽说这种危机没有被彻底解决,但这也促使软件开发行业在这种压力下能够不断地发展与创新。

1.3.1 产生背景

20 世纪60年代以前,因为硬件的不足,软件的功能往往较为简单,也就不需要系统化的开发方法,所以当时的软件设计基本上等同于编制程序,也就意味着开发软件从形式上来说,更多的是一种私人化的软件生产方式。

但在20世界60年代中期,硬件的飞速发展,带动软件的上限飞速提升。高级语言开始出现,编程难度也开始上升,随之而来的问题是,软件的功能运行以及维护不再可靠,所以如何改变软件生产方式,提高软件生产率迫在眉睫,软件危机在这种背景下开始爆发 。

1.3.2 主要表现

软件开发的进度难以预测:因为生产和需求的不适配,往往导致工期延后,这种现象降低了软件开发组织的信誉。

软件开发的成本难以控制:因为缺少合适的标准,在研发初期,投资成本往往难以估算,也就导致很多时候后续的研发成本会远超预期,如果节约成本又常常会影响软件产品的最终质量,这也是为什么当时发布的软件总是会引起用户的不满。

用户对产品的功能难以满足:没有共同的标准,也没有共同语言,所以在开发软件前期的过程中,因为客户缺乏软件方面的相关知识,这也导致很多客户在不了解软件的情况下提出要求,往往最终的结果往往客户并不满意,软件开发人员无法理解客户的真正需求,而这种现象的后果往往是双方又要继续下一轮修改和磨合的痛苦。

软件产品难以维护:软件产品开发的本质其实是开发人员将自己个人的逻辑思维进行编程化。每个编程人员的思考方式不同,如果没有一个统一的编程结构和标准,也就意味着,除非是开发人员,后续的软件维护常常难以完成。但是客户在实际使用中,往往会有其他的想法,从而会去添加新的功能。但事实上,大多数情况下这只会增添错误,又一种模式意味着更加难以维护和修改,最后形成一种恶性循环。

1.3.3 解决途径

  如何解决软件危机、如何提高软件的生产效率和软件产品的可维护性这一直是困扰软件行业的难题。人们在长期的研究和探索中,总结历史经验,开始找出了一些解决软件危机的途径。

  解决软件危机需要正确的技术措施和严谨的组织管理措施,这两个条件缺一不可。

  软件开发本身是一种智力密集型劳动,使用先进且适合的工具往往可以使编程事半功倍,在保证质量的同时,减少开发周期。这也是为什么,在软件开发过程中,每个企业都要坚持不断引入新技术、新开发工具,甚至花大价钱去自己研发属于自己的技术和开发工具。这种将软件开发与自动化工具相互结合的模式,是最常见也是最有效的模式,它让开发与维护过程中重复的手工劳动变得更加智能化、自动化,从而大大提高了软件的开发效率。

  软件开发不只是某个个体的劳动,而是一种需要一个组织协同配合、共同完成的工程项目。软件生产也必须采用现代化的组织管理方式,为了达到这一要求,也就意味着在软件开发的过程中,需要在强调每个个体能力的同时,更注重一个组织的管理和运行。

总之,针对如何解决软件危机的问题,需要明确的是,正确的技术措施和严谨的组织管理措施是缺一不可的。

2. 软件工程和计算机的联系

2.1 计算机的数学基础

        计算机的出现是以数学为基础的。追溯计算机的发展历史,最早的计算机发明出来的目的就是服务于数学计算,而且计算机的每一次发展,都离不开数学界的重大突破。

       计算机的出现也可以推动数学的发展。计算机技术提高了计算的效率和准确性,这使得传统运算时有错误的现象不再发生,使得计算不再成为数学发展的阻碍。尤其是超大数字的运算,过去通过人力运算根本无法完成,但通过计算机,如超算,甚至是量子计算机,这些人脑无法准确计算的数据可以通过计算机快速完成,节约了数学家的时间,也推动了他们的研究进一步向前。所以,可以说,计算机也能推动数学的发展。

2.2硬件和软件的相互关系

    计算机的软件和硬件系统是计算机系统的两大组成成分,两者的关系是相互依存,不可分割的。

    只有硬件存在,软件才能运行。但如果没有软件的功能实现,硬件的存在也就没有了意义。所以从本质上来说,计算机系统是在硬件的基础上,去满足软件操作的要求。

事实上,很多时候硬件和软件在许多状况下并没有明确的界限,因为科技的发展,如今计算机的某些功能通过两种方式都能实现。因此两者没有高低之分,两者相互独立,又互为一体。

更多时候,硬件和软件是一个协同发展的关系。软件因为硬件技术的发展而有了更多的研发空间,而软件的不断发展又促使硬件更新去满足软件的要求,两者正是在这一种关系下,不断地发展。

3. 软件工程的构成

3.1 软件组合思想、抽象思维

  组合思想很好理解,面对一个复杂的需求,需要将需求拆解开来,变成一个个小步骤,逐个去实现,最终实现整个需求,有点类似于分而治之,逐个击破的思想。组合使得软件开发更有效率,对于需要团队开发的大项目而言,这种思想的用处更大。

抽象思想则是编程思想的基本原则之一,是对一类对象中所共有的属性和行为特征的提取。如何通过代码去实现软件功能的具体要求,这也是抽象思维的一种体现。

3.2 软件能力成熟度模型

软件能力成熟度模型是一种对软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述形成的标准。CMM的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。

CMM/CMMI将软件过程的成熟度分为5个等级,以下是5个等级的基本特征:(如图一所示)

浅析软件工程发展历史及前景和专业人才培养_第1张图片

                     图一   软件能力成熟度模型等级

(1)初始级:没有基本的制度。没有合适的制度满足管理需求,导致目标不明确,往往会放弃自己的目标。项目开发主要依靠项目负责人的经验和能力,缺乏真正的工作秩序。

(2)可重复级:拥有完整的管理制度。在开发的过程中,每一个步骤都有标准化的操作规范,项目的变化方便控制和管理。

(3)已定义级:开发过程的各个方面均已实现标准化。在管理流程上,有着符合环境要求的制度和规则,所有的技术管理活动都能被很好地控制,项目里的人员对项目的过程有了解 ,明白各自岗位负责的内容和相关职责。

(4)已管理级:产品的质量有标准的衡量措施,研发流程有完整的评价系统。在开发过程中,可以对每一个流程都可以控制和复盘。而且可以通过以往经验的总结,预测产品研发方向是否正确,从而做出及时的更正。

(5)优化级:对于研发过程能够做出完善措施,并且根据不同要求和环境,会合理地采用新技术和新方法。能够改进研发过程中的缺陷,并对可能的缺陷有应对措施。对于研发过程中出现的问题能够根据分析正确处理,并找出得出最适合的方法

4. 软件的本质及软件工程方法学

4.1 软件工程方法学

软件工程方法学包含3个要素:方法、工具和过程。其中,方法是完成软件开发的各项任务的技术方法,回答“怎样做”的问题;工具是为运用方法提供自动或半自动的软件工程支撑环境;过程是为获得高质量的软件所需要完成的一系列任务框架,它规定了完成各项任务的工作步骤。 [4]

4.2 软件生命周期

软件生命周期是指软件从产生到最终被废弃的生命周期,可以分为三大阶段,分别为定义问题、软件开发和软件维护,其中问题定义中的需求分析是软件开发和维护的前提,它直接决定软件项目的成败。在进行软件需求分析时,要全面且正确的进行需求分析。同时对需求要进行正确深入的分析,进而采用适合的工具来对需求进行说明和描述,这样为后续打下坚实的基础。 [5]

4.3 如何应对软件危机

要克服软件危机,就要认真分析软件危机的原因,探索用工程的方法进行软件生产的可能性,即用现代工程的概念、原理、技术和方法进行计算机软件的开发、管理、维护和更新。

软件工程正是一种通过工程、科学和数学的原则与方法研制、维护计算机软件的有关技术及管理的方法。但事实上,软件工程的诞生只能大大减少软件开发成本并提高软件质量,不能从根本上消除软件危机。而之所以给软件生存周期划分阶段,是因为软件也是一种产品,同样存在生存周期。把软件生存周期划分为几个阶段后,软件开发按照每个阶段的基本任务进行并产生相应的工作结果,这样有利于对软件开发过程进行管理,有利于提高软件产品质量。

5. 软件人才教育与职业规划

  5.1 软件产业的人才需求和现状

可以说,最近几年,中国的软件产业正处于高速发展的阶段。正因如此,现在的软件市场急需高素质的软件人才。但是,我国目前的软件人才却是供不应求。其中具体表现在两个方面:一是软件人才的数量远远无法满足企业发展的需要,企业需求的人才数和现有的人才数差距正在逐年增大。二是软件人才的结构不合理,大多数从事软件行业的人,一般都集中在中级层次,但真正能够应用前沿技术,有能力领导并管理团体共同完成大项目的高尖端人才非常稀缺。

5.1.2 技术人才的结构分析

    对一个软件企业来说,软件人才应该呈金字塔形。我们可以将软件人才分为三类。

第一类:既懂技术又懂管理的软件高级人才。这一类人才要求具有较强的创新能力和组织管理能力,既是技术能手,又是管理骨干,能够带领团队不断开发新的项目。

第二类:软件工程师。这一类人员为系统分析及设计人员,能够将开发项目形成系统设计思路并组织实施,并能对编程人员的工作进行指导、测试和验收。

第三类:熟练的程序员,即通常所说的“软件蓝领”。这一类人员要求知识面比较广,能够熟练使用1~2种比较常用的软件编程工具,具备良好的职业素养和团队合作精神。 [6]

以上三类人员可以用图二来表示:

 

浅析软件工程发展历史及前景和专业人才培养_第2张图片

 

图二 软件人才金字塔结构

  5.2 软件毕业生的素质要求

素质要求一:

拥有有良好的编程能力,个人编码能力决定了任务完成的速度,也就意味着整个项目的效率由个体的效率决定。这也就意味着软件毕业生至少需要精通一门编程语言,比如常用的C/C++和国际上最流行的Java语言,并且能够明白原理且熟练应用。有能力的可以再去尝试尝试最近几年兴起的语言,比如GO语言,也是对编程能力的一种补充。

素质要求二

制度意识和团队精神。企业的管理化要求,意味着软件编程人员需要遵守制度,而且很多时候,编程都是一个团队,甚至很多团队共同完成的任务,这也就意味着需要团队精神去融入一个集体,共同完成目标。

素质要求三:

英语能力。程序的主导语言一般都是是英文,虽然现在很多开发软件都有中文版,但作为一名合格的软件毕业生,熟练掌握英语,有助于查看外文文献,掌握前沿的编程技术,这对编程技术的提升有很大帮助。

基本素质四:

终身学习的意识。软件行业是一个不断创新的行业,所以也就意味着软件人才需要不断地学习新的知识。可以说,学习新知识对于软件人来说,不仅仅是一种知识层面的学习,更是一种能够保证我们研发动力的条件。所以身为一名软件人,终身学习的理念不可或缺。

5.3 个人学习计划

大一:大一的学习过程,是一个奠定基础的阶段。在这个时期需要做的事是要打牢各方面的基础,尤其是专业课的编程能力,因为软件工程是一个注重理论与实践相结合的学科,所以需要注重锻炼自己的编程思维。除此之外,英语和数学对于软件工程的学习同样重要。脚踏实地学好专业基础课程和数学、英语,是顺利学习专业能力的基础。合理安排计划,认真学习C++语言。在基础课学习方面,要珍惜时间,在大一一年学习中认真学习英语,积极准备英语四六级的考试。因为数学能力对于编程能力也有帮助,所以数学的学习也极为重要。在校期间同时要积极参加社团活动或者各种比赛,这不仅能让自己更好地融入大学生活,而且可以锻炼团队合作能力。

大二:在这在大二一年里,同样要稳抓基础,但要争取钻研更加的深入。尤其是编程能力,需要更加深入地学习。在这一阶段应该多多浏览相关书籍,提高自己的技术能力。同时也要重视基础学科,争取拿到较高的绩点,为日后的保研或考研做准备。 学习之余也要扩大自己的知识面,培养自己的爱好。在学习知识的同时,保持良好的心态,这样才能保持对学习的热情。

大三:关注考研,实习等信息,学会对自己所学的知识进行系统化的总结,了解自身的优势和定位,为之后的实习明确方向。同时,也要珍惜大学的资源,多多参加比赛以及和自己专业相关的的的活动,在实战中锻炼编程能力,同时也可以磨砺自己的心态。特别是在团体赛中,比如如何高效地管理一个团队,在这种团体赛中也可以得到锻炼。同时,也可以寻找实习的机会,在暑假的实习过程中积累经验,进一步了解社会对人才需求方向及具体要求。

大四:尽快完成自己大学的学业任务,并且对未来的方向进行规划。通过自我分析,选择适合自己的道路。大四时期,也可以选择参加实习,在实践中进一步检验自己的专业能力。当然,也要开始着手于保研,考研的准备工作,为人生的下一步发展做好准备。总之,计划的实行往往需要根据自己的实际情况,做出果断的决定,为下一步的去向做好充分的准备。不能犹豫徘徊,也不能盲目跟从他人,根据自己的实际情况来为未来作出规划。软件工程专业是一门看重专业技能的学科,只有有能力的人才能在社会上立足,所以,我们要坚持终身学习,在人生的每个阶段都要有明确的目标,并把目标细化,付诸实践。大学的丰富教学资源帮助我们更好地成长,应在这些可以专心学习的时间里努力付出。成长为一个真正的软件人

6. 总结

面对互联网应用发展的大潮,软件行业正面临着一系列新的要求与挑战,只有不断创新,掌握独属于自己的技术才能在互联网的浪潮中扬帆起航。可以预见,对于一名软件人而言,未来的网络和软件领域,不仅是一个实现梦想的地方,而且是一个群雄争霸的地方。正因如此,我们要清晰地认识到中国在软件行业与西方一些国家相比仍有不足,但这一次的网络发展浪潮我们没有落下,随着软件实力的提升,我们终将实现从跟跑者到陪跑者,再到领跑者的蜕变。我也始终相信,在国家的重视和对人才的培养下,将有一大批软件人才带领中国的软件行业走向更加光明的未来。

参考文献

[1] 张效祥,徐家福.《计算机科学技术百科全书》.清华大学出版社.2018:p.6-7

[2] 陆慧恩,禇秋砚.软件工程[M].中国工信出版社,人民邮电出版社,2017:p.1-2

[3] 郑宇.浅谈软件工程技术的发展历程.《数字技术与应用》2017年第05期

[4] 张海藩.《软件工程导论》:清华大学出版社,2008

[5] 任恒妮.软件生命周期中需求分析探讨[J].科技风,2014,(23):51-51

[6] 孟浩.计算机软件专业人才需求分析报告[J].科技风,2017,(12):44-46

你可能感兴趣的:(软件工程导论,软件工程)