软件开发困境

  • 软件开发的困境
  • 开发者的困境
  • 人月神话
    • 布鲁克斯的核心观点包括:
  • EAI (企业应用集成)
    • 通过EAI,企业能够实现以下功能:
    • 实例介绍
  • 信息孤岛
  • 软件开发有没有“银弹”?

软件开发的困境

在软件开发过程中,可能需要面对大量的问题,在大量软件开发的实际案例中,最主要的问题是:

  • 个性化与通用性的选择:

    软件开发有两种路径选择,

    • 一是选择市场上成熟通用的软件包,
    • 二是采用定制开发模式,由开发者根据客户的业务实际量身定制开发。
  • 业务变更与应用软件的同步问题:

    原来与业务匹配的应用软件在这种情况下可能成为业务发展的障碍。这种情况下,企业有时不得不以“推倒重来”的模式冲击新的信息系统,造成投入的巨大浪费。

  • 信息孤岛与 EAI

    • 在软件开发过程中,“应需建设”的模式可能带来大量的一个个独立的管理应用软件。这些独立的软件运行在不同的软硬件平台上,采用不同的技术架构,它带来的问题是大量的信息孤岛,部门之间协作困难,维护成本居高不下等一系列问题。
    • 国外企业的 EAI 方案是否符合中国的实际是一个重要的考验。
  • 开发项目失败的风险:在中国,开发项目成功率低的现实一直存在。

开发者的困境

  • 需求困境:在实施软件开发项目中,开发者面临的第一个也是最大的挑战是如何把握客户的需求。

    • 客户是否完全清楚其对未来才能上线软件的真正要求;

    • 文档化的需求是否已经完全表达了客户所表述的需求。

      这时开发者面临这样的选择:

    • 让客户为其签字画押的需求负责,这样可能激怒客户,甚至导致项目的最后失败;

    • 重新修改需求,再次调整开发,这样面临工期延长、成本上升、人员波动等困境。

  • 人月神话:这是一个软件开发的著名论断。

    每个软件开发者都得面对各种各样无法预知的变化因素:客户需求的变化,技术环境的变化,关键人员的变动等等。

    这些变化直接影响了软件交付的周期,带来开发成本的增长,同时也影响了合同的执行与客户的满意度。

  • 技术抉择:在快速变化的技术面前,如何选择技术架构,中间件,数据库,编程语言

  • 人员流动与积累困境:不断的客户(行业)经验的积累,形成了应用软件开发者的核心竞争力之

    一。而核心人员的流动,带来的最大挑战是知识经验的流失,新的人员往往得

    通过研究大量的代码来继承原来的业务知识。

更多详细内容,请微信搜索“前端爱好者戳我 查看

人月神话

《人月神话》(The Mythical Man-Month)是一本由计算机科学家弗雷德里克·布鲁克斯(Frederick P. Brooks Jr.)所著的经典书籍,首次出版于1975年,后经多次再版修订,成为软件工程领域中不可或缺的参考文献。书中提出了许多至今仍被广泛引用和讨论的观点,尤其是对软件开发管理实践的影响深远。

布鲁克斯通过他在IBM领导System/360家族计算机操作系统OS/360开发过程中的亲身经历,揭示了软件项目管理中的一个核心问题:

增加人力并不能直接、线性地缩短项目所需时间。

他指出“人月”是一种神话般的度量,因为它假设人员和时间可以相互替换,并且忽视了团队协作中的沟通开销、培训新人的成本以及复杂的系统内部关联等因素。

布鲁克斯的核心观点包括:

  • 人月非线性关系:增加更多开发人员到已经延误的项目中往往不会加快项目进度,反而可能由于沟通复杂性的增加而使情况恶化。
  • 关键路径与瓶颈:软件开发并非简单的并行任务集合,存在关键路径,增加资源不能解决所有问题,特别是当任务依赖于单点或瓶颈环节时。
  • 概念完整性:强调系统设计阶段的概念完整性对于软件质量的重要性,单一设计权威能够确保整体架构的一致性。
  • 隐形的不可见工作:软件开发不仅仅是编程,还包括需求分析、设计、测试等多个阶段,这些工作难以估算,且往往占据项目大部分时间。

《人月神话》的很多见解如今已经成为软件工程领域的基本原则,它警示项目管理者不要盲目依赖增加人力资源来压缩项目时间表,并倡导更加科学合理的项目管理和组织结构。

