一个软件是如何开发出来的呢?

一、前言

如今,AI大爆发的时代,作为一名IT从业者,你是否也想尝试开发一套自己的系统,实现那些看似有可能实现的天马行空的想法,变成一个优秀甚至伟大的产品,甚至带来某个行业的革新,那作为一名非开发人员,你是不是一样也很想知道一个系统从想法到产品是如何一步步实现的呢,本文基于此进行探究,为有想法的人提供借鉴参考。

在这里插入图片描述

二、软件开放全流程

在这里插入图片描述

2.1)需求沟通:

开始搭建系统之前,首先需要明确系统的需求。那就要求我们首先应根据客户/自己公司提出的目标和功能,了解用户或客户的需求、系统的功能和特点等,收集并整理需求信息,形成需求文档,需求文档应该详细描述系统的各项功能、性能要求、用户界面设计等,为后续的系统设计提供基础;梳理出适合的开发模式,提供一份《产品功能需求逻辑图》,并给出需要的时间和费用。

产出物:产品功能需求逻辑图、预估时间,预估费用。

2.2)需求确认和合同

在确认功能需求、时间、费用三方面都没有问题之后,签署合同,细节与服务商进行沟通,客户付完首付款项目开发工作正式启动,周期给予客户进度反馈。

产出物:产品功能需求列表确认版,合同

2.3)设计阶段

系统设计阶段涉及多个方面,系统架构设计要确定系统的整体结构和各个组件之间的关系,确保系统的稳定性和可扩展性。数据库设计要合理规划数据库结构,确保数据的存储和访问效率。界面设计要关注用户体验,设计简洁、易用的界面。

1、原型设计

由产品经理设计原型图,采用Axure或者Figma设计工具设计,根据功能需求列表,绘制页面框架线稿图

2、UI设计

原型图设计完成后,由设计师绘制UI界面,会给出高保真系统界面设计图。

3、数据库设计

项目技术经理设计根据功能需求列表设计数据库模型设计表关联关系等。其中,要重视索引的引入,什么时候建索引?建什么样的索引?

索引:编码前、统一建表时把索引设定好确认好,写代码时围绕着这些索引去写查询条件。但注意索引并不是越多越好,应坚持够用,越少越好
数据归档:数据量大的表,可以做归档
查询sql:查数据时,别用 select * ,请指定要查哪些字段;少用用 select count() ,浪费性能;慎用 limit,用主键判断再配合 limit 使用,尤其类似 limit 100000000,10 这样系统会直接卡死,性能非常差。查询时间范围时,尽量带上默认时间范围; 不要在循环里查数据库。这性能特别差;
善用事务:应考虑必要用事务,来保证数据一致性,尽量减少出现脏数据错误数据的情况。但事务设置不合理会容易死锁。
读写分离:访问量一多,必须考虑读写分离,一主多从。数据库的压力就会降下来。但一定要注意,更新数据后又查询时,如果时时性要求高,自己注意这是否会查主库,如果不会,请自己指定去主库查询。比如采集到商品数据后,丢入队列进行一些额外处理,队列里判断数据是否存在,如果不存在就返回false,这就会有问题。一般的ORM的底层有自动处理好,同一事务里,会自动连接主库。Thinkphp的框架还有个配置 read_master ,写入操作之后的读数据库,会自动去主库读取。这是个很好的功能。
分库分表:如果短时间之内会有大量数据,或者不能做数据归档。可以使用分表,甚至分库。

4、架构设计

项目技术经理对设计整体的系统分层架构,便于以后再次扩展功能。

产出物:原型设计文档、UI设计图、数据库设计文档

缓存:缓存key的长度,尽量减短;缓存的内容,尽量减短,并使用压缩;必须设置过期时间。否则内存会有爆的一天。不能过期不能随时清除的缓存,请在后端代码里自行维护。避免在同一时间大量key过期。你可以根据业务情况,随机过期时间。注意避免缓存穿透。数据库无值时,别一直查库。请先判断是否存在此key;注意热点KEY的问题。如何发现热点KEY,提供几个方案:代码访问时封装一个统一入口、用redis提供的命令。解决方案,提供几个方案:人工拆分、主从节点key、二级缓存。 不要在循环里查缓存。这性能也挺差。
频繁请求的接口,请使用websocket进行推送。 请不要使用前端ajax轮询,请用websocket推送
Nginx单节点的QPS能达到10万左右。
使用HTTP 2.0:可以大大提升性能。

2.4)开发阶段

该阶段需要根据前面的系统设计,选择合适的编程语言和开发框架,编写系统各个组件的代码。在编程实现过程中,要注重代码的可读性、可维护性和可扩展性。同时,要遵循编码规范,确保代码的质量和稳定性。目前主流的开发方式是,前后端分离开发模式,优点效率高,易扩展。

