前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >应用软件开发的工程化

应用软件开发的工程化

原创
作者头像
行者深蓝
修改2023-11-18 10:34:53
4610
修改2023-11-18 10:34:53
举报

应用软件的工程化

应用软件的功能需求、非功能需求和工程化问题是应用软件开发中不可或缺的部分。功能需求是软件必须实现的功能,非功能需求是软件必须满足的属性,工程化问题是软件开发过程中遇到的技术问题。

功能需求

功能需求是软件必须实现的功能,是软件开发的起点。功能需求可以分为两类:基本功能需求和附加功能需求。

  • 基本功能需求是软件必须实现的最基本的功能,是软件能够满足用户需求和业务要求的基础。
  • 附加功能需求是软件可以选择实现的功能,可以提升软件的用户体验和可用性。

非功能需求

非功能需求是软件必须满足的属性,包括性能需求、安全需求、可靠性需求、可扩展性需求和可维护性需求。

  • 性能需求是软件必须满足的性能指标,如响应时间、吞吐量等。
  • 安全需求是软件必须满足的安全性要求,如数据安全、系统安全等。
  • 可靠性需求是软件必须满足的可靠性要求,如容错性、可恢复性等。
  • 可扩展性需求是软件必须满足的可扩展性要求,如支持用户规模的增长等。
  • 可维护性需求是软件必须满足的可维护性要求,如易于理解、维护等。

工程化问题

工程化问题是软件开发过程中遇到的技术问题,包括软件设计问题、软件实现问题和软件部署问题。

  • 软件设计问题是软件的架构设计、算法设计等。
  • 软件实现问题是软件的编程、测试等。
  • 软件部署问题是软件的部署、运维等。

工作量占比

功能需求、非功能需求和工程化问题是应用软件开发中不可或缺的部分。功能需求是软件开发的起点,非功能需求是功能需求的延伸,工程化问题是满足功能需求和非功能需求的手段。在应用软件开发过程中,需要充分考虑这三方面的因素,才能开发出满足用户需求、符合业务要求、可靠安全、易于维护的软件,根据历史的统计经验,各自的占比参考如下:

名称

定义

关联关系

工作量占比

功能需求

软件必须实现的功能

非功能需求是功能需求的延伸

50%

非功能需求

软件必须满足的属性

功能需求是软件开发的起点

30%

工程化问题

软件开发过程中遇到的技术问题

满足功能需求和非功能需求的手段

20%

开发流程

在传统的瀑布模型中,功能需求、非功能需求和工程化问题是分阶段进行的。在需求分析阶段,首先要定义功能需求,然后再定义非功能需求,最后才是工程化问题。在开发阶段,先是设计软件,然后是实现软件,最后是部署软件。这种开发模式的缺点是,在需求分析阶段,很难准确预测软件的非功能需求和工程化问题,这可能会导致软件在开发完成后无法满足用户需求或业务要求。

敏捷开发是一种迭代的开发模式,它将功能需求、非功能需求和工程化问题融入到开发过程中。在敏捷开发中,软件开发团队会在短时间内(通常是两周)交付一个可运行的软件版本,然后根据用户反馈进行迭代开发。这种开发模式的优点是,可以更灵活地满足用户需求和业务要求,同时也能提高软件的可靠性和可维护性。

DevOps 是一种软件开发和运维的协同方法论,它将软件开发和运维融为一体。在 Devops 中,软件开发团队和运维团队会紧密合作,共同确保软件的质量和可靠性。DevOps 可以帮助软件开发团队更好地满足用户需求和业务要求,同时也能提高软件的可靠性和可维护性。

内容

瀑布模型

敏捷开发

DevOps

优点

开发过程清晰、可控,易于管理和跟踪,适合大型、复杂的软件开发项目

灵活,适应变化的需求,开发周期短,成本低,有利于团队协作

提高软件质量和可靠性,缩短软件交付周期,降低软件开发成本

缺点

不灵活,难以满足变化的需求,开发周期长,成本高,不利于团队协作

开发过程不够清晰、可控,难以管理和跟踪,不适合大型、复杂的软件开发项目

需要团队的协作和配合,需要一定的技术和经验

功能需求

软件必须实现的功能

软件必须满足的属性

软件开发过程中遇到的技术问题

建议

在需求分析阶段,要充分考虑用户需求和业务要求,并尽可能准确地定义功能需求和非功能需求

在开发过程中,要采用迭代开发的方式,并根据用户反馈进行调整

要采用 Devops 的方法论,将软件开发和运维融为一体

瀑布模型和敏捷开发是两种截然不同的开发模式,各有优缺点。瀑布模型适合大型、复杂的软件开发项目,而敏捷开发适合小型、快速迭代的软件开发项目。Devops 是一种方法论,可以帮助软件开发团队更好地满足用户需求和业务要求,同时也能提高软件的可靠性和可维护性。在实际的软件开发中,可以根据项目的特点选择合适的开发模式和方法论.