EAI (企业应用集成)

EAI(Enterprise Application Integration,企业应用集成)是一种用于整合企业内部不同信息系统和业务流程的技术和方法论。

其主要目标是解决企业在发展过程中因使用多种异构系统(如ERP、CRM、SCM、数据库、数据仓库等)而导致的数据孤岛和通信难题。

通过EAI,企业能够实现以下功能:

  1. 连接不同的软件应用,使得这些原本独立运行的应用能够协同工作,共享信息和业务逻辑。
  2. 在企业内外部实现安全、高效的数据交换和业务流程整合。
  3. 提供一种灵活的基础架构,支持不断变化的业务需求和新兴技术,如Web服务集成、面向服务架构(SOA)、内容集成以及业务流程管理(BPM)等。
  4. 减少手动操作和冗余数据输入,提高工作效率,减少错误和延迟。
  5. 维护数据的一致性和准确性,确保在多个系统间同步更新信息。

EAI通常利用中间件技术、APIs、消息传递机制、适配器、转换工具以及标准协议等多种手段来实现在不同平台上构建的应用程序之间的互操作性。

随着技术的发展,现代EAI解决方案也涵盖了云计算、微服务和容器化等更为先进的技术和模式。

实例介绍

假设一个大型制造企业拥有以下几种独立运作的应用系统:

  1. ERP系统(Enterprise Resource Planning) - 用于管理生产计划、供应链、库存和财务等核心业务流程。
  2. CRM系统(Customer Relationship Management) - 用于跟踪客户交互、销售和服务活动。
  3. HR系统(Human Resources Management System) - 用于管理员工信息、薪酬和福利等人力资源事务。
  4. 电子商务平台 - 用于在线交易和订单处理。

在没有EAI的情况下,这些系统可能是孤立运作的,导致数据重复录入、信息更新不同步等问题。

例如,新员工入职时,HR系统更新了员工信息,但这些信息可能无法自动反映到ERP系统中用于计算产能或分配工作任务;或者,电子商务平台上的订单数据不能实时推送到ERP系统进行生产和发货安排。

通过实施EAI解决方案,可以搭建一个中间层,例如采用消息中间件、服务总线或API网关,来实现不同系统间的通讯和数据同步:

  • 当HR系统中新员工信息发生变化时,EAI系统会自动捕获这一变更并通过预定义的接口将数据推送至ERP系统。
  • 订单从电子商务平台产生时,EAI组件能立即接收订单信息,并将其转化为ERP系统可以理解的格式,进而触发生产流程。

这样一来,EAI不仅消除了数据孤岛,还促进了跨部门、跨系统的业务流程自动化,提升了企业运营的整体效能。

信息孤岛

信息孤岛是指在企业、组织或机构内部不同部门、系统或应用程序之间存在的严重信息分割现象,各个系统虽然功能完整,但由于没有实现有效的信息共享、数据交互和业务流程整合,导致数据、资源和功能彼此独立,无法互联互通,就像一个个孤立的岛屿一样。

具体表现形式包括但不限于以下几个方面:

  1. 数据孤岛:不同系统中存储的相关数据无法有效共享,比如财务系统中的数据不能被销售系统或供应链管理系统直接访问和使用。

  2. 系统孤岛:各个部门使用的软件系统采用了不同的技术架构、数据库格式或通信协议,导致它们之间无法直接进行数据交换和功能调用。

  3. 业务孤岛:业务流程割裂,同一业务链条上的各个环节可能被多个系统分别控制,无法形成端到端的无缝衔接,影响整体业务效率。

  4. 管控孤岛:由于组织结构、权限设置等原因,管理层面的信息流转受阻,决策者无法获得全面、及时和准确的数据以支持决策。

信息孤岛的形成原因多样,包括早期信息化建设的规划不足、不同发展阶段引入的不同信息系统之间缺乏统一标准、技术壁垒、数据所有权和隐私保护要求等。

解决信息孤岛问题的方法通常涉及企业级架构的设计、标准化的数据模型和接口、数据集成和交换平台的建立、业务流程重构及统一的身份认证和授权管理等措施。

现代企业通过采用企业应用集成(EAI)、企业服务总线(ESB)、大数据集成平台、云计算和微服务等技术手段来逐步打破信息孤岛,实现信息资源的有效整合与利用。