1、前端开发

前端开发工程师负责根据原型设计图UI设计图开始编写前端代码,用代码实现设计图中的功能界面,交互,动效等等内容。

当一个页面信息元素比较多时,你可以先加载主要数据,后加载次要数据。复杂的交互,可以拆分成两步甚至多步。

2、后端开发

后端开发工程师负责根据原型设计图、UI设计图,数据库文档编写后端代码,用代码实现业务逻辑接口,如请求参数,请求方法,数据库持久化,数据返回等等内容。

复杂数据,能在代码里计算就在代码里计算。从数据库仅取出简单数据,然后用代码进行计算,别直接用sql语句去数据库里处理。
该用锁的地方要用锁。比如定时将任务丢入队列,如果队列里其中一个任务卡住了,这个时候会依然持续不断的丢入新的任务到队列里,这样会把队列撑爆。

3、前后端对接

前端和后端人员分别同时开发,互不影响,等到双方都写好功能以后,就可以进行联调了,根据后端开发编写的请求接口文档,前端开始进行代码功能对接,并在其中不断修改和优化接口代码。

产出物:系统API接口文档

2.5)测试阶段

测试是确保系统质量和稳定性的重要环节。测试包括单元测试、集成测试、系统测试等多个阶段。单元测试主要测试各个组件的功能和性能,集成测试测试各个组件之间的协作和交互,系统测试测试整个系统的功能和性能。在测试过程中,要及时发现并修复问题,确保系统的稳定性和可用性。测试工程师应按阶段设计《测试用例》,未测试通过的需要反馈给开发人员进行调整,开发人员修改代码提交测试,测试通过会在测试结果报告中打钩确认。

产出物:软件测试报告

保证每个接口在本地测试时的耗时在100ms以内。
及时性要求不高的任务,特别是耗时任务,请用队列; 减少http接口的数量。这样可以减少你的各种连接数;

2.6)软件上线

1、操作培训/指导

会给用户提供一份详尽的系统/产品操作文档,协助用户使用软件。

2、试运营
试运营中可能会存在一些问题,可以在正式上线前优化解决掉。另外在完成测试后,应该已经开始对系统进行优化。优化包括性能优化、用户体验优化等多个方面。性能优化主要关注系统的运行速度和资源消耗,通过优化算法和数据结构等方式提高系统性能。用户体验优化关注系统的易用性和美观性,通过改进界面设计、优化操作流程等方式提升用户体验。

3、正式上线
系统部署到正式环境,开始正常运行,进入日常维护阶段。

七、售后维护
为非功能性的需求提供一定的技术支持。

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

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

相关文章

【保姆级教程】Linux 基于 Docker 部署 MySQL 和 Nacos 并配置两者连接

一、Linux 部署 Docker 1.1 卸载旧版本(如有) sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine1.2 安装 yum-utils 包 sudo yum install -y…

配电室数据中心巡检3d可视化搭建的详细步骤

要搭建配电室巡检的3D可视化系统,可以按照以下步骤进行: 收集配电室数据: 首先,需要收集配电室的相关数据,包括配电室的布局、设备信息、传感器数据等。可以通过实地调查、测量和设备手册等方式获取数据。 创建3D模型…

GRIT论文阅读笔记

一篇试图统一生成任务和编码任务的工作,就是把只能完成生成任务的GPT改成既能生成又能encode。思路其实很简单,就是在输入的时候添加instruction tokens来指引模型做representation还是generation,然后各自算损失。representation任务用的是d…

JSON序列化与反序列化

目录 JSON序列化 查看JSON文件,设置数据模板类 ​编辑 Newtonsoft.Json下载 运行结果展示 JSON反序列化 序列化是将对象或数据结构转换为可以存储或传输的格式(如JSON字符串)的过程,而反序列化则是将这个格式的数据转换回原…

海豚调度监控:使用图关系网络解决核心链路告警,减轻任务运维负担!

💡 本系列文章是 DolphinScheduler 由浅入深的教程,涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。 祝开卷有益。大数据学习指南 大家好,我是小陶,之前分享了…

Centos7.9安装openldap

文章目录 一、背景二、正文2.1 openldap服务端必要软件安装2.1.1使用yum命令安装2.1.2安装libdb相关依赖2.1.3复制一个默认配置到指定目录下,并授权,这一步一定要做,然后再启动服务,不然生成密码时会报错2.1.4授权给ldap用户&…

【第13章】进阶调试思路:如何安装复杂节点IP-Adapter?(安装/复杂报错/节点详情页/精读)ComfyUI基础入门教程

🎈背景 IP-Adapter这个名字,大家可能听说过,可以让生成的结果从参考图中学习人物、画风的一致性,在目前是比较实用的一个节点,广泛的用于照片绘制、电商作图等方面。 但同时,这个节点也是比较难安装的一个节点。 所以,这节课,我们就通过一个案例,来学习如何在Comf…