软件工程化的重要性可以从以下几个方面概述:

  • 标准化:通过统一的标准和流程,可以提高软件开发和运维的效率和可靠性。例如,Devops 倡导使用统一的代码库、版本控制系统、部署工具等,可以减少重复工作,提高开发和运维人员的协作效率。
  • 流程化:通过建立完善的开发和运维流程,可以确保软件的质量和可靠性。例如,Devops 倡导采用持续集成/持续交付 (CI/CD) 模式,可以快速发现和修复软件中的缺陷。
  • 自动化:通过自动化软件开发和运维的各个环节,可以提高效率和可靠性。例如,Devops 倡导采用自动化测试、自动化部署等工具和技术,可以减少人为错误,提高软件的质量和可靠性。

高效的软件工程化可以帮助开发团队在以下方面取得收益:

  • 提高软件质量和可靠性:通过标准化、流程化和自动化,可以减少软件开发过程中的错误和缺陷,提高软件的质量和可靠性。
  • 缩短软件交付周期:通过 CI/CD 模式,可以快速将软件从开发阶段交付到生产环境,* 缩短软件交付周期。
  • 降低软件开发成本:通过自动化,可以减少人力成本,降低软件开发成本。
  • 提高软件开发和运维团队的协作效率:Devops 通过统一的标准和流程,可以促进软件开发和运维团队的协作,提高效率。

软件工程发展的趋势,可以帮助软件开发团队提高软件的质量、可靠性、交付速度和成本效益。以下表格是列举了不同阶段可以使用到的工具:

阶段

工具类型

工具

功能

需求分析

用户需求收集

问卷调查、访谈、用户反馈等

收集用户需求

需求分析

需求分析

需求文档管理工具、需求分析模型工具等

分析用户需求,生成需求文档,识别潜在的风险和问题

设计

软件设计

UML 建模工具、架构设计工具等

生成设计文档,自动生成代码

编码

代码编辑器

Visual Studio Code、Sublime Text、JetBrains IDE 等

编写代码

测试

自动化测试

Selenium、JUnit、pytest 等

自动生成测试用例,分析测试结果

测试

测试辅助工具

AI 可以自动生成测试用例,并分析测试结果

部署

持续集成/持续交付 (CI/CD)

Jenkins、Travis CI、GitLab CI/CD 等

自动化部署流程,根据需求进行调整

运维

监控工具

Nagios、Zabbix、Prometheus 等

监控软件运行情况

运维

日志分析工具

ELK、ClickHouse、Fluentd、Logstash 等

分析软件运行日志

运维

自动化运维工具

Ansible、Chef、Puppet 等

自动化运维任务

随着人工智能(AI)和机器学习(ML)技术的不断发展,软件工程化也在发生一系列变化和改进

  1. AI 驱动的软件工程:AI 可以用于辅助生成代码、执行测试软件、识别错误和缺陷、优化软件性能等。
  2. ML 驱动的软件工程:例如,ML 可以用于预测软件开发风险、优化软件架构、自动生成文档等。
  3. DevOPS的智能化:DevOPS 可以结合 AI 和 ML 技术,例如,可以快速完成自动化 CI/CD 流程、识别软件安全漏洞、分析软件性能等。

随着AIGC技术的成熟,软件工程化的形态,将可能会进一步巨大的改变,例如:

  • AIGC 生成代码:AI 可以学习软件开发的模式和规律,从而自动生成代码。这可以提高软件开发的效率,并减少人为错误。
  • AIGC 驱动测试:通过对话式的指令,可以自动生成测试用例,生成软件性能分析报告等,
  • AIGC 驱动的软件工程全链路自动化:结合LangChain生态链中的,Agent/Tools,甚至可以像人一样听说读写,甚至能高度自动化完地成从用户需求分析、设计、编码、测试、部署到运维中的大部分基础工作。

相关的部分基于AIGC的软件与服务

软件/服务

功能

应用场景

GitHub Copilot

代码生成

编码

IntelliJ IDEA AI Assistant

智能提示

编码

Google AI Testable AI

自动化测试

测试

Langchain

自动生成代码、测试软件、识别错误和缺陷、优化软件性能等

软件开发的各个环节

以下是一些具体的基于AIGC的软件功能介绍:

  • GitHub Copilot:GitHub Copilot 是一个代码生成工具,可以帮助软件开发人员自动生成代码。
  • IntelliJ IDEA AI Assistant:IntelliJ IDEA AI Assistant 是一个智能提示工具,可以帮助软件开发人员提高编码效率。
  • Google AI Testable AI:Google AI Testable AI 是一个自动化测试工具,可以帮助软件开发人员发现和修复软件中的缺陷。
  • Langchain:Langchain 是一个人工智能软件工程平台,可以帮助软件开发人员自动生成代码、测试软件、识别错误和缺陷、优化软件性能等。 这些软件与服务可以帮助软件开发人员提高软件开发的效率和质量,并降低软件开发的成本。

