当前位置: 首页 > news >正文

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

一、前言

如今,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、正式上线
系统部署到正式环境,开始正常运行,进入日常维护阶段。

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

相关文章:

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

一、前言 如今,AI大爆发的时代,作为一名IT从业者,你是否也想尝试开发一套自己的系统,实现那些看似有可能实现的天马行空的想法,变成一个优秀甚至伟大的产品,甚至带来某个行业的革新,那作为一名…...

宝塔板面有哪些优势

哈喽呀,大家好呀,淼淼又来和大家见面啦,在当今数字化时代,随着云计算和互联网技术的飞速发展,服务器管理成为了许多企业和个人开发者不可或缺的一部分。然而,传统服务器管理方式的复杂性和技术门槛往往令初…...

Mybatis中BaseEntity作用

新建各种对象的时候,一般来说,有几个属性是所有对象共有的,比如说id,is_del,is_enable这些,然后设置一个基础对象,以后新建所有对象的时候都继承它,就省的每次都要写这些共有的属性了...

IDEA2023中使用run Dashboard面板?实现批量运行微服务

1、直接点击Add service--->Run Configuration Type---->Spring Boot 2、这样就出现了run Dashboard面板,可同时运行多个工程模块,shift选中所有启动类组命名(Group Configurations) 3、启动所有的项目...

分数受限,鱼和熊掌如何兼得?专业or学校,这样选最明智!

文章目录 引言一、专业解析二、名校效应分析三、好专业和好学校的权衡结论个人建议 引言 24年高考帷幕落下,一场新的思考与选择悄然来临。对于每一位高考考生,学校和专业都是开启大学新生活的两个前置必选项。但有时候“鱼与熊掌不可兼得”,…...

CentOS 8.5 - 配置ssh的免密登录

文章目录 生成ssh密钥公钥内容放入服务器 生成ssh密钥 在本地主机安装 ssh工具,并生成公钥、私钥。 # 命令行输入 ssh-keygen -r rsa# 会在当前用户的家目录下生成一个.ssh目录公钥内容放入服务器 将上一步生成的id_rsa.pub公钥的内容复制到远程服务器 # 编辑文…...

反转链表(java精简版)

