用一个实例项目,带你走一遍软件开发全流程!

image

 

我是 Stephen,一个自学 Java 入行的程序员,IT 行业 10+ 年的经历,今天给想要学习软件开发的朋友梳理一下软件开发全流程。

很多想学编程的朋友,最缺的不是资源,而是实战经验。

今天我就用一个真实的项目——「高考数据查询系统http://122.51.51.126:5104/」,从需求分析到上线部署,手把手带你走一遍软件开发全流程。

不管你是零基础小白,还是想系统了解软件开发流程的同学,这篇文章都能帮到你。


一、需求分析——搞清楚"要做什么"

1.1 发现问题

在做这个系统之前,我先问了几个问题:

问题1:现在的痛点是什么?

  • 高考分数出来后,考生查录取数据很不方便
  • 要一个学校一个学校去官网找
  • 数据分散、格式不统一、不好对比

问题2:目标用户是谁?

  • 高考考生和家长
  • 志愿填报指导老师
  • 教育相关从业者

问题3:需要哪些功能?

  • 查一分一段:知道自己的分数排名
  • 查院校录取线:找目标院校
  • 查专业录取线:选专业
  • 查招生计划:看今年招多少人

1.2 产出文档

需求分析的结果要写成文档,方便后面的人看。

# 高考数据查询系统需求文档## 一、项目背景[描述项目解决的问题]## 二、功能需求1. 一分一段查询2. 院校录取查询3. 专业录取查询4. 招生计划查询## 三、非功能需求查询速度要快(1秒)- 界面要简洁(手机电脑都能用)- 数据要准确(实时更新)## 四、数据来源- 考试院公布的Excel数据

小贴士: 需求文档不用写得太复杂,关键是讲清楚"做什么",而不是"怎么做"。


二、概要设计——画出系统蓝图

2.1 技术选型

根据需求,我们选择这些技术:

层次技术选择理由
前端 HTML + CSS + JS 轻量级,不需要构建工具
后端 Python + Flask 简单易学,开发效率高
数据库 MySQL 免费、稳定、中文资料多

2.2 系统架构图

                    ┌─────────────┐                    │   用户浏览器  │                    └──────┬──────┘                           │ HTTP请求                           ▼                    ┌─────────────┐                    │   Flask服务  │                    │   (后端)    │                    └──────┬──────┘                           │ SQL查询                           ▼                    ┌─────────────┐                    │   MySQL数据库 │                    │   (数据层)   │                    └─────────────┘

三层架构

  • 表现层:用户看到的网页
  • 业务层:处理逻辑的后台代码
  • 数据层:存储数据的地方

2.3 数据库设计

根据需求分析,我们设计4张核心表:

┌─────────────────────┐│   一分一段表         ││   fact_yfyfd_segment │├─────────────────────┤│ - id (主键)         ││ - 省份代码          ││ - 年份              ││ - 科类(理科/文科)  ││ - 分数              ││ - 本段人数          ││ - 累计人数          │└─────────────────────┘┌──────────────────────────┐│   专业录取分数线表         ││   fact_major_admission_line│├──────────────────────────┤│ - id (主键)              ││ - 省份代码               ││ - 年份                   ││ - 院校名称               ││ - 专业名称               ││ - 最低分                 ││ - 录取人数               │└──────────────────────────┘

为什么这样设计?

  • 每张表对应一个业务场景
  • 字段名用中文,方便理解
  • 添加索引,加快查询速度

三、详细设计——把方案细化

3.1 页面设计

先画出页面的草图(可以用纸笔或工具):

┌────────────────────────────────┐│  高考数据查询系统              │├────────────────────────────────┤│ [一分一段] [院校录取] [专业录取]││ [招生计划]                     │├────────────────────────────────┤│  年份:[2025 ▼]               ││  科类:[理科 ▼]               ││  分数:[____]                  ││              [查询]            │├────────────────────────────────┤│  分数   │ 本段人数 │ 累计人数  ││  650    │   120    │   500    ││  649    │   115    │   620    ││  648    │   118    │   738    │└────────────────────────────────┘

3.2 接口设计

前端和后端通过"接口"通信,我们先定义好接口格式:

接口1:查询一分一段

请求:GET /query/yfyfd?year=2025&kelei=物理类&score=620响应:{  "code": 0,  "data": [    {"分数": 620, "本段人数": 150, "累计人数": 5200},    {"分数": 619, "本段人数": 145, "累计人数": 5350}  ],  "total": 100}

接口2:查询院校录取线

请求:GET /query/univ?year=2024&keyword=清华响应:{  "code": 0,  "data": [    {"院校": "清华大学", "最低分": 685, "最低位次": 100},    {"院校": "清华大学深圳...", "最低分": 672, "最低位次": 200}  ]}

3.3 函数设计

后端的核心函数:

def build_where(kind, year, keyword, **filters):    """构建SQL查询条件"""    passdef query_data(kind, params):    """执行查询,返回结果"""    passdef format_response(data, total):    """格式化返回数据"""    pass

设计原则

  • 函数名要见名知意
  • 一个函数只做一件事
  • 参数不要太长(超过3个用字典)

四、编码实现——动手写代码

4.1 项目结构

gaokao_web/├── app.py              # Flask主程序├── templates/          # HTML模板│   ├── base.html       # 基础模板│   ├── index.html      # 首页│   └── query.html      # 查询页├── static/             # 静态文件│   └── style.css       # 样式文件├── config.py           # 配置文件└── requirements.txt   # 依赖列表

4.2 代码示例

后端代码(app.py)

from flask import Flask, render_template, requestimport pymysqlapp = Flask(__name__)@app.route('/')def index():    return render_template('index.html')@app.route('/query/<kind>')def query(kind):    # 获取查询参数    year = request.args.get('year')    keyword = request.args.get('q')        # 构建SQL    sql = f"SELECT * FROM {kind}_table WHERE year = %s"    params = [year]        if keyword:        sql += " AND name LIKE %s"        params.append(f'%{keyword}%')        # 执行查询    conn = pymysql.connect(...)    with conn.cursor() as cursor:        cursor.execute(sql, params)        results = cursor.fetchall()        return {'data': results}

前端代码(query.html)

<form method="get">    <select name="year">        <option value="2025">2025</option>        <option value="2024">2024</option>    </select>    <input name="q" placeholder="输入关键词">    <button type="submit">查询</button></form><table>    {% for row in data %}    <tr>        <td>{{ row.学校名称 }}</td>        <td>{{ row.最低分 }}</td>    </tr>    {% endfor %}</table>

4.3 编码规范

好代码 vs 坏代码

❌ 坏代码:

def a(b,c):    s="select * from t where y="+b+" and n like '%"+c+"%'"    r=db.query(s)    return r

✅ 好代码:

def query_by_year_and_name(year: int, name: str) -> list:    """根据年份和名称查询数据"""    sql = "SELECT * FROM table WHERE year = %s AND name LIKE %s"    params = (year, f'%{name}%')    return db.execute(sql, params)

规范要点

  • 变量名要清晰
  • 要写注释
  • 要格式化代码
  • 要做异常处理

五、测试——确保代码没问题

5.1 测试类型

测试类型说明例子
单元测试 测试单个函数 query函数返回正确结果
集成测试 测试多个模块配合 前端+后端+数据库
手工测试 人点点点 在浏览器测试所有功能

5.2 测试用例示例

def test_build_where():    """测试查询条件构建"""    sql, params = build_where(        kind='univ',        year=2024,        keyword='清华'    )        assert 'year = %s' in sql    assert 'name LIKE %s' in sql    assert params == [2024, '%清华%']

5.3 手工测试清单

□ 首页能正常打开□ 一分一段查询正常□ 院校录取查询正常□ 专业录取查询正常□ 招生计划查询正常□ 分页功能正常□ 排序功能正常□ 手机端显示正常

六、部署上线——让用户能访问

6.1 购买服务器

推荐云服务商:

  • 阿里云(国内用户多)
  • 腾讯云(性价比高)
  • 华为云(稳定性好)

配置选择:

  • CPU:2核够用
  • 内存:2G够用
  • 带宽:1-5Mbps
  • 系统:Ubuntu 或 CentOS

6.2 安装环境

登录服务器后,执行:

# 安装Pythonapt updateapt install python3 python3-pip# 安装MySQLapt install mysql-server# 安装Nginxapt install nginx

6.3 部署代码

# 1. 上传代码到服务器scp -r ./gaokao_web root@服务器IP:/var/www/# 2. 安装Python依赖pip3 install -r requirements.txt# 3. 配置MySQLmysql -u root -p < init.sql# 4. 启动服务python3 app.py &

6.4 配置Nginx反向代理

server {    listen 80;    server_name gaokao.example.com;    location / {        proxy_pass http://127.0.0.1:5000;    }}

6.5 域名和SSL

  1. 购买域名
  2. 解析到服务器IP
  3. 申请SSL证书(免费的Let's Encrypt)
  4. 配置HTTPS

七、总结

软件开发全流程就是这么几步:

需求分析 → 概要设计 → 详细设计 → 编码 → 测试 → 部署    ↑                                              ↓    ←←←←←←←←←←←← 维护更新 ←←←←←←←←←←←←←←←←←←←←

关键点

  • 需求分析要搞清楚"做什么"
  • 设计要把方案想清楚
  • 编码要规范、要测试
  • 部署要考虑安全和稳定

 

你做过什么项目?走到哪一步就卡住了?

是在需求分析阶段不知道怎么下手,还是在编码阶段遇到bug解决不了?

欢迎在评论区聊聊你的经历~

posted @ 2026-06-13 09:45  Stephen_java  阅读(1)  评论(0)    收藏  举报