电子期刊制作教程:跟着步骤轻松学会制作

随着数字时代的快速发展,电子期刊以其独特的便捷性和互动性,已经成为信息传播的重要载体。你是否也想掌握制作电子期刊的技能呢?今天,就让我来为你一步步解析电子期刊的制作过程,带你轻松学会制作属于自己的电子期刊。…

地瓜网络技术综合助手教你一键下载腾讯会议高清视频

当您错过腾讯会议的直播课程,不必担心,地瓜网络技术综合助手帮您轻松获取视频回放。 只需几个简单步骤,即可在手头保留珍贵的学习资料。 首先,启动地瓜网络技术综合助手, 进行软件初始化并开启监测功能。 接下来&…

PyTorch中实现Transformer模型

前言 对于论文给出的模型架构,使用 PyTorch 分别实现各个部分。 命名transformer.py,引入的相关库函数: import copy import torch import math from torch import nn from torch.nn.functional import log_softmax# module: 需要深拷贝的模…

DLS Markets:日本银行豪赌美债巨亏,危机是否重演?

摘要 日本第五大银行Norinchukin Bank农林中央金库宣布大规模抛售美债,以弥补因利率上升导致的巨额损失。这一决定引发市场关注,担忧是否会引发一场美债“清仓甩卖”。本文详细分析了Norinchukin的背景、抛售美债的原因及其对全球金融市场的潜在影响。 …

2024年,计算机相关专业依旧是热门选择吗?未来趋势大揭秘!

文章目录 引言一、行业竞争现状二、专业与个人的匹配度判断三、专业前景分析总结 引言 在科技日新月异的今天,计算机专业一直以其强大的实用性和广阔的就业前景吸引着无数学子的目光。然而,随着人工智能、大数据、云计算等领域的飞速发展,我…

设计软件有哪些?景观插件篇,渲染100邀请码1a12

建立大型景观也是设计师常用的设计方法,我们介绍一些景观插件。 1、AutoGrass AutoGrass是用于快速生成逼真的草地和植被场景的3ds Max插件,它提供了大量的草地预设和工具,使用户能够轻松地创建各种各样的草地效果,包括草地、草…

磁盘未格式化:深度解析、恢复策略与预防措施

一、磁盘未格式化的定义与现象 在计算机存储领域,磁盘未格式化通常指的是磁盘分区或整个磁盘的文件系统信息出现丢失或损坏的情况,导致操作系统无法正确读取和识别磁盘上的数据。当尝试访问这样的磁盘时,系统往往会弹出一个警告框&#xff0…

package.json简介

1、package.json简介 通过 npm init 初始化一个项目,会生成3个目录/文件, node_modules, package.json和 package.lock.json。其中package-lock.json文件是为了锁版本。 2、package.json常用属性 1)name name是项目的名称,命名…

Linux下手动修改服务器时间(没网环境下)

在客户服务器上更新程序时,发现服务器时间不对,现在应该是下午13:44:00,但服务器却显示为:21:40:53,所有是不对的。 date解决办法: 1、由于服务器是没有网的,只能手动设置时间,输入…

森林火灾扑救特类车辆有哪些_鼎跃安全

森林消防是在森林火灾发生时,为了保护森林资源,防止火势蔓延,采取了一系列的应用措施,针对自然环境中的火灾消防工作。森林灭火主要包括预警、预防措施、火情监测、火势控制和灭火等,森林火灾发生的地形往往复杂崎岖&a…

XMind 2024软件最新版下载及详细安装教程

​人所共知的是XMind 在公司和教育领域都有很广泛的应用,在公司中它能够用来进行会议管理、项目管理、信息管理、计划和XMind 被认为是一种新一代演示软件的模式。也就是说XMind不仅能够绘制思维导图,还能够绘制鱼骨图、二维图、树形图、逻辑图、组织结构…

Ubuntu server 24 (Linux) 安装lua + 卸载软件

1 apt 安装 # sudo apt update #查看可安装的lua版本 sudo apt-get install luaversion # sudo apt-get install lua5.3 #查看版本 testiZbp1g7fmjea77vsqc5hmmZ:/data/soft$ lua -v Lua 5.3.6 Copyright (C) 1994-2020 Lua.org, PUC-Rio2 Ubuntu卸载软件 #查找lua已安装…

fyne的VBox布局02

VBox布局02 最常用的布局是layout.BoxLayout,它有两种变体,水平和垂直。box布局将所有元素排列在单行或单列中,并带有可选的空格以帮助对齐。 一步一步实现一个如下界面布局,这个界面可以使用VBox布局来实现。 这次添加了2个复…