反转一个单向链表。 public class ReversingLinkedList {static class Node {int val;Node next;public Node(int val) {this.val val;}public boolean hasNext() {return next ! null;}}public static void main(String[] args) {//构造Node head null;Node shift null;for…...

QPair使用详解

QPair使用详解 一、创建和初始化 QPair1.1 QPair默认构造1.2 使用值初始化1.3 QPair拷贝构造 二、访问 QPair 的值2.1 修改 QPair 的值2.2 比较 QPair2.3 使用 qMakePair 辅助函数2.4 使用 QPair 的场景 三、QPair自定结构体3.1 定义自定义结构体3.2 在 QPair 中使用自定义结构…...

C# 语言在AGI 赛道上能做什么

自从2022年11月OpenAI正式对外发布ChatGPT依赖,AGI 这条赛道上就挤满了重量级的选手,各大头部公司纷纷下场布局。原本就在机器学习、深度学习领域占据No.1的Python语言更是继续稳固了自己AI一哥的位置。凭借着Microsoft 和 OpenAI 长期以来一直是紧密相连…...

微信小程序-API 本地存储

一.本地存储-同步API 存储 : wx.setStorageSync 获取:wx.getStorageSync 删除:wx.removeStorageSync 清空:wx.clearStorageSync 代码: save(){//存储wx.setStorageSync(id, 1) wx.setStorageSync(obj, {name:"te…...

TensorFlow音频分类修复

原先传wav格式,后来发现前端生成的wav格式不完整 后端改mp3 其实是mp3和wav都可以接收 前端MP3和wav格式不正确,导致可以接收,但都无法计算时长 该文作废,可能导致音频分类不准确 修复TensorFlow放到生产后报错问题-CSDN博客 依赖 <dependency><groupId>or…...

C#学习系列之ListView垂直滚动

C#学习系列之ListView垂直滚动 前言垂直滚动总结 前言 当ListView中不断增加新内容&#xff0c;经常是纵向滚动。 垂直滚动 这个是关键&#xff1a;<VirtualizingStackPanel/> <ListView.ItemsPanel><ItemsPanelTemplate><VirtualizingStackPanel/>&…...

MySQL 常用函数总结

MySQL 提供了丰富的内置函数&#xff0c;用于在查询中进行各种计算、字符串处理、日期和时间操作等。这些函数可以帮助我们更有效地从数据库中检索和处理数据。下面将总结一些 MySQL 中常用的函数及其用法。 1. 数值函数 1.1 ROUND() ROUND() 函数用于对数值进行四舍五入操作…...

SpingBoot快速入门下

响应HttpServietResponse 介绍 将ResponseBody 加到Controller方法/类上 作用&#xff1a;将方法返回值直接响应&#xff0c;如果返回值是 实体对象/集合&#xff0c;将会自动转JSON格式响应 RestController Controller ResponseBody; 一般响应 统一响应 在实际开发中一般…...

什么是symbol?

在ES6&#xff08;ECMAScript 2015&#xff09;中&#xff0c;Symbol是一种新的基本数据类型&#xff0c;它的主要特点是独一无二且不可变。以下是关于ES6中Symbol的详细解释&#xff1a; 定义与特性&#xff1a; Symbol是ES6引入的一种基本数据类型&#xff0c;用于表示独一无…...

Tailwind CSS 响应式设计实战指南

title: Tailwind CSS 响应式设计实战指南 date: 2024/6/13 updated: 2024/6/13 author: cmdragon excerpt: 这篇文章介绍了如何运用Tailwind CSS框架创建响应式网页设计&#xff0c;涵盖博客、电商网站及企业官网的布局实例&#xff0c;包括头部导航、内容区域、侧边栏、页脚…...

如何把模糊的图片修复变清晰,怎么做?有那些方法?

模糊照片怎么修复清晰&#xff1f;有些照片可能会因为保存不当或其他原因而变得模糊&#xff0c;这些照片删掉又觉得可惜&#xff0c;那么如何让这些照片焕然一新呢&#xff1f;今天就给大家分享几种可以将这些珍贵的模糊照片修复为高清照片的方法。接下来&#xff0c;给大家演…...

思科路由器密码恢复方法

1.密码恢复原理 Cisco路由器保存了几种不同的配置参数&#xff0c;并存放在不同的内存模块中。 Cisco系列路由器的内存有&#xff1a;ROM&#xff0c;闪存&#xff08;Flashmemory&#xff09;,RAM&#xff0c;不可变RAM和动态内存&#xff08;DRAM&#xff09;等5种。 一般情况…...

HTML某联招聘

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <!-- 一些其他说明&#xff1a; 不写form的话&#xff0c;表单内容也是可以正常显示的&#xff0…...

第一百一十六节 Java 面向对象设计 - Java 终止块

Java 面向对象设计 - Java 终止块 ​try ​块也可以有零个或一个​ finally​ 块。 ​finally ​块总是与 ​try ​块一起使用。 语法 使用 ​finally​ 块的语法是 finally {// Code for finally block }​finally​ 块以关键字 ​finally​ 开始&#xff0c;后面紧跟一对…...

YOLOv10改进 | 注意力篇 | YOLOv10引入YOLO-Face提出的SEAM注意力机制优化物体遮挡检测

1. SEAM介绍 1.1 摘要:近年来,基于深度学习的人脸检测算法取得了长足的进步。 这些算法通常可以分为两类,即像 Faster R-CNN 这样的两级检测器和像 YOLO 这样的一级检测器。 由于精度和速度之间具有更好的平衡,一级探测器已广泛应用于许多应用中。 在本文中,我们提出了一…...

问题解决:Problem exceeding maximum token in azure openai (with java)

问题背景&#xff1a; Im doing a chat that returns queries based on the question you ask it in reference to a specific database. For this I use azure openai and Java in Spring Boot. 我正在开发一个聊天功能&#xff0c;该功能根据您针对特定数据库的提问返回查询…...

eNSP学习——OSPF在帧中继网络中的配置

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、在帧中继上搭建OSPF网络 主要命令 //检查帧中继的虚电路状态 display fr pvc-info//检查帧中继的映射表 display fr map-info//手工指定OSPF邻居,采用单播方式发送报文 [R1]os…...

PHP转Go系列 | 条件循环的使用姿势

大家好&#xff0c;我是码农先森。 条件 在 PHP 语言中条件控制语句&#xff0c;主要有 if、elseif、else 和 switch 语句 // if、elseif、else 语句 $word "a"; if ($word "a") {echo "a"; } elseif ($word "b") {echo "b&…...

八大经典排序算法

前言 本片博客主要讲解一下八大排序算法的思想和排序的代码 &#x1f493; 个人主页&#xff1a;普通young man-CSDN博客 ⏩ 文章专栏&#xff1a;排序_普通young man的博客-CSDN博客 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 目录 …...

【LeetCode热题 100】三数之和

leetcode原地址&#xff1a;https://leetcode.cn/problems/3sum/description 描述 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和…...

【深度学习驱动流体力学】完整配置安装 OpenFOAM 及其所需的ThirdParty与QT5工具

OpenFOAM 简介 OpenFOAM(Open Field Operation and Manipulation)是一个领先的开源计算流体动力学(CFD)软件包,由 OpenFOAM Foundation 开发和维护。作为一个高度模块化和可扩展的软件工具箱,OpenFOAM 支持模拟多种物理现象,包括流体流动、传热、混合、燃烧、声学等。由…...

YOLOv10改进 | Neck | 添加双向特征金字塔BiFPN【含二次独家创新】

&#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 专栏目录&#xff1a;《YOLOv8改进有效涨点》专栏介绍 & 专栏目录 | 目前已有40篇内容&#xff0c;内含各种Head检测头、损失函数Loss、B…...

PostgreSQL源码分析——pg_basebackup

涉及到的代码主要在src/backend/replication以及bin/pg_basebackup中。 我们知道pg_basebackup是一个进行基础备份的工具&#xff0c;除了使用这个工具&#xff0c;还可以用底层API的方式进行基础备份&#xff0c;主要过程如下&#xff1a; 连接到数据库执行select pg_start_…...

QT基础 - 常见图表绘制

目录 零. 前言 一. 添加模块 折线图 三. 树状图 四. 饼图 五. 堆叠柱状图 六. 百分比柱状图 七. 散点图和光滑曲线图 散点图 光滑曲线图 零. 前言 Qt Charts 是 Qt 框架的一个模块&#xff0c;用于创建各种类型的图表和数据可视化。它为开发者提供了一套功能强大的工…...

中学生怎么做网站/游戏优化大师官网

ssh 基础知识 参考 https://www.jianshu.com/p/33461b619d53 gitlab-runner配置实战 ssh要配置当前操作用户的 比如当前是gitlab-runner在执行&#xff0c;ssh helloabc 虽然是hello用户要登录到abc服务器&#xff0c;但是免密依然要配置的是gitlab-runner的id_rsa.pub 举个…...

wordpress 页面加载特效/济宁网站建设

Unity 之 Mac启动崩溃线程 -- UnityGfxDeviceWorker 解决方案崩溃机型崩溃日志解决方案崩溃机型 Unity打包Mac&#xff0c;在macOS Big Sur11.2.2 版本上崩溃。 崩溃日志 现象是启动就闪退&#xff0c;然后弹出“意外退出” 问题报告&#xff0c;如下图。下面两个图是两次启动…...

新手做视频网站/seo整站优化

https://www.cnblogs.com/hellogt/p/6954263.html 转载于:https://www.cnblogs.com/-llf/p/10790127.html...

万网网站建设教程/种子搜索神器网页版

问题 Vue 常用的UI框架&#xff0c;table组件在websocket通讯时&#xff0c;大量数据过来时页面数据加载不过来的情况&#xff0c;三个UI框架对比结果 ant-design-vue 和 iview比较差 element-ui 相对好点&#xff0c;但也卡顿。 下图是博主开发的读卡器SDK测试工具&#xff…...

昆明专业网站建设/热门国际新闻

Hash冲突&#xff0c;当2个不同的元素的Key通过Hash()算法得到相同的目标地址时&#xff0c;发生Hash冲突 主流的解决方法有&#xff1a; ——开放地址法 这种方法也称再散列法&#xff0c;其基本思想是&#xff1a;当关键字key的哈希地址pH&#xff08;key&#xff09;出现…...

网站翻页功能/免费私人网站建设

窗体抖动案例 首先将窗体在当前屏幕居中 其次使用for循环实现都行的次数 最后利用left,top实现窗体的抖动 private void Form2_Load(object sender, EventArgs e){this.CenterToScreen();//将窗体在当前屏幕居中}private void button1_Click(object sender, EventArgs e)//…...