软件开发流程解析

news2025/3/14 23:56:23

文章目录

  • 1. 软件开发生命周期
  • 2.常见开发流程
    • 2.1 瀑布模型
    • 2.2 敏捷开发
  • 3.实例开发过程示例

1. 软件开发生命周期

来源于百度百科:软件生命周期(Software Life
Cycle,SLC)是软件的产生直到报废或停止使用的生命周期。软件生命周期内有问题定义、可行性分析、总体描述、

系统设计、编码、调试和测试、验收与运行、维护升级到废弃等阶段,也有将以上阶段的活动组合在内的迭代阶段,即迭代作为生命周期的阶段。

软件生命周期又称为软件生存周期或系统开发生命周期,是软件的产生直到报废的生命周期,周期内有问题定义、可行性分析、总体描述、系统设计、编码、调试和测试、

验收与运行、维护升级到废弃等阶段,这种按时间分层的思想方法是软件工程中的一种思想原则,即按部就班、逐步推进,每个阶段都要有定义、工作、审查、形成文档以供交流或备查,

以提高软件的质量。但随着新的面向对象的设计方法和技术的成熟,软件生命周期设计方法的指导意义正在逐步减少

2.常见开发流程

在 Java 工程开发过程中,常见的开发流程有以下几种:

  1. 瀑布模型(Waterfall Model):该模型顺序执行各个阶段,每个阶段完成后再进入下一个阶段。从需求分析、设计到编码测试,按照预先制定的计划和流程进行。瀑布模型适用于需求明确且不易变化的项目
  2. 敏捷开发(Agile Development):该模型注重快速迭代和反馈,以用户需求为中心,强调团队合作和沟通。采用迭代与增量的方式来完成项目,通过持续交付和持续集成来保证软件质量。
  3. DevOps(Development Operations):这是一种基于敏捷、持续交付思想的开发模式,注重让开发和运维能够更好地协作和交流,以提高系统交付的效率和质量。
  4. 测试驱动开发(Test Driven Development,TDD):该模型强调测试与开发的衔接,以测试为导向进行开发。首先编写测试用例,然后根据用例编写代码,再运行并修复测试用例,循环执行直到所有测试用例都通过。
  5. 核心产品开发流程(Core Product Development Process,CPDP):该模型主要适用于大型企业或组织,在产品的开发过程中注重组织架构、设计文档等方面的规范,对质量和安全都有高要求。
  6. 螺旋模型(Spiral Model):螺旋模型是一种迭代式的软件开发过程,将项目分为多个小周期。每个周期包括需求分析、设计、实现和测试阶段。螺旋模型允许在每个周期结束时评估项目进度,并根据反馈进行调整。
  7. 原型模型(Prototype Model):原型模型是一种以原型为核心的软件开发过程。开发团队首先创建一个原型,然后根据客户反馈进行迭代和改进。原型模型适用于需求不明确或可能发生变化的项目。

不同的开发模型适用于不同的场景和项目,需要根据实际情况选择和适配。同时,在实际开发过程中可以结合多种开发模型,避免局限于一种模型的狭隘思维,取长补短追求卓越。

2.1 瀑布模型

瀑布模型(Waterfall
Model)是最早出现的软件开发模型,是传统软件开发方法的代表。在软件工程中占有重要的地位,它提供了软件开发的基本框架。1970
年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到 80 年代早期,它一直是唯一被广泛采用的软件开发模型。

瀑布模型将软件生命周期划分为 制定计划、需求分析、软件设计、程序编写、软件测试和运行维护 等六个基本活动,并且规定了它们 自上而下、相互衔接的固定次序 ,如同瀑布流水,逐级下落。其 严格强调文档,

前一个阶段的输出就是下一个阶段的输入,文档是阶段衔接的唯一信息。所以很多开发人员好象是在开发文档,而不是开发软件,因为要到开发的后期,才可以看到软件的“模样”。

瀑布型开发模型
虽然现在瀑布模型已经不是最主流的开发模式。但是不管什么软件项目,不管采用什么开发模式,有四种活动是必不可少的,那就是需求、设计、编码和测试。而这四项活动,都是起源自瀑布模型,也是瀑布模型中核心的部分。 管理人员喜欢瀑布模型的原因是把文档理解为开发的速度,可以方便地界定不同阶段的里程碑。

2.2 敏捷开发

  • 早期交付
    敏捷开发的第一个好处,就是早期交付,从而大大降低成本。

  • 降低风险
    敏捷开发的第二个好处是,及时了解市场需求,降低产品不适用的风险。

由于敏捷开发可以不断试错,找出对业务最重要的功能,然后通过迭代,调整软件方向。相比传统方式,大大增加了产品成功的可能性。如果市场需求不确定,或者你对该领域不熟悉,那么敏捷开发几乎是唯一可行的应对方式。

敏捷开发
参考链接:
1.https://www.cnblogs.com/expiator/p/12650769.html
2.https://pdai.tech/md/dev-spec/dev-agile/dev-th-agile.html

3.实例开发过程示例

