在软件开发中实施AI与敏捷管理的九点建议
在过去的几十年间,无论是汽车制造厂里的机器人,还是能够预测货币与库存变化的智能交易系统,人工智能通过让各个领域的业务得以蓬勃发展,不但证明了其自身的价值,也融入并影响了我们的日常工作与生活。
本文将与您一起来探究,AI如何能够通过敏捷管理来加速软件的开发。
AI在软件开发中的应用
AI已经改变了大部分企业的业务模式。因此,对于软件开发企业来说也不例外。许多研发团队正在运用机器学习(ML)来提速并缩短着他们的软件开发生命周期。与此同时,他们也通过采用AI来重新定义了开发人员应当如何构建其不同的软件产品。
对于软件开发而言,通常情况下,项目团队需要在构建系统之前,就要事先指定好系统将要实现的各项功能。这一点,我们会在后面详细介绍。
因此,对于一些过于复杂的判断步骤,我们不能一律用死板的方法,让软件采取某种单纯的是非判定。例如,开发人员会通过一整套算法的训练,来教会软件系统如何识别,在一张照片中是否包含有消防栓这一元素。
那么,针对上述判断含有消防栓照片的例子,我们就需要考虑包括:天气、距离、角度、以及清晰度差异等因素在内的不同排列组合。可见,让软件程序简单地通过枚举的方式,去判定所有的排列组合显然是低效且不可能的。下面,让我们看看究竟如何在敏捷开发过程中实现高效的AI。
在敏捷开发中引入机器学习技术的九种实用方法
尽管已经习惯了使用传统且熟悉的软件开发方式,我们仍应该去大胆地尝试使用机器学习,来加速手头的软件开发过程。
我们在实践中发现:事实上,对于各种软件接口和数据管理之类的主要应用组件而言,我们完全可以沿用既有的常规软件,而只需要将机器学习技术引入到SDLC(软件开发生命周期)中便可。具体步骤如下所示:
1.代码助手:通常,开发人员的大部分时间都花费在了调试代码和阅读文档上。如果使用基于ML实现的智能化代码助手,那么开发人员便可以根据既有的代码库,快速地获得各种反馈与建议,从而节省大量的摸索时间。该领域的工具包括:Java的Codota(译者注:一种人骱屯萍龃氲墓ぞ撸捎糜AI领域)和Python的Kite(译者注:一款为Python开发人员提供实时代码片段的工具)。
2.自动代码重构:有过开发经验的读者都知道:拥有整洁的程序代码对于降低软件的运维难度,特别是后期的团队协作与变更,都是非常重要的。不过,客观事实却是:无论业务在什么时候发生扩容,对于代码的重构都是一个必经的痛苦过程。然而,如果能够成功地引入ML,通过识别代码中的潜在重构区域,那么我们就能轻松地分析各种既有代码,进而优化其性能。
3.制定战略决策:另外一个耗费开发人员大量时间的方面是:在产品的实现过程中,针对服务与功能优先级的讨论。通过将过往开发项目中的数据运用到针对AI模型的训练中,我们可以评估当前应用的执行情况,进而协助业务负责人乃至整个工程团队,来识别出那些能够最小化风险,并产生最大效果的方法。
4.提供精确的估算:我们都知道,整个软件开发行业常以超出预算和时间表而著称。因此,为了做出好的估算,开发团队需要深入了解整个项目工程的方方面面。同样,您可以使用过往项目(如各种用户故事,成本估算和功能定义)中的数据来训练不同的ML模型。我的经验证明:这些因素在预测项目的工作量与费用方面都是非常实用的。
5.错误分析与处置:基于ML的代码助手,既能够识别出历史数据中的各种潜在模式,又可以识别到那些常见的错误。因此,如果程序员们在开发的过程中频频出现某类错误,那么代码助手就会标记出来。与此同时,在软件被部署之后,ML还可以被用于分析各类日志,进而识别到那些可以被修复的错误。现如今,软件开发人员虽然还需要借助ML来主动地解决代码中的错误,但是在不久的未来,ML会进一步智能化,能够在无需人工干预的情况下,去自动地纠正软件中的潜在错误。
6.快速原型:过去,为了将某种业务需求转换为技术实现,我们往往需要花上数月、乃至数年的时间。如今,我们不再苛求开发人员有广博的知识与技能,ML凭借着各种模型与经验,就能缩短开发周期,实现快速原型。
7.将AI用于项目规划:人类大脑的神奇之处在于:没有两个项目经理会对同一个项目持有完全相同的看法与观点。而对于模拟人类智力的ML来说,它完全可以针对各种情况,创建出类似于人类大脑的因果事件序列。
8.风险评估:在软件开发中,人们针对特定风险所做出的评估与决策,是一个复杂的过程,而且往往会受到预算、计划、资源等方面的制约。随着项目的发展,各种外部环境以及其他项目之间的相互依赖性,时常会改变我们的推进方向,进而产生一些新的风险。与此同时,我们人类又会受到对过往信息的记忆和重现能力的限制。而ML则允许我们按需检索并获取参数化的信息。我们可以使用过往的项目在开始与结束时不同的状态数据,来训练AI的模型,进而获悉当前开发项目的实际时间表与风险特征。
9.项目资源管理:有着丰富实施经验的人可能会告诉您:软件产品的交付质量,取决于是否有合适的人员参与到了项目之中。通过深入地研究过往的项目历史数据,AI能够实时地为您提供参与其他项目的开发人员信息。籍此,您可以轻松了解到有哪些开发人员已经为部署做好了准备。另外,ML还能够帮您预见到,在项目的哪些领域需要增加或减少开发人员的数量。
同时根据当前项目的特征,AI能够在启动阶段,通过为开发人员提供具有针对性的培训材料,来提高他们的技能和知识,进而快速地让各种角色达到项目所需技术要求,并加速项目的交付。
另一方面,AI还能为项目组成员分配最佳的工作负载,以保证他们能够各司其职、且全情投入。而有了AI去自动化地执行各种重复性任务,您还会有更多时间去考虑那些关键性的项目决策问题。
那么问题来了:我们又该如何通过人工智能,来改变我们的软件构建方式呢?
未来我们将如何构建软件?
在AI环境中,软件工程师们将不再需要向计算机提供做出决定或采取措施的具体步骤。他们只需要将特定范畴的数据输入到各种学习算法中便可。因此,重要的是算法模型能够识别出数据中的特征,进而做出决策。通常情况下,ML会将给定的测试数据,与其数据库里的既有数据作比较,从而调整算法并做出决定。
因此,以Google公司的Pete Warden为首专家已开始大胆地预测:在未来十年内,大多数软件开发工作将不再涉及到编程。同时,OpenAI的前研究科学家、现任Tesla AI总监Andrej Karpathy也认为:未来的程序员将不再需要去维护复杂的存储库,分析各种运行环境,以及创建错综的程序。他们的主要工作只是:将收集、过滤、标记、分析、以及可视化的数据输送到神经网络中便可。
传统的开发过程与机器学习的开发模型
过去传统的软件构建方法大致如下:
1.开发人员首先开展需求分析与定义。
2.然后进行软件相关设计。
3.在后续的开发阶段,他们使用Java或C++等编程语言,通过程序代码为计算机提供明确的执行步骤。
4.在软件完成构建之后,他们通过运行各种测试,以确保软件能否达到预期的效果。
5.在实现了质量保证(QA)之后,软件代码才能够被部署到生产环境中。
6.最后工程师们还必须不断地维护软件的相关代码。
在敏捷开发的过程中,为了加快软件的开发进程,团队成员通常会选择较小功能或功能组,集中精力进行2到4周的sprints(译者注:单次迭代的开发内容)。因此,就基础层面而言,敏捷和瀑布开发有着相似之处。
然而,在ML的软件开发模型中,开发人员只需要定义问题,并列出他们想要实现的目标。后续的工作就只涉及到收集数据,准备数据,将数据提供给学习算法,接下去便是部署、集成和管理模型。
结论