当前位置: 首页 > news >正文

AI时代的软件工程:挑战与改变

人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。

1

软件工程的演变

120856b07da76259ee3aa30c6242ea78.png

软件工程的起源

软件工程(Software Engineering)是关于如何系统化、规范化地设计、开发和维护软件的学科。它旨在通过科学的方法来管理软件开发的复杂性,确保软件的质量和可靠性。

20世纪中期,随着计算机技术的迅猛发展,软件系统变得越来越复杂,对其过程的管理也日益成为了难题。

1962年,携带火星探测器水手1号 ( The Mariner 1)的火箭在发射后很快就偏离了预定航线,起飞293秒后火箭坠毁。而其起因居然是一名程序员在将手写公式录入为计算机代码时遗漏了一个符号,这导致软件对正常行驶的火箭做了错误修正,最终酿成惨剧。这一事件导致了数千万美元的损失,也揭示了软件开发过程中缺乏系统化管理所带来的严重问题。

正是由于这些重大失败事件的发生,人们开始意识到 软件开发需要一套科学的方法和理论指导。

1968年在德国召开的北约科技委员会会议上,正式提出了“软件工程”这一术语——特指一套技术和管理方法的集合,同时也是一种科学的方法论,用于系统化地规划、开发和维护复杂的软件系统。自此,软件工程成为了一个独立的学科。

2

传统软件工程方法及其局限

795769784c119813cc3228d8f9aefb79.png

2.1 从瀑布到敏捷

在软件工程的早期,瀑布模型(Waterfall Model)是最广泛应用的方法。它将软件开发过程分为需求分析、设计、开发、测试和维护几个阶段,强调每个阶段的顺序进行。

063e2f2b34918aaf25035fa4b8eaad42.png

这一方法在很长一段时间占据了软件开发的主流。然而,它缺乏灵活性,难以应对快速变化的需求。随着软件开发需求的不断变化,Scrum等敏捷开发方法逐渐兴起。

敏捷开发强调灵活和迭代式的开发,通过频繁的沟通和快速的反馈循环,能够更好地适应需求的变化和不确定性。这些方法不仅改变了软件开发的流程,也提升了团队协作的效率。

2.2 软件工程的局限性

尽管软件工程的方法和理论已经发展了几十年,但至今为止,研究和实践大多将重点放在设计及其之后的阶段(软件实现、测试和维护等),而对于需求分析和初期设计阶段的重视程度远远不够。

在学术研究领域,大多数研究集中在如何改进软件的设计和实现过程。例如,如何优化代码结构、如何使用新的编程范式,以及如何改进测试方法等。

在实际的软件开发过程中,企业和开发团队也倾向于将大部分资源和精力投入到设计、实现和测试阶段。

而更加前置的需求阶段,虽然被困扰者甚众,但无论是学术界还是工业界,真正投入资源进行研究与解决方案探索的组织和个人却是寥寥。

2.3 局限性的原因

这种局限性的原因主要有以下几点:

  • 技术复杂性:软件开发是一项高门槛的技术工作,开发人员需要具备较高的技术水平和经验。而且,软件开发技术复杂且变化迅速,开发人员需要不断学习和应用新技术,这使得技术研究和实践成为了重点。

    这导致了企业在人力资源管理方面的重点放在技术团队的建设和管理上,忽视了需求分析阶段的投入。

  • 需求的多样性:需求分析阶段的工作难以量化和标准化,需求变更频繁且难以预见,这使得需求分析的工作变得难以管理和评估。相比之下,设计和实现阶段的工作具有更明确的目标和可操作性,能够通过技术手段加以改进和控制。

  • 经济效益:在软件行业发展的中早期,产品市场一片空白,设计和实现阶段的投入往往直接影响软件产品的功能和性能,从而影响其市场竞争力和经济效益。因此,企业更愿意在这些阶段投入更多的资源,以确保软件的市场成功。

如此种种,导致需求分析得不到应有的重视和投入。

后续开发过程中频繁出现需求变更和项目延期等问题,往往也是用投入更多人力这种粗放式的方法进行缓解,却无法从根本上得到解决。

3

人工智能对软件工程的影响

cb9111ac274a8a70296dd42b2838f0ad.png

3.1 人工智能在软件开发中的应用

人工智能技术,尤其是大型语言模型的应用,正在迅速改变软件开发的格局。

传统的软件开发依赖开发人员手动编写代码,效率较低且容易出错。如今,通过人工智能,开发人员可以利用AI生成代码,极大地减少了手动编码的工作量,大大提高了开发效率和质量。