我们在开发的过程中,也会涉及到不同的开发模型,我们公司现在是属于敏捷开发模型外加运营推动开发的方式.在开发的过程中,就是以实验的方式进行开发上线,测试功能带来的效果.如果可以,就不断进行迭代.如果不行那么功能就直接干掉,因此为了节约开发成本,一个需求在第一版的时候都是力求简单效率.这里说说一个示例;

需求1: 很多平台都会为创作者生成画像,比如xx头条,B站等,创作者会有不同的等级,而不同等级就会对应不同的权益, 需要对创作者进行分等级.

代码版本1:
属于最基础的代码,使用的Switch语句, 比使用if/else语句稍微好管理一点

switch(user){
    case level1:
        // level1的权益....
        break;
    case level2:
        // level2的权益....
        break;
    case level3:
        // level3的权益....
        break;
   ......
    default : logger.info("查找不到用户等级");
        break;
}

需求2: 针对不同等级的权益有变动, 增加一些对创作者触达的通知等. 即对需求进行迭代

代码版本2:
开始进行封装,使用策略模式对不同的等级权益进行封装,这边就简写了

// 策略接口
public interface UserLayerLevelStrategy {
    /**
     * 获取当前权益
     * @return
     */
    Integer getLevel();
}

// 不同等级的实现
@Service
public class UserLevel0 implements UserLayerLevelStrategy {
		// 具体的权益实现 
}

// 这边在进入Switch case语句时 就用策略类来代替了,但是还是会有很多分支
switch(user){
    case level0:
        // 权益
        new Context(new UserLevel0()).ContextInterface();
        break;
    case level1:
        // 权益
        new Context(new UserLevel1()).ContextInterface();
        break;
    case level3:
    	// 权益
        new Context(new UserLevel3()).ContextInterface();
        break;
   ......
    default : logger.info("查找不到用户等级");
        break;
}

重构后:

代码可读性增强:使用设计模式可以使代码更加清晰、易于理解和阅读。设计模式具备高度的抽象性,能够使开发人员通过统一接口来实现复杂的逻辑。
代码复用性提升:设计模式的核心思想是重用,它可以使得代码模板化,并且在需要的地方调用已经存在的设计模式来完成相应的功能。
提高代码质量:设计模式强调软件工程的概念,独立于开发人员,从而确保稳定性和可靠性,并可以避免一些常见的问题,降低代码的维护成本。
代码可扩展性提高:系统架构不再刻意受到各种限制,同时根据不同的需求对代码进行合理的扩展,同时引入新的设计模式,使得整个系统变得更加健壮与高可用。

同时:

在设计编码时,需要注意避免过度设计,以免造成不必要的开销。
过度设计主要有以下两个影响:
增加复杂性:设计模式概念抽象,使用多了可能会使代码变得更加复杂难以理解,降低可维护性、可扩展性和可测试性。
延迟上线时间:由于过度设计,导致开发周期增长和部署时间加长,从而降低项目的效率。

因此:

在设计代码时,可以遵循以下原则:
化繁为简: 仅在需要的地方引入设计模式,确保它的适宜性,并尽量避免过分复杂化;
可维护性优先:在保证设计模式使用合理的前提下,也要考虑代码的可读性、可维护性、可扩展性及其它的软件工程中诸如代码审查、文档编写等整体努力;
随着需求变化调整:设计模式不是一个银弹。正如业务逻辑不断发展一样,每个解决方案都会经历不同的演化过程,可能需要针对特定情境进行随时调整。

总之,在实现过程中应当综合考虑项目特性和业务需求,合理运用设计模式来提高代码质量,同时也需要注重可读性、可维护性和可扩展性等软件质量方面达到一个最佳的平衡点,做到恰到好处。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哈工大人工智能数学基础考试题型和资料(考查课)

大作业 【免费】人工智能数学基础11111资源-CSDN文库 PPT (1条消息) 【免费】人工智能数学基础PPT解压缩打开不会出现乱码资源-CSDN文库

Docker安装wordpress并配置数据库(详细步骤)

Docker在线拉取安装wordpress并配置数据库 一、拉取wordpress镜像(默认最新)二、启动wordpress容器三、查看容器状态四、安装wordpress博客程序 如果您已经在 Docker 容器中分别安装了 WordPress 和 MySQL,并且想要让它们链接起来,可以按照以下步骤进行操…

这所武汉的211,面试仅占比15%,却刷掉了409分的同学!Why?

一、学校及专业介绍 武汉理工大学(Wuhan University of Technology),简称武理工,位于武汉市,是中华人民共和国教育部直属全国重点大学,国家“双一流”建设高校,“211工程”、“985工程优势学科创…

西门子PPI协议开发

目录 西门子PPI协议开发 1 协议介绍 2 仿真环境 2.1 安装修改仿真软件 2.2 设置PPI串口 3 报文示例 西门子PPI协议开发 西门子PPI协议适用S7-200、S7-200SMART PLC。 1 协议介绍 仔细读下,用于开发是满足的,不用再去找其他文章了。网上找了不少&a…

wfe进不了standby模式怎么办

