软件开发是指专门针对软件创建、设计、部署和支持过程的一系列计算机科学活动。
软件本身是对计算机发号施令的一系列指令或程序。 它独立于硬件,并支持对计算机进行编程。 其分为三种基本类型:
系统软件,用于提供诸如操作系统、磁盘管理、实用程序、硬件管理及其他运营必备要素的核心功能。
编程软件,用于为程序员提供工具,如文本编辑器、编译器、连接器、调试器和其他用于创建代码的工具。
应用软件(应用程序或应用),可帮助用户执行任务。 比如办公生产力套件、数据管理软件、媒体播放器和安全程序。 应用程序还指代 Web 和移动应用程序,如用于在 Amazon.com 上购物、通过 Facebook 进行社交互动或将照片发布到 Instagram 的应用。1
可能存在的第四种类型为嵌入式软件。 嵌入式系统软件用于控制通常不被视为计算机的机器和设备,如电信网络、汽车、工业机器人等等。 这些设备及其软件可作为物联网 (IoT) 的一部分实现连通。2
软件开发主要由程序员、软件工程师和软件开发人员进行。 这些角色彼此互动且存在交叠,另外他们之间的互动方式在开发部门和社区间变化明显。
程序员或编码员负责编写源代码来对计算机进行编程,目的是完成诸如合并数据库、处理在线订单、路由通信、执行搜索或显示文本和图形等具体任务。 程序员通常会解释来自软件开发人员和工程师的指令,并利用 C++ 或 Java 等编程语言来实施指令。
软件工程师运用工程原理来构建软件和系统,以解决问题。 他们使用建模语言和其他工具来设计解决方案,这些解决方案往往可用于解决常规问题,而不是仅解决具体实例或客户的相关问题。 软件工程解决方案遵循科学方法,且必须具有现实可用性,其作用类似于桥梁或电梯。 随着产品越来越智能,并新增了大量微处理器、传感器和软件,软件工程师的职责范围也随之扩张。 不仅有更多的产品依靠软件获得了市场优势,另外产品的软件开发工作必须与产品的机械和电气开发工作协调一致。
软件开发者相比工程师而言,其角色不那么正式,且可能与具体项目领域密切相关,如编写代码。 同时,他们还推动着整个软件开发生命周期的发展,包括跨职能团队合作,以将需求转换为功能,管理开发团队和流程,并开展软件测试和维护。3
软件开发工作并不仅限于编码人员或开发团队。 科学家、设备制造商和硬件制造商等专业人员尽管不是主要的软件开发人员,但他们也可以创建软件编码。 同时软件开发也不局限于传统的信息技术行业,如软件或半导体业务。 事实上,根据 Brookings Institute(链接位于 ibm.com 外部)研究报告,这些企业中“有不到一半的公司会进行软件开发。”
但一个重要的区别是,他们从事的是定制软件开发,而非商业软件开发。 定制软件开发是针对一系列特定用户、功能或组织过程设计、创造、部署和维护软件的过程。 相反,成熟的商业软件 (COTS) 旨在满足一系列广泛的需求,可进行包装并用于商业营销和分发。
开发软件通常涉及以下步骤:
软件开发流程的一系列步骤融合成了 应用程序生命周期管理 (ALM)。 IBM 的工程管理解决方案是一系列出色的 ALM,支持对并行的机械、电气和软件开发进行管理。
软件开发流程步骤可归入生命周期的各个阶段,但生命周期的重要性在于它会不断循环,以实现持续改进。 例如,维护和支持阶段出现的用户问题可能成为下一周期开始时的需求。
软件开发的重要性还源于它无处不在。 IBM 副总裁,同时也是博客作者 Dibbe Edwards 指出:“随着不断发展的物联网实现了从汽车到洗衣机和恒温器等产品的互联互通,软件已成为众多产品的一个关键优势。”
几个例子:
利用软件开发 来突显品牌并获得竞争优势 要求熟练运用各种技巧与技术,从而加快软件部署,提升质量和成效。
经验证的建模和设计活动解决方案,帮助您更快地交付更高质量软件和系统。
针对个人和团队的高级软件版本控制、工作空间管理、分布式源代码控制和并行开发支持可以自动跟踪工件变更情况,从而帮助提高生产力。 该软件支持几乎无限制的暂挂与恢复功能,以处理工作中断情况。
在 IBM Engineering Lifecycle Management 工具和 Git、GitLib 和 GitHub 等第三方工具之间建立连接,以管理软件的版本控制。