当前位置: 主页 > 建站知识 > APP开发

软件开发技术-ftp的客户端软件和服务器端软件如何自己开发

发布时间:2023-03-17 10:07   浏览次数:次   作者:佚名

CCF于1月11日发布了最新一期《中国计算机科学技术发展报告》,对可群智协同计算、软件智能化开发技术等11个方向的研究进展做了详细介绍和讨论。我们将分期分享报告中的精彩内容,加入CCF会员登录CCF官网,可在数字图书馆栏目下载和浏览。

ftp的客户端软件和服务器端软件如何自己开发_长城开发精密技术_软件开发技术

1.引言

提高软件开发的效率和质量是软件工程领域的研究者与实践者始终追求的重要目标。如何在软件开发的过程中,通过改善软件开发方法和运用技术手段提高软件开发的自动化水平,以达到降低软件开发成本、提高软件生产效率、改善软件产品质量的目的,是众多软件研究工作的共同目标。围绕这一目标,软件工程领域的研究者一方面通过不断探索新的软件形态、探究新的环境下的软件本质来创造新的软件开发范型和软件架构;一方面也通过不断借鉴各个科学领域的研究成果,在本领域现有的开发范型和架构下不断改善技术方法提高生产效率。近年来,人工智能技术取得了长足的发展和进步,这一进步也对软件工程领域的研究形成了重要的促进。软件工程领域的研究者在既有的软件开发范型和体系架构上不断将新的智能技术引入现有的方法和技术中,从而形成了大量有价值的智能化软件开发方法和技术成果,这些新的成果不但促进了软件工程本领域的技术和方法的进步和革新,同时也对人工智能及其他相关领域的发展起到了重要的推动作用。

1.1.代码搜索技术

工业界和学术界一直以来都比较关注代码搜索的研究,Singer等人[1]通过研究指出代码搜索是开发者最频繁的行为之一。随着数以万计的开源代码项目变得可用,代码搜索在软件开发中的作用变得更加突出。一项针对谷歌开发者的调查显示,在谷歌的代码搜索记录中,一个开发者平均每个工作日要进行12次代码搜索查询[2]。在所有的查询中,期望获取代码片段的查询比例占到了34%。

ftp的客户端软件和服务器端软件如何自己开发_软件开发技术_长城开发精密技术

近年来,基于网络的在线搜索网站纷纷提供代码搜索的服务[3],包括Google (通用搜索平台),Krugle[4],Google Code Search (2006-2012年专门用于代码搜索),GitHub[5]和SourceForge[6]等,根据用户的输入进行搜索。从2005年开始,在软件工程顶级会议、期刊上发表的代码搜索的研究论文越来越多。按照输入类型来划分,可将代码搜索的研究分为多个子研究方向:自由文本,代码上下文,结构化信息,和其它输入类型。在上述各个类别的检索技术中,智能检索技术不断被引入进来,并与一些其他相关信息相结合,如代码之间的调用关系,用户对代码段的反馈信息,这些智能检索技术的使用,进一步提高了代码检索结果的质量。

1.2.API推荐技术

为了提高软件复用的封装性、降低复用难度,很多可复用软件都是通过API(Application Programming Interface,应用编程接口)的形式对外提供服务和功能访问的。早期的API的主要是各种程序库,并且随着开发语言及各种软件开发社区的发展,这类API的数量急剧上升,例如JDK1.8中的基础类库就提供了超过14万个方法。近年来,随着各种开发框架和基础软件(例如安卓系统)的发展,许多框架和系统基础功能和服务也通过API的方式提供。例如,Eclipse的图形编辑框架GEF(Graphical Editing Framework)提供了6万多个API方法,而安卓开发框架则提供了5万多个API方法。随着互联网和云计算的发展,越来越多的网络化服务平台也都选择通过开放API的方式提供平台服务。

随着API数量的增多,开发人员在选择和使用API方面的代价也越来越大。开发人员首先需要根据开发任务的需要找到合适的API,然后需要获取API的使用说明和样例代码等参考信息,同时还要在遇到异常和错误等问题时获得问题解决方案和指导。针对这些问题,研究人员开展了一系列研究工作。早期研究工作主要关注于利用程序分析和信息检索等技术手段,辅助开发人员搜索API及相关信息;此后,随着互联网推荐技术的发展,一些研究者开始研究基于上下文等信息进行API的推荐。为了支持开发人员正确使用API,一些推荐方法还特别关注于API使用模式的挖掘和推荐;近两年,随着深度学习等智能化技术的发展,一些面向API推荐和问题解决的智能化开发技术也逐渐涌现,关注于相关知识的抽取和复用。

1.3.服务复用技术

随着互联网技术的发展和云计算平台的逐渐成熟,服务化软件(Service-Based Software)成为一种重要的软件形态。这类系统以Web服务为基本构成元素,以服务组装为核心构造方法。在Web服务形态方面,主要体现为技术标准之争,经历了从SOAP、WSDL、WS-*技术为代表的学院路线,到HTTP、JSON、RESTful API为代表的产业技术路线的发展历程。而智能化研发技术,主要体现在服务组合技术方面。