快速链接: . 👉👉👉 【目录】ARM/TEE/ATF/SOC微信群问题记录 👈👈👈 付费专栏-付费课程 【购买须知】:联系方式-加入交流群 ----联系方式-加入交流群 (说明:本文总结来自于微信群的公开讨论&a…

项目集管理—项目集生命周期管理

项目集生命周期管理是指为促进有效的项目集定义、项目集交付和项目集收尾,管理所需项目集 活动的绩效领域。 为了确保实现效益,项目集各组件要与组织战略目的和目标保持必要的一致性。这些组件可能包 括项目、子项目集和其他项目集相关活动,它…

城市内涝监测预警系统中积水监测仪的应用

一、方案背景 近年来,由强降水引发的道路低洼处、下穿式立交桥和隧道产生大量积水的现象时有发生,给人们的出行和生活带来很多不便,严重时甚至会造成人民生命、财产的重大损失。住房和城乡建设部、国家发展改革委办公厅于4月16日发布了《关于…

JavaScript 温度异常图表

了解如何使用高性能 JS 图表创建可用于异常天气和温度科学研究的 JS 温度异常图表。 你好! 在本文中,我们将创建温度异常图表。 对于这个例子,我们将使用 LightningCharts JS 库,特别是XY图表。对于那些对技术细节感兴趣的人&am…

2.数据库语言二

文章目录 数据库语言二Mysql的约束数据表高级操作克隆表方法一方法二 清空表,删除表内的数据方法一方法二 创建临时表外键约束数据库用户管理新建用户查看用户重命名用户删除用户修改用户密码忘记root密码 数据库用户授权授予权限查看权限撤销权限 数据库语言二 My…

OpenAI 重磅更新 变得更强啦 | 包括更多可控的 API 模型、函数调用能力、更长的上下文和更低的价格

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 OpenAI 官网:https://openai.com/blog/function-calling-and-other-api-updates 功能调用和其他 API 更新。OpenAI 宣布更新,包…

netstat命令与wget命令

查看本机的网络连接与后门:netstat 如果某个网络服务明明已经启动了,但是就算无法进行连接,那应该怎么办?首先你要查询以下网络接口所监听的端口(port),来看看是否真的已经启动,因为有时候屏幕上显示的OK并…

从 ColossalChat 到 DeepSpeedChat, RLHF的应用及优化

从 ColossalChat 到 DeepSpeedChat, RLHF的应用及优化 原创 紫气东来 收录于合集#LLMs8个 作者:紫气东来 项目地址:https://zhuanlan.zhihu.com/p/621391363 一、深入理解 ColossalChat 在上一期 NLP(九):LLaMA, Al…

畅捷通T+ SQL注入漏洞复现(QVD-2023-13612)

0x01 产品简介 畅捷通 T 是一款基于互联网的新型企业管理软件,功能模块包括:财务管理、采购管理、库存管理等。主要针对中小型工贸和商贸企业的财务业务一体化应用,融入了社交化、移动化、物联网、电子商务、互联网信息订阅等元素。 0x02 漏…

STM32速成笔记—GPIO

文章目录 一、什么是GPIO二、GPIO的输入/输出模式三、GPIO初始化配置四、Boot引脚五、一些特殊的GPIO六、点亮LED1. 硬件电路2. 拉高/拉低GPIO3. 程序设计 七、GPIO的位带操作 一、什么是GPIO GPIO(英语:General-purpose input/output),通用型之输入输出的简称&…

【算法与数据结构】142、LeetCode环形链表 II

文章目录 一、题目二、哈希法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、哈希法 思路分析:这道题也可以用双指针法去解,这里我介绍一种哈希法。利用set集合的值不可重复的特性。…

什么触控笔好用又便宜?性价比高的苹果笔推荐

而对于一些将IPAD作为学习工具的人来说,这款苹果Pencil无疑是必不可少的。不过,苹果版Pencil的价格实在是太高了,很多人都买不起。所以,最好的办法就是使用平替的电容笔。我是在前几年就开始使用ipad了,同时也是一位数…

快速入门教程:神经常微分方程 (Neural ODE)

神经常微分方程(Neural Ordinary Differential Equations,简称 Neural ODE)是一种基于常微分方程(Ordinary Differential Equations,ODEs)的深度学习方法,它结合了传统的ODE数值求解技术和神经网络模型。通过使用ODE来建模数据的演化过程,Neural ODE可以自动地学习数据…

项目管理专业人员能力评价(CSPM)对比PMP哪个好考?

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

编译opencv环境搭建:vs2019 + cmake-3.25 + opencv-4.5.5

一 下载vs2019 链接:Downloads - Visual Studio Subscriptions Portal 下载社区版本,因为是免费的,大家随便用 下载成功后直接安装就可以了。 有的环境安装好后在属性管理器中可能没有 Microsoft.Cpp.x64 文件 从如下链接下载 Microsoft.C…

三、OkHttp_缓存

一、OKHttp的缓存逻辑 OKHttp 把重复请求的数据缓存在本地,并设置超时时间,在规定时间内,客户端不再向远程请求数据,而是直接从本地缓存中取数据。 一来提高了响应速度,二来节省了网络带宽(也就是节省了钱…