当前,市场上已有多种AI工具和平台用于辅助软件开发。例如,GitHub Copilot这样的工具可以根据开发人员的提示生成代码片段,还能帮助开发人员编写测试用例、文档和自动化脚本; 微软的Azure AI平台则提供了从需求分析到代码生成的全方位解决方案,帮助企业快速开发和部署软件产品等。

这些工具和技术不仅提高了软件开发的效率,还改变了开发流程,使得开发人员可以更专注于创意和设计,而不必花费大量时间在编码上。

3.2 软件开发各阶段的变化

随着人工智能技术的普及,软件开发的各个阶段都在发生变化。

编码和测试阶段变得更加自动化,使得相应人员的负担大大减轻,效率大幅度提升。进一步导致传统上占据主要篇幅的设计、开发、测试等阶段在软件工程周期中的占比迅速下降。与此同时,需求分析的重要性则愈加凸显。

未来的AI系统能够根据需求自动生成软件,这要求我们在需求阶段就能清晰地表达出我们的需求。

需求分析不仅需要理解用户的业务背景,还需要能够将用户需求转换为技术实现的具体要求。换言之,就是要将客户“心中所想“用自然语言表述出来,同时提供出在技术能力和成本投入上都相匹配的软件解决方案,并获得客户认可。

这对需求分析人员提出了更高的要求,他们需要具备更深厚的技术背景和更敏锐的业务洞察力。

3.3 软件工程的新趋势

软件工程的新趋势就是越来越重视需求分析阶段。需求分析将不再是简单的信息收集和整理,而是一个全面的、系统的过程。

同时,随着AI技术的普及,需求分析将逐渐向自动化和智能化方向发展:自然语言处理(NLP)技术可以帮助需求分析人员更好地理解用户的自然语言需求,将其转换为技术需求。此外,可以利用AI技术分析大量的历史需求数据,预测用户的潜在需求和市场趋势,帮助我们更好地制定开发计划和策略。

未来,需求分析将真正成为软件工程的核心,而AI将成为需求分析中不可或缺的重要工具。

4

软件工程的当下与未来

272be5bbb42c82176fefff499128bee4.png

人工智能正以前所未有的速度改变着软件工程的面貌。从编码到测试,AI的应用已经使得开发过程变得更加高效和自动化。随着开发和测试的负担减轻,需求分析的重要性愈加凸显。

软件工程的重心正在逐渐向需求分析倾斜。通过结合人工智能技术,我们可以更好地理解和捕捉用户需求,为用户提供更高质量的软件产品。

未来,软件工程领域将面临更多的挑战和机遇。我们需要不断学习和适应新的技术,以应对人工智能带来的变革。通过不断提高自身的技能和知识,我们可以在这场变革中占据优势,推动软件工程向更高效、更智能的方向发展。

--- End ---欢迎关注微软 智汇AI 官方账号一手资讯抢先了解喜欢就点击一下 在看 吧~

相关文章:

AI时代的软件工程:挑战与改变

人工智能(AI)正以惊人的速度改变着我们的生活和工作方式。作为与AI关系最为密切的领域之一,软件工程正经历着深刻的转变。 1 软件工程的演变 软件工程的起源 软件工程(Software Engineering)是关于如何系统化、规范化地…...

Zuul介绍

Zuul 是 Netflix 开源的一个云平台网络层代理,它主要用于路由、负载均衡、中间件通信和动态路由。Zuul 本质上是一个基于 JVM 的网关,它提供了以下功能: 1.路由:Zuul 允许客户端和服务器之间的所有入站和出站请求通过一个中心化的…...

7-1作业

1.实验目的:完成字符收发 led.h #ifndef __GPIO_H__ #define __GPIO_H__#include "stm32mp1xx_rcc.h" #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_uart.h"//RCC,GPIO,UART初始化 void init();//字符数据发送 void set_tt…...

ElasticSearch安装、配置详细步骤

一、环境及版本介绍 操作系统: Windows 10 软件版本: elasticsearch-7.17.22、kibana-7.17.22、IK-7.17.22 开发环境选择软件版本应提前考虑正式系统环境,否则会产生软件与服务器环境不兼容的问题出现,ElasticSearch与环境支持…...

【Mybatis 与 Spring】事务相关汇总

之前分享的几篇文章可以一起看,形成一个体系 【Mybatis】一级缓存与二级缓存源码分析与自定义二级缓存 【Spring】Spring事务相关源码分析 【Mybatis】Mybatis数据源与事务源码分析 Spring与Mybaitis融合 SpringManagedTransaction: org.mybatis.spri…...