长城开发精密技术_ftp的客户端软件和服务器端软件如何自己开发_软件开发技术

服务组合作为面向服务计算的核心研究点之一,能利用服务的重用价值,满足用户的复杂请求,实现服务增值。通过智能化服务组合技术可以灵活、高效地实现业务流程构造,快捷地完成新业务。围绕服务组合建模语言、智能化服务组合方法、服务组合执行与验证等方面进行研究,国内外学者启动了诸多研究项目,如METEOR-S[149]、SEFL-SERV[150]、e-Flow[151]等。智能化Web服务组合问题已经成为分布式计算、流程管理以及软件工程领域的一个研究热点。

目前,工业界和学术界已提出了众多的Web服务组合方法,从Web服务组合实现方式角度可以分为服务编制和服务编排,根据组合的动态性程度可以分为静态服务组合和动态服务组合,根据组合的自动化程度可以分为手动服务组合、半自动服务组合和全自动服务组合方法。早期的研究工作主要从业务流程的角度出发,关注静态、手动或者半自动化的服务组合。由于服务的分布、动态特性、用户需求的不确定性以及运行环境的持续演化特性,后期的研究工作主要关注动态的、自动化的服务组合方法。

1.4.代码生成技术

计算机自动生成代码是近年来软件工程的研究热点之一。代码自动生成极大的减少了程序员的工作量,提高了开发效率。随着开源社区的发展,我们可以通过分析大量的代码从而进行代码生成。代码自动生成的一大困难在于源代码本身具有诸多的约束和限制。近年来,在原有的基于组合优化方法进行程序综合研究的基础上,产生了一些新的基于机器学习技术进行程序生成的方法。

虽然计算机直接生成代码是十分困难的,但是一些简单的代码生成应用可以从一定程度上辅助程序员编程。代码补全是代码自动生成的一种较成熟的典型应用,绝大多数的程序员在进行软件开发的过程中会使用框架或库API来复用代码。代码补全机制已经成为现代集成开发环境中的不可或缺的组成部分。在工业界中,不同编程语言的集成开发环境包括:Eclipse[118], IntelliJ IDEA[119],Visual Studio[120]和PyCharm[121]都可以支持在程序员输入代码时尝试补全程序的剩余部分。在学术界,1988年研究者就提出用智能化的方法帮助开发人员开发和维护软件[122]。传统方法[146][147]往往利用代码的静态特征进行代码生成,2012年,Hindle A[123]等人提出利用自然语言的方法来解决程序生成问题,越来越多的研究者将人工智能的方法用于代码自动生成。

按照所采用技术及应用场景的不同,可将当前的程序生成方法分为两类:一类为基于程序输入输出结果的程序生成,一类为基于程序代码语言特性的代码生成。基于输入输出结果的程序综合主要基于机器学习模型,利用程序输入输出结果之间的对应关系构造训练数据集,并利用该数据集对机器学习模型进行训练,以达到在输入输出效果上模拟程序行为的目的。该类方法尤以基于深度神经网络的方法为代表。基于程序设计语言模型的程序生成主要利用程序设计语言自身所具有的统计特性,通过对已有大量程序代码的学习建立相应程序设计语言的机器学习模型,并基于该模型在已有程序代码的基础上通过自动补全的方式生成新的代码。

软件开发技术_ftp的客户端软件和服务器端软件如何自己开发_长城开发精密技术

2.国内外研究进展比较

近10年来国际学术界在代码搜索与推荐、软件API推荐、软件构件技术及程序生成等领域开展了广泛而深入的研究工作。国内研究者在相关领域也开展了许多深入的研究工作,并取得了一些重要的研究成果,但还存在多个方面的不足。首先,国内学术界在相关领域的研究工作还比较少,所发表的论文以及发布的工具原型或数据集都远远少与国际学术界。其次,国内学术界在所开展的研究工作的广度和覆盖度方面还有所不足。例如,国内学术界在软件API推荐、程序代码自动生成以及知识抽取方面的研究还比较少。最后,国内学术界在相关方面所开展的系列性和系统性的研究工作还比较少。与之相比,国际学术界中有多位知名学者在相关方面开展了连续多年的系统性的研究工作,从而更有希望在相关方面取得突破性的进展并为工业界提供实用的技术解决方案和工具。

3.发展趋势与展望

3.1.代码搜索与推荐

代码搜索的研究历史相对较短,从研究真正兴起的2005年到现在仅有十年左右的时间,研究中涉及到的一些问题还没有明确的答案。

尽管众多研究者对该领域进行了较为深入的研究并取得了显著的效果,但是,目前该领域还缺失一个用于评价众多代码搜索算法性能优劣的标准库。这一标准库缺失的原因在于代码搜索算法输入类型的不同,代码粒度(例如方法,类等)的不同,算法语言的不同,构建标准库耗时等。尽管如此,为了该研究领域的长足发展,便于各研究者所提出算法的性能能够进行更为便捷的对比,构建一个标准库是非常有必要的。

长城开发精密技术_软件开发技术_ftp的客户端软件和服务器端软件如何自己开发