软件开发有没有“银弹”?

软件开发领域中提到的“银弹”概念源自弗雷德里克·布鲁克斯(Fred Brooks)在1986年的经典文章《没有银弹:软件工程的根本和次要问题》(No Silver Bullet — Essence and Accidents of Software Engineering)中提出的观点。

在这篇文章中,布鲁克斯探讨了软件开发生产力的问题,并得出结论,在接下来的十年内(即1986年至1996年),不太可能存在一种单一的技术或管理方法能够像银弹一样,瞬间解决软件开发中的所有难题,使生产力提高一个数量级。

布鲁克斯认为软件开发的困难可以分为两大类:

  1. 根本性困难(Essential Complexity):这是源于软件所解决问题本身的固有复杂性,这种复杂性是不可避免的,因为软件设计涉及到抽象思维和逻辑构造的复杂性。
  2. 次要困难(Accidental Complexity):这类问题是由于现有工具和技术的局限性导致的额外复杂性,是可以改进和克服的。

随着时间的推移,业界一直在寻找“银弹”,即试图通过各种创新技术、方法论和工具来显著改善软件开发效率和质量,如敏捷开发、DevOps、低代码开发平台、AI辅助编程和大规模预训练模型等。

最近的讨论集中在AI和大模型如何影响软件开发行业上,一些人寄希望于AI能够成为软件开发的“银弹”。

尽管AI和大模型在某些方面展现出显著的潜力,可以帮助自动化部分工作流程、减少人工编写代码的工作量、优化代码质量和提升开发效率,但是否真正解决了软件开发的所有根本性问题,从而成为绝对意义上的“银弹”,目前学术界和工业界仍有争议。

特别是在面对高度定制化、创造性强和问题域复杂的软件项目时,AI技术尚无法完全替代人类的智慧和经验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488781.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FPGA时钟资源详解(3)——全局时钟资源

FPGA时钟系列文章总览:FPGA原理与结构(14)——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 一、概述 全局时钟是 FPGA 中的一种专用互连网络,旨在将时钟信号分配到 FPGA 内各种资源的时钟输入处。这种设计…

ARM IHI0069F GIC architecture specification (4)

1.3 支持的配置和兼容性 在 Armv8-A 中,EL2 和 EL3 是可选的,PE 可以支持一个、两个或都不支持这些异常级别。 然而: • PE 要求EL3 支持安全和非安全状态。 • PE 需要EL2 来支持虚拟化。 • 如果未实施EL3,则只有一个安全状态。…

Mysql数据库——数据备份与恢复

目录 一、数据备份的重要性 二、数据库备份的分类 1.从物理与逻辑的角度分类 2.从数据库的备份策略角度,备份可分为 2.1完全备份 2.2差异备份 2.3增量备份 2.4总结 三、常见的备份方法 四、Mysql数据库完全备份 1.完全备份定义 2.优缺点 3.数据库完全备…

FPGA时钟资源详解(4)——区域时钟资源

FPGA时钟系列文章总览:FPGA原理与结构(14)——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、Clock-Capable I/O 三、I/O 时钟缓冲器 —— BUFIO 3.1 I/O 时钟缓冲器 3.2 BUFIO原语 四、区域时钟…

【每日一题】2642. 设计可以求最短路径的图类-2024.3.26

题目: 2642. 设计可以求最短路径的图类 给你一个有 n 个节点的 有向带权 图,节点编号为 0 到 n - 1 。图中的初始边用数组 edges 表示,其中 edges[i] [fromi, toi, edgeCosti] 表示从 fromi 到 toi 有一条代价为 edgeCosti 的边。 请你实…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层(差错控制) 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验(CRC)FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

搜维尔科技:「工业仿真」煤炭矿井模拟仿真救援项目实施

煤炭矿井模拟救援系统满足煤矿企业在紧急避险应急演练方面的实际需要,在不耽误井下正常生产的情况下,高效率、低成本地实现对本矿区入井人员进行避灾演练培训,并学会正确的避灾自救互救方法。并可在本系统中直观的看到人员定位系统、监控系统…

Java毕业设计 基于SSM网上二手书店系统