开发环境

根据 Statcounter 的数据,2023年7月,Linux 服务器操作系统市场占有率为 76.4%,Windows 服务器操作系统市场占有率为 22.3%,除了部分传统企业中还存在一些Windows 服务器操作系统,考虑以下常见问题:

  • 开发环境系统与实际线上服务器系统相同的操作系统一致
  • 避免开发环境编码和实际线上系统编码不一致引发的问题
  • 以及Windows 作为一个商业操作系统,在开发环境方面存在以下缺点:系统封闭,安全性较低;命令行工具功能有限,不易管理。虚拟化/容器化运行环境支持有限等问题。因此,不推荐使用 Windows 作为开发环境。如果需要在 Windows 下作为开发调试环境,可以使用 WSL(Windows Subsystem for Linux)来替代,如果条件具备,更推荐使用Linux/MacOS作为开发环境。

DevOPS 实践

概述

推荐使用 git 作为代码仓库版本控制的理由如下:

  • 协作:Git 支持多用户协作,可以方便多个开发人员同时开发同一项目。
  • 版本控制:Git 是目前最流行的版本控制系统,具有强大的版本管理功能。
  • 可扩展性:Git 是开源软件,具有强大的可扩展性,可以根据需要添加新的功能和特性。

GitHub Actions 是 GitHub 提供的持续集成/持续交付 (CI/CD) 服务,可以帮助开发人员自动化代码构建、测试和部署过程。GitHub Actions 具有以下优势:

  • 免费使用:GitHub Actions 是 GitHub 提供的免费服务,个人用户可以无限制地使用。
  • 易于使用:GitHub Actions 使用 YAML 语言编写,语法简单,易于学习和使用。
  • 可扩展性强:GitHub Actions 支持各种 CI/CD 任务,可以根据需要进行扩展和定制。
  • 与 GitHub 集成:GitHub Actions 与 GitHub 深度集成,可以利用 GitHub 的众多功能,例如代码管理、版本控制、协作等。
  • 持续集成 (CI):GitHub Actions 可以自动构建代码,并使用单元测试和集成测试来验证代码质量。
  • 持续交付 (CD):GitHub Actions 可以自动将代码部署到本地、开发环境、测试环境或生产环境。

其他可选的有 Gitlab 以及国内的 CI/CD 服务:腾讯云CodeBuild、阿里云效、华为云 CodeBuild,可以根据需要选择。

除了上述工具之外,软件项目开发还可以使用其他一些工具,例如:

  • 项目管理工具:Jira、Trello 等。
  • 文档管理工具:Confluence、Wiki 等。
  • 协作工具:Slack、Zoom 等。

额外说明

如果是大陆区域使用Github因为GFW策略等原因,访问速度会比较慢,建议使用Xtls等开源项目加速器改善

环境信息

名称

服务

描述

代码仓库

github.com

存储代码、管理版本、协作开发

CI

github action

持续集成、构建、测试

CD

github action

持续交付/持续部署

部署环境

k3s/单机部署

用于部署和运行应用程序

GitHub Actions CICD

在代码仓库中,添加 GitHub Actions 工作流的 YAML 文件 .github/workflows/pipeline.yaml 就可以以触发运行 CICD Pipeline:

详细介绍下这个CICD Pipeline 构建测试和部署流程中的 jobs:

  • build:构建

该 job 负责构建应用程序的二进制文件。它首先克隆代码库,然后安装构建所需的依赖项。最后,它使用 make 命令构建二进制文件。

  • test:测试

该 job 负责运行应用程序的测试用例。它首先克隆代码库,然后安装测试所需的依赖项。最后,它使用 make test 命令运行测试用例。

  • Build Image:构建 Docker 镜像

该 job 负责构建并推送应用程序的 Docker 镜像。它首先克隆代码库,然后使用 Kaniko 工具构建 Docker 镜像。最后,它使用 docker push 命令推送 Docker 镜像到 Artifact Registry。

  • setup-k3s:设置 K3s 集群

该 job 负责设置 K3s 集群。它首先克隆代码库,然后安装 Ansible 工具。最后,它使用 Ansible playbook 创建 K3s 集群。

  • deploy-app: 部署应用程序

该 job 负责部署应用程序到 K3s 集群。它首先克隆代码库,然后使用 Ansible playbook 部署应用程序。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 应用软件的工程化
    • 功能需求
      • 非功能需求
        • 工程化问题
          • 工作量占比
            • 开发流程
            • 开发环境
            • DevOPS 实践
              • 概述
                • 环境信息
                  • GitHub Actions CICD
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档