Leetcode 2065. 最大化一张图中的路径价值(DFS / 最短路)

Leetcode 2065. 最大化一张图中的路径价值 暴力DFS 容易想到,从0点出发DFS,期间维护已经走过的距离(时间)和途径点的权值之和,若访问到0点则更新答案,若下一步的距离与已走过的距离和超出了maxTime&#…...

SeeSR: Towards Semantics-Aware Real-World Image Super-Resolution

CVPR2024 香港理工大学&OPPO&bytedancehttps://github.com/cswry/SeeSR?tabreadme-ov-file#-licensehttps://arxiv.org/pdf/2311.16518#page5.80 问题引入 因为有些LR退化情况比较严重,所以超分之后的结果会出现语义的不一致的情况,所以本文训…...

七月论文审稿GPT第5版:拿我司七月的早期paper-7方面review数据集微调LLama 3

前言 llama 3出来后,为了通过paper-review的数据集微调3,有以下各种方式 不用任何框架 工具 技术,直接微调原生的llama 3,毕竟也有8k长度了 效果不期望有多高,纯作为baseline通过PI,把llama 3的8K长度扩展…...

盘古5.0,靠什么去解最难的题?

文|周效敬 编|王一粟 当大模型的竞争开始拼落地,商业化在B端和C端都展开了自由生长。 在B端,借助云计算向千行万业扎根;在C端,通过软件App和智能终端快速迭代。 在华为,这家曾经以通信行业起…...

2.3章节Python中的数值类型

1.整型数值 2.浮点型数值 3.复数   Python中的数值类型清晰且丰富,主要分为以下几种类型,每种类型都有其特定的用途和特性。 一、整型数值 1.定义:整数类型用于表示整数值,如1、-5、100等。 2.特点: Python 3中的…...

每日Attention学习7——Frequency-Perception Module

模块出处 [link] [code] [ACM MM 23] Frequency Perception Network for Camouflaged Object Detection 模块名称 Frequency-Perception Module (FPM) 模块作用 获取频域信息,更好识别伪装对象 模块结构 模块代码 import torch import torch.nn as nn import to…...

【从0实现React18】 (五) 初探react mount流程 完成核心递归流程

更新流程的目的: 生成wip fiberNode树标记副作用flags 更新流程的步骤: 递:beginWork归:completeWork 在 上一节 ,我们探讨了 React 应用在首次渲染或后续更新时的整体更新流程。在 Reconciler 工作流程中&#xff…...

0-30 VDC 稳压电源,电流控制 0.002-3 A

怎么运行的 首先,有一个次级绕组额定值为 24 V/3 A 的降压电源变压器,连接在电路输入点的引脚 1 和 2 上。(电源输出的质量将直接影响与变压器的质量成正比)。变压器次级绕组的交流电压经四个二极管D1-D4组成的电桥整流。桥输出端…...

HTML5+CSS3+JS小实例:图片九宫格

实例:图片九宫格 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1…...

湘潭大学软件工程数据库总结

文章目录 前言试卷结构给学弟学妹的一些参考自己的一些总结 前言 自己可能很早很早之前就准备复习了&#xff0c;但是感觉还是没有学到要点&#xff0c;主要还是没啥紧迫的压力&#xff0c;我们是三月份开学&#xff0c;那时候实验室有朋友挺认真开始学习数据库了&#xff0c;…...

Codeforces Testing Round 1 B. Right Triangles 题解 组合数学

Right Triangles 题目描述 You are given a n m nm nm field consisting only of periods (‘.’) and asterisks (‘*’). Your task is to count all right triangles with two sides parallel to the square sides, whose vertices are in the centers of ‘*’-cells. …...

怎样将word默认Microsoft Office,而不是WPS

设置——>应用——>默认应用——>选择"word"——>将doc和docx都选择Microsoft Word即可...

C语言之进程的学习2

Env环境变量&#xff08;操作系统的全局变量&#xff09;...

web使用cordova打包Andriod

一.安装Gradel 1.下载地址 Gradle Distributions 2.配置环境 3.测试是否安装成功 在cmd gradle -v 二.创建vite项目 npm init vitelatest npm install vite build 三.创建cordova项目 1.全局安装cordova npm install -g cordova 2. 创建项目 cordova create cordova-app c…...

内卷情况下,工程师也应该了解的项目管理