如文献[16]所述,在基于监督学习的代码推荐方法中,为了构建训练集,需要耗费大量的时间来识别并计算用于构建实例的特征。另一方面,我们看到深度学习(deep learning)技术已经被证明在识别缺陷预测的工作中取得了明显的效果。在未来的工作中,使用深度学习来自动识别用于构建代码搜索训练集的特征,是一条可行的路径[45]。

3.2.API的推荐

API在软件复用以及软件开放平台中占有重要的技术地位,已经成为开发人员完成许多开发任务时的核心关注点。从发展趋势看,整个学术界对于API复用的研究已经从以搜索为主发展到以基于上下文的主动推荐为主。相关研究的目标已经从帮助开发人员找到合适的API过渡到帮助他们正确地使用API,甚至自动生成API使用代码上。从复用内容看,相关研究的关注点已经不再局限于API及其使用代码,而是开始关注于API相关学习资源及知识的抽取,从而使得开发工具可以更好地支持开发人员解决各种与API相关的复杂问题(例如API相关异常或错误的处理)。

借鉴在自然语言处理领域得到广泛成功应用的深度学习和知识图谱技术,对API相关的代码和文本资源进行深度语义解析和知识抽取可能会成为今后的一个重要发展趋势。这一技术趋势有望在开源软件及企业开发库以及各种网络开发资源所形成的软件代码大数据基础上,通过智能化的分析和处理实现智能化辅助开发方面的飞跃。

3.3.服务复用技术

在服务及其组合的复用方面,Web API在现实中得到了广泛应用,但当前关于Web API的研究仍处于早期阶段。一方面,Web API设计还缺乏系统化的评估模型和度量指标。另一方面,如何从Web API设计者和API使用者两个视角自动化、智能化地应对Web API不可避免的频繁变化是一个亟待解决的重要问题。

软件开发技术_长城开发精密技术_ftp的客户端软件和服务器端软件如何自己开发

服务组合已成为服务化软件系统开发过程中软件复用的一种重要形式,但由于服务化软件运行在一个动态、不确定的环境中,如何在服务组合过程中考虑来自用户需求的不确定性、执行环境的不确定性等因素,保证构造的服务在运行时能够满足用户的各种功能性、非功能性目标,并适用于更多贴近现实的应用场景,是服务组合技术下一步的发展方向。此外,在面对快速迭代、持续交付的软件开发过程,如何支持组合服务自动化、智能化的自适应与动态演化也是服务化软件系统未来发展的趋势和亟待解决的问题。

在面向部署运维的软件制品复用方面,尽管配置代码和镜像复用已成为支持软件持续部署和持续交付的重要手段,但是随着开源社区和互联网软件仓库的蓬勃发展,以系统部署、发布和运维为目标的软件代码和软件制品不断累积,形成了规模庞大的一类软件资源,同时,软件系统规模和复杂度的不断提高,也对如何复用和用好这类软件资源带来了挑战。因此,如何海量数据和资源中提取出有效的领域知识,并能够指导实现高效和最佳的部署与管理维护方案是有效复用此类制品与资源的关键所在。因此,在未来的发展中,该领域将以大规模自动化配置代码和制品为对象,以管好、用好和维护好为实际目标,以配置代码管理维护和使用中领域知识的获取、汇聚和使用为研究内容,形成一套知识驱动的配置代码和制品管理、维护和使用的理论方法和关键技术,对提升软件自动化运维质量和效率具有十分重要的研究价值与现实意义。

3.4.代码生成技术

程序自动生成是近年来人们关注较多的热点问题,也是软件科学与人工智能领域共同关心的问题。不同领域的研究者对程序自动生成技术有不同的理解,共同推动着该问题的研究进展。人工智能领域的研究者将程序自动生成问题界定为:如何在不编写程序的前提下,依据大量存在的已知的输入输出数据软件开发技术,由计算机自动学习输入与输出之间的映射关系,该领域已出现的程序自动生成技术的研究也基于上述的认识展开。而在软件工程领域软件开发技术,研究者们对程序自动生成问题则有更多工程方面的认识和考虑,从软件工程的角度,软件的本质是客观世界的解决方案在计算机系统中的映射,研究者更倾向于将软件自动生成问题看作一个从自然语言描述的需求到程序语言描述的代码之间的映射,围绕这一思路也产生了众多研究成果。从当前的发展趋势看,上述两类方法的结合是程序生成研究的发展方向之一。

4.结束语

智能化软件开发是一个正处于高速发展的研究领域,在笔者整理本文内容的过程中,仍有诸多学术研究工作正在推进过程中,限于篇幅和获知途径的限制,本文难以将所有研究成果囊括其中。除软件工程研究领域外,更有诸多其他研究领域的学者也在关注智能化软件开发相关的研究问题,例如在本文论及的多项程序自动生成相关的研究成果即来自于人工智能领域的研究者。可见,关于智能化软件开发或软件开发自动化问题的研究正在逐步演化为多研究领域交叉的新问题,可以合理预见,在未来的研究中,将形成软件工程与人工智能等相关领域互相推动的局面,智能化软件开发的研究也将逐步成为多领域共同关注的重要问题。

中国计算机学会