Java毕业设计 基于SSM网上二手书店系统 SSM jsp 网上二手书店系统 功能介绍 用户:首页 图片轮播 图书查询 图书分类显示 友情链接 登录 注册 图书信息 图片详情 评价信息 加入购物车 资讯信息 资讯详情 个人中心 个人信息 修改密码 意见信息 图书收藏 已经付款 邮…

JavaWeb项目——MVC架构框架

表现层(UI):直接跟前端打交互(一是接收前端ajax请求,二是返回json数据给前端)业务逻辑层(BLL):一是处理表现层转发过来的前端请求(也就是具体业务&#xff09…

群晖NAS安装Video Station结合内网穿透实现公网访问本地影音文件

文章目录 1.使用环境要求:2.下载群晖videostation:3.公网访问本地群晖videostation中的电影:4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端(搭载安卓,ios,ipados等系统的设备…

ASR-LLM-TTS 大模型对话实现案例;语音识别、大模型对话、声音生成

参考:https://blog.csdn.net/weixin_42357472/article/details/136305123(llm+tts) https://blog.csdn.net/weixin_42357472/article/details/136411769 (asr+vad) 这里LLM用的是chatglm;电脑声音播报用的playsound 代码: ##运行 python main.pymain.py from multipro…

Form 表单选择多个时间段 完成必填校验

一、案例效果 二、案例思路 在 Vue 中,你可以使用 v-for 指令动态渲染多个表单项,并使用 v-model 指令进行双向数据绑定。同时,你可以使用 Element UI 的 Form 组件进行表单验证。动态定义校验 prop和rules三、代码案例 html <mtd-form-itemv-for="(item, index) i…

小动物主动跑轮和被动跑轮的功能和目的?

小动物主动跑轮和被动跑轮在运动方式、实验目的和设计构造方面上是有区别的。 运动方式不同。主动跑轮是由动物自主运动来推动跑轮转动的。这种设置可以真实地反映动物自发的运动情况。相对地&#xff0c;被动跑轮则是一种强迫运动的方式&#xff0c;通常由电机带动跑轮转动从…

虚拟机如何在原有磁盘上扩容

虚拟机未开启状态–菜单栏–虚拟机–快照–拍摄快照–拍摄快照– 菜单栏–虚拟机–快照–快照管理器–点击刚刚的快照1–删除–是– 文件–新建或者打开–硬盘&#xff08;以本人Win 10.64.3GL为例&#xff09;–虚拟机设置–硬件– 硬盘&#xff08;SATA&#xff09;–磁盘实…

后端常问面经之Java基础

基本数据类型 Java中有8种基本数据类型&#xff1a; 6种数字类型&#xff1a; 4种整数型&#xff1a;byte、short、int、long 2种浮点型&#xff1a;float、double 1种字符类型&#xff1a;char 1种布尔类型&#xff1a;boolean 数据类型的默认值以及所占空间如下&#x…

【计算机图形学】Command-driven Articulated Object Understanding and Manipulation

对Command-driven Articulated Object Understanding and Manipulation的简单理解 文章目录 1. 以往工作问题和本文提出的工作内容2. 任务定义3. 方法2.1 Seg-Net3.2 Art-Net3.3 推理 1. 以往工作问题和本文提出的工作内容 该工作提出了一个新的方法&#xff0c;面向人类指令…

Flutter 旋转动画 线性变化的旋转动画

直接上代码 图片自己添加一张就好了 import dart:math;import package:flutter/material.dart;import package:flutter/animation.dart;void main() > runApp(MyApp()); //旋转动画 class MyApp extends StatelessWidget {overrideWidget build(BuildContext context) {re…

docker学习笔记 三-----docker安装部署

我使用的部署环境是centos 7.9 1、安装依赖工具 yum install -y yum-utils device-mapper-persistent-data lvm2 安装完成如下图 2、添加docker的软件信息源 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo url地址为如…

如何启动极狐GitLab 静态网站Pages功能

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何使用极狐GitLa…

MySQL进阶45讲【35】什么时候会使用内部临时表?

1 前言 在MySQL进阶45讲【15】“order by“是怎么工作的&#xff1f;和MySQL进阶45讲【32】到底可不可以使用join&#xff1f;文章中&#xff0c;分别介绍了sort buffer、内存临时表和join buffer。这三个数据结构都是用来存放语句执行过程中的中间数据&#xff0c;以辅助SQL语…