简介&#xff1a;大家好&#xff0c;我是程序员枫哥&#xff0c;&#x1f31f;一线互联网的IT民工、&#x1f4dd;资深面试官、&#x1f339;Java跳槽网创始人。拥有多年一线研发经验&#xff0c;曾就职过科大讯飞、美团网、平安等公司。在上海有自己小伙伴组建的副业团队&…...

【从零学习JVM|第二篇】字节码文件

前言&#xff1a; 通过了解字节码文件可以帮助我们更容易的理解JVM的工作原理&#xff0c;所以接下来&#xff0c;我们来介绍一下字节码文件。 目录 前言&#xff1a; 正确的打开字节码文件 字节码文件组成 1. 魔数&#xff08;Magic Number&#xff09; 2. 版本号&…...

命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6

命令行运行python程序报错 ImportError: /lib/x86_64-linux-gnu/libstdc.so.6 ImportError: /lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29’ not found (required by /home/zitong/miniconda3/envs/torch112/lib/python3.9/site-packages/scipy/spatial/_ckdt…...

SpringBoot十二、SpringBoot系列web篇之过滤器Filte详解

一、前言 JavaWeb三大组件Servlet、Filter、Listener&#xff0c;其中之一便是过滤器Filter。 其实&#xff0c;Filter我们平常用的不多&#xff0c;一般多为项目初期搭建web架构的时候使用&#xff0c;后面用的就少了&#xff0c;在日常业务开发中不太可能碰到需要手写Filte…...

AU音频软件|Audition 2025网盘下载与安装教程指南

说起AU&#xff0c;有些小伙伴可能第一印象是化学元素金&#xff08;Aurum&#xff09;。实际上&#xff0c;本文要介绍的AU&#xff0c;全称是Adobe Audition&#xff0c;是一款专业音频编辑和混音软件‌&#xff0c;广泛应用于音乐制作、广播、电影及视频声音设计等领域。 目…...

实践提炼,EtherNet/IP转PROFINET网关实现乳企数字化工厂增效

乳企数字化工厂的核心技术应用 1. 智能质检&#xff1a;机器视觉协议网关的协同 液态奶包装线&#xff08;利乐罐装&#xff09;的漏码检测生产线&#xff0c;其高速产线&#xff08;20,000包/小时&#xff09;需实时识别微小缺陷&#xff0c;但视觉系统&#xff08;康耐视Ca…...

RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程

RISC-V 开发板 Ubuntu 23.04 部署 open_vins 过程 1. 背景介绍2. 问题描述3. 解决过程3.1 卸载旧版本3.2 安装 Suitesparse v5.8.03.3 安装 Ceres Solver v2.0.03.4 解决编译爆内存问题 同步发布在个人笔记RISC-V 开发板 Ubuntu 23.04 部署 open_vins 过程 1. 背景介绍 最近…...

EasyRTC嵌入式音视频通信SDK音视频功能驱动视频业务多场景应用

一、方案背景​ 随着互联网技术快速发展&#xff0c;视频应用成为主流内容消费方式。用户需求已从高清流畅升级为实时互动&#xff0c;EasyRTC作为高性能实时音视频框架&#xff0c;凭借低延迟、跨平台等特性&#xff0c;有效满足市场对多元化视频服务的需求。 二、EasyRTC技术…...

Flink 失败重试策略 :restart-strategy.type

在 Apache Flink 中&#xff0c;restart-strategy.type 用于指定作业的重启策略&#xff08;Restart Strategy&#xff09;&#xff0c;它决定了作业在失败后如何恢复。 Flink 提供了 4 种内置重启策略&#xff0c;可以通过 flink-conf.yaml 或代码动态配置。 1. 可配置的 rest…...

从游戏到自动驾驶:互联网时代强化学习如何让机器学会自主决策?

一、为什么机器需要“试错学习”&#xff1f;——强化学习的核心秘密 你有没有玩过《超级马里奥》&#xff1f;当你操控马里奥躲避乌龟、跳过悬崖时&#xff0c;其实就在用一种“试错”的方法学习最优路径。强化学习&#xff08;Reinforcement Learning, RL&#xff09;就是让…...

javaSE复习(7)

1.KMP算法 使用KMP算法在主串 "abaabaabcabaabc" 中搜索模式串 "abaabc"&#xff0c;到匹配成功时为止&#xff0c;请问在匹配过程中进行的单个字符间的比较次数是&#xff08;&#xff09;。 10次 用于互斥时 初值为1 在一个并发编程环境中&#xff0c…...