软件开发发展趋势分析图(应用软件开发的发展趋势)
本篇文章给大家谈谈软件开发发展趋势分析图,以及应用软件开发的发展趋势对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、请教未来软件工程专业的发展趋势,请一定留下您的高见。
- 2、软件行业发展趋势分析
- 3、2022年软件开发的十五种趋势 - geekculture
- 4、软件开发的未来发展前景怎么样?
- 5、未来软件开发的发展趋势如何?
请教未来软件工程专业的发展趋势,请一定留下您的高见。
软件工程技术的发展趋势
1, 软件工程是什么
随着信息技术的发展,软件作为一种信息技术的主要载体日益渗透到社会政
治,军事,经济,文化乃至生活的各个方面和各个层次.软件无所不在,其需求
愈来愈多,复杂度愈来愈高,可用性要求愈来愈强.如何高效地开发和生产可靠,
可信的软件,是软件领域一直必须面对的问题.
20世纪60年代,随着第三代计算机的产生,计算机的硬件性能发生了翻天
覆地的变化,运行大型的复杂软件系统已经成为可能.然而,相应的软件开发技
术却难以满足大型软件系统的开发需要,因而造成:
1. 大多数大型的软件开发项目的成本都超过预算,开发进度一再拖延;
2. 软件产品质量不可靠,大型软件系统存在bug几乎成为不可避免的问题;
3. 软件产品难以维护;
4. 软件产品的开发成本过高;
5. 软件产品开发的效率跟不上计算机硬件发展以及用户需求的增长;
软件技术跟不上硬件技术发展而造成的诸多问题被称作"软件危机"
(Software Crisis).为了解决软件危机,1968年北大西洋公约组织(NATO)的
计算机科学家在德国召开的国际学术会议上第一次提出了"软件工程"的概念,
希望通过系统化,规范化,数量化等工程原则和方法来实现复杂软件系统的开发
和维护.
按照Webopedia词典中的定义,软件工程是"研究如何开发大型应用系统的
计算机科学学科.软件工程不仅覆盖构建软件系统的相关技术层面问题,还包括
诸如指导开发团队,安排进度以及预算等管理层面问题" 由这个定义可以看出,
软件工程不仅仅包括编写程序代码所涉及的技术,它包括所有对软件开发能够造
成影响的问题.Brook在1987年指出,不存在任何一个单一的开发技术或管理
技术能够解决软件工程所面临的所有问题.因而软件工程是一个包括一系列概
念,理论,模式,语言,方法以及工具的综合性学科.图1中,我们给出了一个
软件工程技术的总体框架.可以看到,软件工程技术可以分为产品实现层技术以
及开发管理层技术.其中,产品实现层技术涉及与特定软件系统开发相关的问题,
为在软件生命周期的各个阶段实现软件产品提供技术支持;开发管理层技术通常
不针对特定的某个软件开发项目,而是为管理和改进软件组织所有的业务活动提
供技术支持,例如如何使用适当的方法管理软件开发过程中所需要执行的各个活
动,以便在特定的软件项目中系统的展开软件工程的层技术,支持软件组织的业
务实现,从而控制软件产品开发的成本,提高生产的效率,保证和改进软件产品
的质量.
系统设计
设计方法,
设计模式,
设计语言,
图形符号标识,
设计工具.
系统实现
编程语言,
编程环境,
编程工具.
验证和确认
软件测试方法,
软件测试工具,
软件检测方法,
软件检测工具.
操作与维护
维护方法,
维护工具
需求描述
需求描述语言,
形式化语言,
图形符号标识,
需求分析方法,
需求确认,
需求管理,
需求工具.
软件配置管理 配置管理工具,配置管理标准及规程,变更控制
软件成本估算 成本计算模型,专家决策,估算与分析
软件质量管理 质量保证,质量计划,质量控制
软件过程改进 软件过程标准,如:ISO9001,CMM,CMMI,SPICE等
软件过程建模 软件过程建模方法,建模语言,软件工程环境,PSEE系统,CASE工具
产品实现层开发管理层
图1 软件工程技术的总体框架
2, 基本概念
软件工程技术在近半个世纪的历史中,得到了长足而迅速的发展.在经历了
多次浪潮的冲击之后,我们有必要先澄清一些基本的概念.
2.1 软件
IEEE将软件定义为"计算机程序和相关的文档",软件产品一类提供给具体
的客户使用,另一类提供给大众市场.ISO 9001:2000对软件的定义为"一个好
软件的基本属性表现为,软件实现了客户需要的功能和性能,能够维护,可以让
用户在指定环境和条件下依赖和使用".
一般来说,软件是信息的载体并且提供了对信息的处理能力,例如对信息的
收集,归纳,计算,传播等等.虽然计算机硬件设备提供了物理上的数据存储,
传播以及计算能力,但是对于用户来讲,仍然需要软件系统来反映用户特定的信
息处理逻辑,从而由对信息的增值来取得用户自身效益的增值.因而从本质上讲,
软件可以被理解为一种逻辑上的信息处理设备,该设备具有用户所需求的信息处
理能力.一个好的软件应该能够为用户提供有价值的信息输出,从而为用户带来
效益.
2.2 软件工程与计算机科学
软件工程是一门工程学科,关注于软件生产的各个方面和生产方法.计算机
科学关注所有计算机相关的理论和基础.软件工程属于计算机科学的范畴,主要
关注开发和交付可用软件的理论和实践.
软件工程方法包括: 软件系统模型,注释,规则,设计建议(advice)和过
程指导等等.
2.3 软件工程与系统工程
系统工程关注开发基于计算机的系统的所有方面,包括硬件,软件和过程.
软件工程是其中的一部分.
2.4 软件过程和过程模型
ISO9000:2000将过程的定义为"任何使用资源将输入转化为输出的活动或
一组活动可视为一个过程".ISO15504将过程定义为"能够将输入转化为输出的
一组相互关联的活动".CMM将过程定义为"人们用来开发和维护软件及其相
关产品的一组活动,方法,实践和转化."
由上面的几个定义可以看出,软件过程可以被理解为开发和软件产品的一组
活动以及与实施这些活动相关的要素.这里我们给出一个更加细致的软件过程的
定义――软件过程是设计,开发,应用和维护软件产品的一组相互关联的活动,
方针,组织结构,技术方法,规程以及工作产品.它定义了对软件开发进行组织,
管理,度量,支持和改进的途径.
从这个定义可以看出,软件过程是一个由诸多与实现软件产品相关的要素组
成的复杂系统.如何将这些要素有机地组合在一起,从而有效并且高效地实现软
件产品开发是软件过程技术所关注的问题.
相应地,我们可以定义软件过程模型为――使用适当的方法表达的一个软件
过程抽象描述.模型是对其所表示的现实的抽象,是一个部分的描述.软件过程
模型通常包含与各种软件过程要素相关的模板或类型,或者它们的实例.模型对
现实的抽象描述了一组现实对象的共同特征,并且在特定的环境,参数和约束条
件下能够被实例化为现实的对象.从这个意义上讲,软件过程模型可以被理解为
"对一组软件过程的共同特征的抽象描述".软件过程由一组软件过程要素及其
相互的关系组成,软件过程模型是对软件过程要素及其关系的抽象描述.
2.5 软件成本
软件成本指开发软件产品所需要花费的资金.一般来说,开发一个软件项目
的成本包括以下几个方面:
1.软硬件成本,包括维护费用;
2.旅行及培训费用;
3.工作成本(effort cost).
对于大多数软件项目来说,其成本中最主要的部分是工作成本.工作成本并
不能简单的理解为对参与项目的软件开发人员支付的薪金.软件组织通常采用将
其运营组织的总成本除以参与开发的人员数量的方式核算工作成本.工作成本一
般包括:
1.办公环境的采暖,照明等费用;
2.组织管理人员的费用,例如财务,行政管理人员,经理等等;
3.网络及通讯费用;
4.辅助基础设施管理费用,例如图书馆以及娱乐设施费用等;
5.开发人员的社会保障金,健康保险等等;
工作成本通常是开发人员薪水的两倍或以上.
2.6 计算机辅助软件工程――CASE
CASE是一个软件系统,用于对软件过程的活动提供自动化支持.CASE系
统常常用作方法支持.
2.7 软件质量
尽管ISO9000等对质量有定义,但在一种大众的观点中,质量并没有明确的
含义.质量是一种多维的概念,包括客观的实体,实体各个方面的视角,以及实
体的质量属性.
从大众的观点看,通常认为质量是无形的,没有明确的特征.它可以被讨论,
感觉和判断,但不能度量.大多数人认为质量类似于美国联邦法庭关于淫秽的说
法,"当我看见它的时候我知道". 一些关于质量好,质量坏的说法都没有明确
的定义.这种情况反映公众是可以接受从不同的角度去解释质量.这也隐含着认
为质量既不能被控制和管理,也不能被量化.另外也有一种观点认为,质量是奢
侈,分等级并且可以体验的.一些昂贵复杂的产品被认为比他们伸手可及的产品
具有更高的质量.譬如根据实际的可靠性和维修记录,卡迪拉克(cadillac)是好
汽车, 雪佛兰(Chevrolet)不是;高保真环绕系统是高质量的系统,单声道收
音机就不是.从这样的观点看,质量被归约到一类具有复杂功能的昂贵产品.
大众观点中的误解和含混,非常不利于工业界对质量的改进.所以质量应该
被准确,可理解,可操控的方式定义.针对这一点,Juran等人指出,质量是"适
于使用",Crosby指出,质量应该是"顺应需求".这两种观点是一致的,目前
被大多数质量专家所采纳."适于使用"考虑了客户的需求和期望,包括产品和
服务是否适合于他们的使用.不同的客户可能以不同的方式使用产品,这就意味
着产品必须拥有多种元素来适合使用.按Juran的观点,每一个元素就是一个质
量特征,他们可以归为一些类,作为适合使用的参数.最重要的两种参数是设计
质量(quality of design)和符合质量(Quality of Conformance).设计质量是对需
求的确定和说明,而符合质量就是符合需求.满足需求,意味着需求必须被清楚
地描述,不会导致误解.在开发和生产的过程中,要持续地度量以确定是否满足
需求,不满足的部分被认为是缺陷.
前面对于软件的定义可以看出,软件作为信息技术的一个载体,其质量应该
与其所能够为用户提供的信息处理能力,或者更直接地讲,用户对于软件产品的
质量要求更多是关注于软件所能提供的有用信息,而非软件产品本身.很多软件
产品失败的原因恰恰是因为忽略了这一个根本问题.
此外,用户对产品的需求并不仅仅与产品的功能性特征相关.用户为了取得
产品需要为产品的提供方支付一定的费用(产品的价格),而用户仅仅在其通过
使用该产品取得的效益(或者更一般地讲,获得的效用)高于其支付时,才愿意
购买该产品.因此,产品的质量并不能够在忽略用户支付条件的前提下无止境地
提高.对于用户来讲,完美但是价格昂贵的产品是无法接受的,一个能够最好的
满足用户需求的产品应该是"刚刚好"(just good enough)的.
3, 软件工程发展的历史
从1968年以来,软件工程有了很大的发展,并对软件产品的改进也是显而
易见的.我们对软件开发的活动有了更好的理解,有了更有效的方法支持软件系
统的设计和实现.这些新的方法和技术也有效地减少了大型复杂系统的开发成
本.然而,不可否认的是,软件组织在预算成本和预计工期内交付客户期望的复
杂系统仍然存在问题.因此,有人评论软件工程一直处在慢性的,持续痛苦的状
态.
总的看来.计算机技术的发展趋势呈现为:硬件价格降低,人力费用增加,
应用复杂度增加,社会对软件的依赖程度增加,具体如表1所示:
表1
工具 硬件 软件工程技术
1950
2000
机器码
汇编
第三代语言
4GLs
AI 语言
面向对象
Vacuum tube 电子管
Transistors 晶体管
Semiconductors 半导体
Integrated circuits集成电路
Parallel Processing 并行处理
VLSI 超大规模集成电路
结构化程序设计
功能分解
结构分析
以数据为中心的分析
面向对象的分析
3.1 结构化程序设计
结构化程序设计(Structured Programming, SProg)方法始于60年代后期,
典型的代表是Goto语句从软件中驱逐出来.其动机就是改进软件源码的结构,
增加软件的鲁棒性和可靠性.但随着系统复杂度的提高,单独使用结构化方法并
不能保证软件的质量.尽管使用了结构化方法,开发出来的软件依然难于理解和
使用.于是导致了功能分解技术的出现.
3.2 功能分解
功能分解(Functional Decomposition, FD)技术是一个过程方法,它将要实
现的最终系统分解成一系列逐步细化的概念化的模块(conceptualization).概念
之间的关系用结构图(structure Chart)来表示.FD通常在面向过程的paradigm
中使用.这些系统的概念模块是以面向过程的方式定义的.(每一个模块代表一
个过程或者子过程).FD的目标提供一种方法通过抽象来逐步求精地理解系统,
其开发的产品具有良好的结构.系统的概念模型和表示与源代码的结构是一致
的.这种方法今天依然在使用,但结构图已经不能提供足够的信息来保证可以得
到一个结构良好,准确的解决方案了.为了增加一些必要的信息,出现了结构化
分析与设计方法.
3.3 结构化分析与设计
结构化分析与设计(Structured Analysis and Design, SAD)的降临标志着第一
个软件工程方法的诞生.它用一组技术共同来表示整个软件开发的过程.SAD
基于SPrag和FD,并进一步用抽象的技术来产生模块化的输出.随着SAD的引
入,最终实现系统的交付变成一系列的里程碑而不仅是一个里程碑.分析要解决
的问题以及解决办法的设计都被认为是软件开发过程的重要步骤.
3.4 以数据为中心的设计方法
以数据为中心的设计方法(Data-Centered Design Method, DCM)的贡献是在
结构化分析中扩充了数据模型,其目的是确定整个组织的数据需求,创建一个中
心的,集成的数据库.单独的应用程序开发并从中心数据库取数据.数据模型用
ER模型表示.ER最初的目的是为关系数据库的设计,建立了数据模型之后,应
用程序的开发就可以用结构化的分析和设计来关注中心数据库的数据.
3.5 面向对象的设计方法
面向对象的方法(Object-Oriented Method, OO)是软件工程方法的又一次飞
跃.对象是一个具有一组状态的实体,并封装了附加于这些状态的操作.状态描
述了对象的属性或特征,操作描述了对象改变其状态的方法以及该对象为其他对
象所提供的服务.面向对象方法认为,人类生活在一个由对象(Object)组成的
世界中.对象可以被归类,描述,组织,组合,创建和操纵.面向对象方法是一
种模型化世界的抽象方法,结构上具有良好的高内聚低耦合特性.采用面向对象
技术设计和开发的软件系统更易于维护,在对系统进行修改时,能够产生较少的
副作用.同时,面向对象技术提出了类,继承,接口等等概念,从而为对象的复
用提供了良好的支持机制.因而采用面向对象技术对软件产品进行设计和开发,
也能够有效地提高软件组织的开发效率.
90年代开始,面向对象方法已经成为软件组织分析,设计和开发软件产品
的首选范型.
3.6 以过程为中心的软件开发方法
前面的各种软件工程方法严格说来,都属于软件产品的实现层技术.它们提
供了一系列方法,技术和工具支持软件被设计为具有良好定义的结构,使得其复
杂度可以得到控制,软件易于实现,易于维护和移植.这些方法和技术在一定程
度上可以改进软件质量,可靠性,结构以及成功交付软件概率.但事实上,单纯
依赖实现层技术并不能够保证软件组织高质量并且高效地开发软件产品,即使到
了今天,软件危机依然存在,甚至由于应用领域的普及,需求的频繁变化,有着
愈演愈烈的趋势.
1. 软件的设计方法出现转移.面向业务过程的方法被面向对象的方法所代
替.但许多人认为OO的方法在工业界使用还不足够成熟.虽然事实并非如此.
2. 一些非技术的管理人员常常把软件理解为是一组计算机指令.从这个观
点看,只有一种任务是软件开发,那就是写指令.技术人员常常通过度量代码行
的进展来迎合管理人员的要求.但软件工程技术的目标是改进代码的质量而不是
代码的数量,所以工业界一些人常常认为软件工程技术对软件开发过程几乎没有
贡献.事实上,当实践好的软件工程技术时,软件开发人员有时会从事一些并不
直接产生代码的活动,这些活动的目标是得到一个模块化的,鲁棒的,可靠的解
决方案.但常常人们只关注了最终实现系统的代码行数量,实现的功能,以及测
试出来的Bug,对软件的形成过程没有给予足够的重视.
显然,信息技术的飞速发展,把软件推到了一个前所未有的重要高度.随着
软件的应用范围,复杂度和规模的急剧增大,传统软件工程基于实体驱动和确定
目标,有序控制的开发模式开始让位于Internet环境下以过程为中心,基于协同
驱动和动态目标,实体聚合的开发模式.软件的生产必然向着工业化和过程化的
方向发展,支持软件开发工业化的方法和技术已经成为影响软件产业发展的重要
因素.
4, 软件过程技术
软件过程概念的形成可以追溯到20世纪60-70年代.1969年,Lehman花费
了一年时间研究IBM公司的编程实践,并首次提出了"编程过程"(programming
process)的概念――"将一个微小的想法转化成二进制程序代码的所有相关技术
和活动的集成".这一概念初步确立了软件过程概念的基础.
人们对软件过程的认识经历了一个从将软件过程当作一个"黑盒子"过渡到
对软件过程产生透彻认识的过程.将软件过程作为一个"黑盒子"来看待,软件
产品(过程输出)则仅仅依赖于产品的需求(输入).在这种模型中,产生软件
产品的过程没有被描述出来.使用这种模型的一个问题是难以估计实现软件产品
的时间和成本.此外,在软件开发项目初期,软件产品的需求往往是非形式化的
和不明确的,因而造成软件开发的输出在很多情况下不是用户所希望的产品.
为了降低软件开发的风险,人们需要打开软件过程的"黑盒子"从而对生成
软件产品的软件过程作出更清晰细致的了解.因此,研究人员提出了软件生命周
期的概念,例如Royce提出的瀑布模型以及Boehm提出的螺旋模型等等.软件
生命周期定义了软件产品开发中的所要经历的一系列不同的阶段,一般包括:需
求分析和规约,设计,开发,确认,安装,应用,维护以及退役等等.同时,软
件生命周期还为如何实现这些不同的开发阶段定义了相关的概念和指导.总的来
说,软件生命周期定义了软件过程的框架和原则.它并没有详细描述软件过程的
活动,组织形式,工具和操作规程,以及开发方针和约束.软件生命周期模型是
定义软件开发如何进行的一个重要的起点,但是单纯应用软件生命周期来指导和
控制软件开发实践仍然是不足的.
20世纪80年代,软件过程技术开始形成一个独立的学科.软件过程的概念
建立在软件生命周期的基础之上,并且提供了一系列更为广泛和全面的概念来设
计和组织与软件开发活动相关的各种要素.软件过程技术是一个集成了组织,文
化,技术以及经济等多种因素的综合性学科.有效地识别,定义,管理和改进组
织的软件过程,对于一个软件组织实现其经营目标,改进其业绩是至关重要的.
总的来说,软件过程技术的意义在于:
1. 在产品实现前估计产品开发的进度和成本:软件组织在系统地识别和管理
其所使用的过程基础上,能够在产品实现之前策划产品从设计,开发到实
现的全部过程.对过程的策划来源于组织对自身业务活动的分析以及以往
项目的成功经验.基于这些分析和经验,组织能够有效地估计产品开发的
进度和成本.
2. 有效地利用资源,降低成本,缩短周期:资源是实现软件产品开发的必要
条件.通过确定产品实现的过程,软件组织就可以根据过程实现所需要的
资源要求有目的地并且有效地投入和利用资源,防止资源不足或浪费.有
效地利用资源可以降低产品开发的成本,提高软件开发所产生的效益,从
而使顾客和所有其它相关方受益.
3. 确保软件产品开发及软件产品质量的稳定性和持续性:软件过程的一致遵
循和有效控制能够使产品的生产和产品的质量保持持续稳定的状态,使得
软件产品的质量变成可预期的指标.持续稳定的开发过程能够有效地降低
不合格的产生,从而降低开发的成本,提高软件产品的质量.
4. 对软件产品开发的全过程进行有效地监控,尽可能早地发现问题或可能产
生问题的趋势,并予以解决:软件过程的识别和控制使得对软件产品生产
过程的监控成为可能.通过对过程特征的考察和分析,软件组织能够确定
有效的监控措施以确保过程的执行不会偏离预期的目标或超过规定的阈
值.通过对过程参数的监测和分析,组织能够在过程出现不稳定或出现变
坏的趋势时及时采取必要的措施,防止问题的产生.
5. 发现改进的机会,以及确定过程改进实施的优先次序:软件组织持续改进
其业绩的重点在于过程改进.对于改进产品质量来说,改进其生产过程是
更根本的.过程定义为过程改进提供了必要的基础.良好定义的过程有利
于对过程特点和性能的考察和分析,也有利于取得过程改进所需要的信
息.同时,系统地考察组织内的过程,分析其相互关系,有利于发现改进
的关键区域,确定过程改进实施的优先次序.
6. 有效的实现和改进软件产品的质量,使所有相关方获益:良好定义的软件
过程能够持续稳定地实现产品的质量.软件组织能够通过不断地改进软件
过程从而使其产品更好地满足顾客的要求和期望.产品质量的提高,组织
过程的改进最终能够使所有相关方获益.
7. 再现组织自己或其他组织的成功经验:软件过程模型能够使软件组织将以
往的成功经验以正规的形式予以保持,并且在未来的项目中予以重现.组
织还可以参考其他类似组织的好的管理和生产经验,并以软件过程模型的
形式确定下来,从而指导自己的生产和管理,为自己带来效益.
4.1 软件过程管理及软件过程改进
80年代初,软件产业逐步进入过程化生产的时代,同时一些重要的国际标准
和模型纷纷提出,其中最主要的三个流派是:CMM/PSP/TSP,ISO 9000 系列和
ISO/IEC15504 标准,其中以美国国防部支持的CMM/PSP/TSP流派研究得最为
深入,在软件领域应用得最为广泛.
4.1.1 CMM系列模型
软件工程20世纪60年代开始研究支持软件开发活动的CASE技术和工具,
其间研究硕果累累,但对软件产业的发展却没有起到预期的作用.此时人们意识
到,单纯依靠软件产品的实现技术并不能够解决软件危机所带来的问题.软件产
品的生产是一个多人协作的复杂活动.成功地开发大型软件系统,还需要相关的
方法和技术对软件开发过程实施管理.
20世纪80年代,卡内基-梅隆大学(CMU-Carnegie Mellon University)的
软件工程研究所(SEI-Software Engineering Institute)在美国DoD的支持下,提
出了评价软件供应商过程能力的模型CMM(Capability Maturity Model).1987
年,SEI首先提出了能力成熟度框架,并于1991年和1993年陆续推出了CMM
模型的1.0版和1.1版.此后SEI针对具体软件生产要求,进一步推出SA-,SE-,
IPPD-,P-CMM等一系列成熟度模型.为了和其它模型相区别,SEI将最初的CMM
更名为SW-CMM.CMM将组织的成熟能力划分为五个等级,这五个等级定义了
度量软件组织生产过程成熟度的标准,以及评估软件组织生产能力的标准.
CMM模型为软件组织提供了一个分层的,螺旋上升的过程改进途径.软件
过程管理涉及很多问题,CMM最大的贡献在于指出了软件组织处于不同的能力
成熟度级别时,所应关注和改进的关键问题(关键过程域).这就使得软件组织
能够了解在其当前状态下所最迫切需要解决的问题,从而更加有效地实施过程改
进.
为了整合现有CMM模型和相关的工作,1998年,SEI启动了CMMI(CMM
Integration)计划,并于2000年8月11日推出CMMI SE/SW v1.0正式版.已经
开始的SW-CMM v2.0的草案停止推进并被集成在CMMI框架中.目前已经推出
集成了系统工程,软件工程,集成产品和过程开发,供应商管理四部分的
CMMI-SE/SW/IPPD/SS(CMMI for Systems Engineering,Software Engineering,
Integrated Product and Process Development,and Supplier Sourcing)1.1版. CMMI
通过提供统一的过程改进框架,消除了不同模型之间的不一致性和重复性,同时
也降低基于模型进行过程改善的成本.另外,CMMI提供了两种模型表示方式―
―分级(staged)模型表示和连续(continuous)模型表示.
CMMI 分级模型主要对应于已有的CMM模型,依然分为五个成熟度级别,
CMMI连续模型摒弃了传统的台阶式上升的模型.它认为软件组织的改进是持续
的,并从它自身最希望的,可以给组织带来效益的地方进行.因此组织完全有理
由把某些过程域的成熟度能力提高到很高级别,而把其它某些过程域继续留在较
低级别.连续模型为组织的过程改进提供更加方便的途径,并且在结构上和正在
制定中的ISO15504兼容.
CMM的出现带来了软件产业发展新的浪潮,为软件大规模生产带来了生机.
CMM以及相关技术的推广和应用使人们逐渐认识到:技术提高和过程改善同时
进行,才是促进软件产业发展的最佳途径.
此外,人对过程改进和技术提高依然起着非常重要的作用,如图2所示.
人技术
过程
图2:人,过程和技术的三角形关系
从图2我们可以看到,人,过程和技术共同构成了一个相互支持,相互制约,
均衡发展的三角形.事实上,人是过程和技术的主体,人,过程和技术三位一体
构成现代企业全面质量管理的核心内容.其中:
过程:指产品生产的过程,如计划,跟踪,度量,审计等等,以及过程
流程,如生产线,工序等
技术:指产品生产的技术,譬如工艺,软件的需求分析技术,设计技术,
编码技术,测试技术等等
人:指可以胜任过程管理和技术活动的人力资源.这就涉及到要招聘合
适的人才,对组织内的员工进行培训,提供人员之间有效沟通的
渠道,以及客户/供应商/合作伙伴之间的关系维护
可以看到,现代企业(组织)管理都围绕这个铁三角在运行,过程是三角形
的支点,过程通过一系列相互关联的方针,程序和规则将企业的经营活动串起来,
形成企业的业务流程;人是过程的执行者,其行为规范要受到过程的约束,并在
执行中接受必要的服务支持,通常表现为一组支持过程;技术则要通过过程来实
现,通常表现为一组工程过程.可见企业中一切活动都是过程,或者过程的一部
分.过程成为企业(组织)管理的中心.
对软件组织而言,软件生产环节中的所有过程组成软件过程.CMMI将软件
软件行业发展趋势分析
自改革开放起,我国孕育了无数软件企业、诞生了许多软件英雄,而中国软件产业也在经历了萌芽与低谷、摸索与转型之后,开始走向世界。2019年我国软件行业实现收入71768亿元,2020年进一步增长,有望突破80000亿元,软件行业正处在起飞的前夜。
软件行业在国民经济中的地位逐步上升
随着近年来科技的发展,软件行业在国民经济中所占比重逐年上升:2013-2019年,软件行业收入占我国GDP的比重从5.14%上升至7.24%,2020前三季度软件行业收入占我国GDP的比重为8.08%,软件行业在国民经济中的地位日益重要。
软件行业规模逐年扩大
近几年来,我国软件和信息技术服务业运行态势良好,收入和效益保持较快增长,吸纳就业人数稳步增加;产业向高质量方向发展步伐加快,结构持续调整优化,新的增长点不断涌现,服务和支撑两个强国建设能力显著增强,正在成为数字经济发展、智慧社会演进的重要驱动力量。
2019年,全国软件和信息技术服务业规模以上企业超过4万家,累计完成软件业务收入71768亿元,同比增长15.4%。2020年前三个季度,我国软件业完成软件业务收入58387亿元,同比增长11.3%。
信息技术服务占据绝对主导地位
近年来,我国软件行业各细分市场发展形势呈现出全部上涨的局面,即软件产品、信息技术服务、信息安全产品和嵌入式系统软件收入市场规模都出现了增长。
具体来看,信息技术服务保持领先,产业继续向服务化、云化演进。2020年前三季度,信息技术服务实现收入35162亿元,在全行业收入中占比为60.2%,在软件行业中占据绝对主导地位。其中,大数据服务收入1530亿元;集成电路设计收入1562亿元;云服务收入1453亿元;电子商务平台技术服务收入6028亿元。
信息安全产品和服务收入稳步增加。2020年前三季度,信息安全产品和服务共实现收入959亿元,占全行业收入的1.7%。
嵌入式系统软件已成为产品和装备数字化改造、各领域智能化增值的关键性带动技术。2020年前三季度,嵌入式系统软件实现收入6365亿元,占全行业收入比重为10.9%。
东部地区为主力军
软件行业地区发展大致呈献出东部地区稳步发展,中西部地区软件业加快增长的局面。2020年前三季度,东部地区完成软件业务收入46891亿元;中部地区完成软件业务收入2641亿元;西部地区完成软件业务收入7119亿元;东北地区完成软件业务收入1736亿元。四个地区软件业务收入在全国总收入中的占比分别为:80.3%、4.5%、12.2%和3.0%。
软件行业技术发展趋势
在软件产业发展模式上,和美国以及日本相比,我国的软件设计能力薄弱,尚不足以设计出可以和国外优秀软件公司匹敌的软件产品,市场竞争力相对薄弱。与印度、爱尔兰、以色列等国家相比,我国软件国际化政策导向不明显、不清晰、不强烈,软件出口比重小。近些年来,中国政府对软件行业的扶持力度不断加大,随着技术的不断进步与创新,未来软件行业技术将呈现网络化、服务化、智能化、平台化以及融合化的发展趋势,具体表现如下表所示:
—— 以上数据及分析均来自于前瞻产业研究院《中国软件行业市场前瞻与投资战略规划分析报告》。
2022年软件开发的十五种趋势 - geekculture
以下是通过参加了一些关于软件开发的会议搜集到的软件开发趋势:
1. 可观察性[跟踪、监控和记录]是至关重要的!
你正在开发你的软件,并且你已经准备好部署它。所有的测试都通过了,测试覆盖率也达到了一个不错的水平。知道了这一点,我们就可以部署我们的代码,并继续平静地工作。尽管这不是最理想的情况(也很罕见),但我们的代码仍然可能失败。是的! 因此,开发人员需要一直观察他们的代码,并让它一直报告指标。万一有什么故障,你需要让你的系统准备好向你提供日志。
可观察性是至关重要的。没有它,开发者就是瞎子。它让我们有机会随时对系统中发生的每个问题做出反应。
2. 同时使用 "无服务器 "和 "有服务器 "方法是一个很好的做法。
在这种情况下,我们可以从两种软件开发方法中获益。
无服务器是一种在没有任何服务器参与的情况下运行应用程序(看似)的方式。当然,这是一个重大的简化--总是有服务器参与其中;只是在这种情况下,你不需要对它们做任何事情,而且它们是预先配置好的。它被吹捧为新的黑 科技 ,除了......它并不是解决所有疾病的完美疗法。首先,你不能配置底层服务器,正如我们之前提到的。你也不能真正知道引擎盖下有什么。这个主要的缺点同时也是这个方法的主要优点。你不需要配置任何东西,所以与其说是部署 担心,不如说是部署 忘记。
无服务器或有服务器的解决方案都有好处。在现代系统中,通常会加入两种方法来获得大部分的解决方案。
3. 容器化一切! Kubernetes是一项热门技术!
并非所有的软件开发趋势都是好主意。你还记得CoffeeScript或Ruby吗?很遗憾,我们有。幸运的是,Kubernetes(K8S)看起来并不像要加入这两者的悲哀谷中。K8S正在使 DevOps 专家的生活变得更加、更加、更加容易。
以下是引入容器化和容器协调作为你的技术战略的核心条款所能带来的好处。
Pearson案例研究 | Kubernetes:
缩短新功能的上市时间,将配置速度从几个月提高到几分钟,并确保为一家服务于 7500 万用户的教育公司提供高 SLA。
Prowise 案例研究 | Kubernetes:
应用程序版本之间的停机时间为零,新部署几小时到几秒,在包含许多产品的复杂开发环境中,新版本的速度提高了 3 倍。
Zalando 案例研究 | Kubernetes:
欧洲 时尚 电子商务领导者使用 K8s 实现可 扩展性 ,支持多种业务用例,如当日交付、多租户,增加其产品和地理范围,并使他们能够重写和创建所有 SaaS 产品他们一直用作定制软件。
阿迪达斯案例研究 | Kubernetes:
电子商务网站的加载时间减少了一半,每天发布多次而不是每月一次,由于阿迪达斯转向 云原生 ,开发人员拥有更多的自主权。
4. 当涉及到软件架构时,我们应该分而治之
大规模的单体在某种程度上是一个昨天的故事。它们长期困扰着开发者,不过现在已经不是了。将巨大的单一代码库分割成较小规模的应用程序是新的做事方式。它可以使你的应用程序防火,减少错误的频率,使应用程序在发生错误时更加安全。缺点是,应用程序变得更难测试,而且需要更多的资源来完成。对于规模较小的团队来说,维持一个单体还是比较有意义的。
将一个单体应用划分为独立的 微服务 。
5. 开源和自由软件是未来的方式。
React、Angular和Zuul,分别来自Meta(曾经是Facebook)、谷歌和Netflix,是无数开发者每天在工作中使用的工具。如果没有这些组织向所有愿意使用它们的人免费发布的工具,每个人的工作就会变得更加困难。无数的服务将不会出现在阳光下,因为编写这些应用程序太难或太耗时了。所有这些都是因为,在编写这些应用程序之前,人们必须弄清楚如何为规模而编写前端,而不分享所学到的经验将是极其低效的。
这就是为什么我们要赞扬开源和自由软件的维护者、创造者以及所有其他为创造和维护这种软件做出贡献的人。
创造一种工具/技术并使其开源(或使其免费),给组织带来永恒的荣耀。
6. 使用架构模式
在软件开发中,有一条常见的规则--不要重新发明车轮。知道我们很可能曾经面临过与别人相同的问题,这条规则就变得更有价值。这就是为什么世界各地的工程师和开发人员都使用建筑模式来构造他们的项目--而不是把时间浪费在思考如何找出别人已经想出的解决方案上。
许多现代的软件都使用 CQRS 和Event Sourcing等模式。不要重新发明轮子,要使用这些模式。
7. 编程语言在不断发展。
我们有越来越多的新的编程语言这一事实并不奇怪。它们都是来来去去,离开后又被其他语言取代。没有人再用Algol或Pascal编码了。然而,有一个老前辈,C,仍然存在,尽管这是个值得单独探讨的话题。
一个值得注意的方面是它们在这些年里的演变方式。起初,命令式语言是唯一存在的。然后,面向对象的语言蓬勃发展,现在,有些人可能会争辩说,它们正被更灵活的语言所排挤,这些语言混合了一些命令式、函数式和 面向对象 的特性。
语言的发展方式越来越独立于我们工作的系统,也越来越独立于我们的系统。现代语言是跨平台的。由于DevOps的发展,语言的选择变得越来越不重要了。
9. SCRUM != AGILE
采用特定的流程通常会导致学习行为,最终形成习惯。至少,这是它的理论。
然而,在某些情况下,流程仍然是流程,人们只是为了走过场而苦苦挣扎,但行为从未发展。这样想吧,你见过多少开发团队经历了所有的Scrum仪式,但实际上没有以敏捷的方式工作?太多了吗?我们同意。
那么你能做什么呢?首先,团队买入,这永远是需要建立的第一步。如果你的团队没有看到使用这种方法工作的价值,那么从长远来看,所有的流程和仪式都不会有什么进展。
第二步是确保你有一个优秀的Scrum主管和项目经理,以确保良好的实践被传递下去,并确保任何反对意见被采纳。
第三步是认识到:当敏捷价值和Scrum框架没有任何价值时,将其强行灌输到人们的喉咙里,会让你很快就一无所获。我们在题为 "Scrum不是每个IT项目的答案(itmagination.com)"的文章中已经详细介绍了这一点以及更多的内容。
SCRUM可以是敏捷的,但它并不能保证敏捷性。敏捷性来自于行为,而不仅仅是流程。
10. 持续安全
正如我们以前多次写过的那样,安全不能是事后的想法。我们不能简单地 "留待以后"。检查应用程序的安全问题必须被整合到DevOps流程中,并且从第一天开始就整合到开发流程本身。幸运的是,我们可以使用一些工具来使这个过程无摩擦。Snyk就是其中之一。这是一个全面的工具,"找出并自动修复你的代码、开源依赖、容器和基础设施作为代码的漏洞[...]"。
我们必须在开发周期中应用安全检查程序。安全是信任的基础--未来的货币。
11. 审计云供应商的服务价格
由于三个主要的云计算供应商几乎不享有竞争,而且他们提供的服务的差异是(或多或少)任意的。在现实中,我们可能看到的唯一差异是服务价格的差异。这就是为什么,对这个特定的供应商有偏见并不一定是坏事。大多数情况下,确实没有什么区别。
选择你感到满意的、已经了解的供应商。边走边评估,不要害怕改变。
云供应商没有虚拟竞争,也没有成本套利。云基础设施的成本非常依赖于通货膨胀和经济衰退。
12. 一切都可以 "作为一种服务 "来做。
平台即服务,基础设施即服务,数据库即服务,软件即服务,后台即服务......我们没有给你更多的例子,你应该明白我们的意思。你能想到的一切都可以由第三方完成并出售给你。
使用这些服务是一种折衷。你放弃了一些控制权,以便变得更精简,能够更快地迭代,同时也能在前期节省一些钱。
由于云供应商和 无服务器 方法的重要性的增长,每一个软件都可以作为一个服务来完成。
13. 每个人都在使用Visual Studio Code
Visual Studio Code在世界范围内掀起了一场风暴。有微软的支持,有开源许可证,用TypeScript编写,并允许轻松扩展功能,这些组合都是伟大的决定。到目前为止,文本编辑器是现代程序员中最受欢迎的选择。其他选择,如基于Intellij的集成开发编辑器(IDE)或Vim,都在Code的阴影下,尽管JetBrains的Fleets可能会改变这种情况。
由于有多种扩展和定制工具,VS Code成为开发者中最受欢迎的IDE。
14. 如今,TensorFlow被广泛使用
TensorFlow是谷歌的机器学习框架,在程序员中是一个非常受欢迎的选择。首先,它在GitHub的最多星级存储库中排名前20。然后,有多个端口,包括JavaScript端口,团队在他们的例如React Native应用程序,或React或任何其他JS框架的Web应用程序中使用。这提供了巨大的灵活性,并允许团队将解决方案嵌入许多解决方案中。
由于TensorFlow,我们可以在网络应用中实现AI解决方案。用于训练的模型是由库提供的。开发人员应该专注于训练它们。
15. 一个很好的长期雇用策略是雇用后辈并培训他们
雇用后辈(后起之秀的年轻人)是一个很好的长期战略。虽然没有适合所有公司的 "最佳策略",但雇用后辈并培训他们绝对是成长和保留内部人才的最佳方式之一。
雇用后辈是一个很好的方式,可以随着时间的推移慢慢扩大你的团队,并建立一个内部文化,与雇用那些可能已经定型的人相比,更容易塑造。初中生还能提供一个新的视角,并更多地接触到当前的趋势。
在一些情况下,这并不理想,例如,当你的公司需要迅速扩大规模和开发新功能时。如果你有一个小的内部团队,由于不现实的开发期望,他们总是试图赶上他们的积压工作,这也不是最好的。在这种情况下,雇用一个外部技术合作伙伴来帮助开发,同时同步扩大内部团队的规模,可能是一个很好的中间解决方案。
雇用后辈来培训他们的策略并不是没有陷阱。加入你的团队的年轻人没有经过以前公司的审查,他们没有工作经历,而且很可能是一击即中。不幸的现实是,虽然这种策略在适当的补偿方案下可以很好,但初级雇员可能会发现自己处于这样的位置:他们只需转移公司,而不是等待或推动晋升或加薪,就可以使自己的工资翻一番、三番,甚至四番。
这就是为什么拥有透明的工资和薪资表是如此重要,以显示人们在职业道路上可以在哪里以及如何晋升。这就是为什么拥有优秀的入职培训计划也非常重要,以确保花在培训后辈上的时间得到很好的利用,使导师和学员都受益。
原文:2022年软件开发的十五种趋势 - geekculture
软件开发的未来发展前景怎么样?
据有关数据显示,目前,我国对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。根据IDC的统计数字,在所有软件开发类人才的需求中,对JAVA工程师的需求达到全部需求量的60%~70%。同时,JAVA工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。80%学员毕业后年薪都超过了5万元。计算机专业的大学生欲成为JAVA工程师,较便捷的一条路就是参加以实战项目为主要教学方法的JAVA职业技能培训,从而有效地缩短同企业具体用人需求之间的差距。全球有25亿Java器件运行着Java,450多万Java开发者活跃在地球的每个角落,数以千万计的Web用户每次上网都亲历Java的威力。今天,Java运行在7.08亿手机、10亿智能卡和7亿PC机上,并为28款可兼容的应用服务器提供了功能强大的平台。这么多应用,有效改变了用户的生活。越来越多的企业,因为使用了Java而提高了生产效能。在中国,越来越多的用户,因为Java而降低了成本,享受了生活。据相关数据显示,全国IT行业软件人才总需求量达数十万之多。软件人才主要在各大软件公司、企事业单位、高等院校、各大研究所、国防等重要部门从事软件设计开发、应用与研究工作。
未来软件开发的发展趋势如何?
技术的变革快到让人难以想象,软件开发也与其它领域技术相同,发展高速。随着各行各业对软件的需求性增大,软件开发已成为所有领域发展不可或缺的一部分。在未来,软件开发必然是往更高程度发展。
1、5G或成开发新领域的钥匙
5G已逐渐开始露出声迹,更快的网络速度会对软件开发解决更多当前比较麻烦的问题,5G的出现与逐渐健全,必然会带来手持设备的多方面革新,开发人员在技术领域随之提升到新的程度。
2、软件开发的门槛或将降低
随着技术的不断提升,以及软件开发的教育程度不断优化,软件开发市场逐渐供小于求,越来越多的人选择学习并从事软件开发专业。
加之线上教育的普及,为更多软件开发自学者创造了专业性研习的机会,将来软件开发的门槛可能会有一定程度的降低,更多自学成才的程序员进入市场。
3、新语言或可出现:
Rust,typeScript,Kotlin和Swift
至目前,已有数百种编程语言被创造,种类繁多的编程语言在硬件上增强了开发人员的专业能力,而StackOverflow研究表明,到2020年,排名前四的现代编程语言将为Rust,TypeScript,Kotilin和Swift,其中Rust在过去四年中连续第四位。
4、人工智能涉及领域进一步扩大
人工智能早已不是新鲜名词,也存在了许多年,其随着相应技术的不断革新,越来越多的成为许多行业的技术基底。在未来,医疗保健、教育及旅游等领域会在AI的发展下,朝着智能化智慧化的方向迈进。
5、云计算使用或将上升
因于网络安全问题的存在,云计算始终是各大企业将其作为解决方案的重点,随着技术的发展和需求量的增大,云计算使用在一定程度上或将上升,而云计算会持续性成为企业安全架构的重要一环。
关于软件开发发展趋势分析图和应用软件开发的发展趋势的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。