软件工程综合实践第一次作业
软件工程综合实践作业
发布提示:本文档中的截图均引用自本地路径,博客园发布前请先将图片上传至博客园相册或其他图床,并替换为对应的图片链接。
| 这个作业属于哪个课程 | H202601软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 软件工程个人作业(第一次) |
| 这个作业的目标 | 完成 HuggingFace API 调用与交互式图像生成、搭建 GitHub 个人主页、撰写博客园随笔,梳理个人技能树并借助 AI 工具反思学习路径 |
| 学号 | 102401323 |
一、HuggingFace API 调用实践
1. 实现方案概述
- 注册 Hugging Face 账号并获取 API Token;
- 调用图像生成模型
XLabs-AI/flux-RealismLora,根据英文提示词生成贴近真实世界的图像; - 使用 Python Flask 搭建本地后端服务,暴露
POST /api/generate接口转发模型请求; - 编写前端页面实现交互式生成:输入提示词、点击按钮、展示生成结果、错误提示。
整体架构为"本地 Flask 服务 + 浏览器前端":前端将用户输入的提示词以 JSON 形式 POST 到后端接口,后端携带 API Token 调用 Hugging Face Inference API,成功后返回图片数据并在页面展示。

2. 提示词设计
提示词一(场景与卡通角色验证)
A cute creature with big eyes and red cheeks sitting on a wooden floor in a sunlit cozy room, warm colors, 3D render, depth of field, kawaii style.
提示词二(同场景下的写实人像)
Based on the first prompt's environment (sunlit warm room, wooden floor, soft lighting), generate a highly realistic close-up portrait of a young woman. She has wavy brown hair, captivating blue-green eyes, natural freckles on her nose and cheeks, slightly parted lips showing white teeth. Soft side lighting, cinematic portrait photography, ultra-detailed, 8K resolution, realistic skin texture and pores, bokeh background.
设计思路说明
- 先用风格化(3D render / kawaii style)且要素明确的提示词验证模型对"场景描述 + 光照 + 风格参数"的理解能力,得到一张坐在木地板上、暖色阳光房间中的可爱生物图;
- 第二个提示词显式继承第一张图的环境描述(sunlit warm room、wooden floor、soft lighting),从而在同一场景下切换主体与画风,从卡通玩偶过渡到写实人像,检验模型对"环境一致性 + 写实细节"的控制能力;
- 人像提示词按"发色/瞳色/面部特征/表情/布光/画质"逐层细化,并叠加 cinematic photography、8K、skin texture and pores 等词提升真实感。
修改过程:
V1 骨架:页面只有输入框+按钮+图片容器,无任何 CSS,朴素白底(截图1 即 VS Code 中运行的样子),目标是打通"输入提示词→调用接口→展示图片"最小闭环
V2 修 404:后端只有 /api/generate,没给根路径返回页面,补根路由后页面可访问
V3 修接口失败:前端请求 URL 与推理端点不一致,改回 /api/generate 后链路真实打通
V4 修 500:外网请求遇 SSL 网络中断,配置代理后出图稳定
V5 渲染美化:功能稳定后才升级视觉——深色渐变背景、居中毛玻璃卡片、渐变按钮、加载动画、四种结果状态、响应式布局(截图2),核心接口逻辑不变
3. 运行效果截图
前端交互界面

生成结果一(对应提示词一:生物画像)

生成结果二(对应提示词二:写实人像)

后端服务运行与代码环境

4. 调用体验与心得
提示词的信息量直接决定可控性。想让模型"画出你脑中的图",就要把关键特征逐项写清楚;描述越含糊,模型越容易自行补全甚至跑偏。"上下文复用"能保持场景一致。第二张图显式继承第一张的环境描述,让不同主体、不同画风的两张图处于同一场景,比重新描述一遍环境更可靠。质量词与风格词是写实度的开关。cinematic、8K、skin texture 等词的加入对 realism 风格强度影响显著,说明模型对摄影/画质术语理解较好。粗略与详细提示词各有用途:探索阶段用粗略词快速发散,定稿阶段用详细词锁定细节,二者结合效率最高。
二、GitHub 个人主页搭建
采用"同名仓库 README 个人主页"方案:创建与 GitHub ID 同名的公共仓库,在 README 中撰写个人介绍页。
主页截图

主页内容说明
- 仓库 ID:
Cgg0024(个人资料同名仓库,公共可见); - 自我介绍:福州大学计算机专业本科生,研究方向关注 AI Agent和智能驾驶;
- 后续将按作业要求继续补充:个人成果与技能、项目/竞赛/实践经历、自我评估(已掌握能力、感兴趣方向、希望学习内容)、未来三年发展规划(考研/保研/就业方向及理由)等内容,持续丰富主页。
三、博客园随笔
随笔一:软件工程课程个人技能树与技术偏好自评
作为一名计科大三学生,经过前两年的课程学习与项目实践,我已初步构建起自己的技术能力图谱,并对未来发展方向有了相对清晰的认知。现将自我评估梳理如下,以便教师与助教了解我的起点与诉求。
一、已具备的专业知识与能力
- 编程语言基础:系统学习过 C 和 C++,掌握面向对象编程、内存管理与基础数据结构实现,能独立完成规模适中的控制台程序;熟悉 Python 语法生态,熟练使用 NumPy、Pandas 等数据分析库。
- 深度学习框架:日常以 PyTorch 为主要工具,可独立搭建、训练和调优卷积神经网络(CNN),熟练使用 torchvision 进行数据增强,掌握迁移学习、学习率调度、模型保存与加载等常规操作。
- 计算机视觉方向:在图像分类、目标检测和语义分割任务上有较深实践,参与过若干课内竞赛和小型科研项目,能够阅读并复现主流论文(如 ResNet、YOLO 系列)的核心代码。
- 数据库基础:掌握 SQL 语言,熟悉 MySQL 的基本增删改查、多表连接与事务隔离级别,可完成简单的数据库设计。
二、感兴趣的技术方向
- 目前最聚焦的方向是自动驾驶感知与决策,尤其关注多传感器融合(摄像头 + 激光雷达)和端到端驾驶模型。课余会跟踪 CVPR、ICCV 相关论文,并尝试在 Carla 仿真平台上进行简单实验。
- 同时对模型轻量化与部署(如 TensorRT、ONNX)也有浓厚兴趣,认为这是打通学术研究与工业落地的关键环节。
三、当前欠缺的能力
- 工程化代码写作能力:虽能写出可运行的模型脚本,但代码结构松散、缺乏模块化设计,很少编写单元测试和文档注释,对 Git 协作流程不熟练,导致项目可维护性差。
- 系统设计与需求分析能力:缺乏从用户视角拆解功能模块、绘制架构图的训练,面对复杂业务逻辑时往往直接"堆代码",而非先设计后编码。
- 性能调优与调试能力:遇到显存溢出或训练不收敛时,排查手段有限,缺乏系统性 profiling 经验。
四、代码量现状与目标
截至本学期,我累计完成的可用代码(含课程作业、竞赛脚本和自用小工具)约 5000 行。经过本课程的系统训练——涵盖需求分析、模块划分、迭代开发与测试维护——我希望将代码量提升至 8000 行以上,且更注重每一行代码的质量而非单纯数量。
五、对本课程的期待
我最期待学习软件工程全流程实践,尤其是敏捷开发模式下的需求变更管理、UML 建模与设计模式的实际应用。希望从"个人炼丹"的思维转向团队协作的工程思维,学会撰写规范的需求文档、设计文档和测试用例,掌握代码审查与版本控制的最佳实践。最终收获不仅是能写出可运行的软件,更是能够交付一个结构清晰、可扩展、易维护的完整项目,为日后从事自动驾驶系统研发打下坚实的工程基石。
以上即为我当前的技术画像与成长诉求,我将以开放心态投入课程,也恳请教师和助教多予指正。
随笔二:AI 工具生成学习指南分析
我选择DeepSeek生成一份"软件工程课程学习指南",先将其核心建议整理如下:
一、课程定位
本课程立足软件系统整体,讲授分析、设计、测试及维护的理论方法,培养从“会写代码”到“能系统性开发高质量软件”的工程化思维。
二、核心内容
软件过程(瀑布、敏捷等模型)
需求获取与用例建模
面向对象分析与UML(类图、时序图等)
软件设计、体系结构与设计模式
测试策略与质量保证
项目管理与软件维护
三、学习方法
实践驱动:以一个贯穿项目(如选课系统)同步实践各阶段知识,避免空谈理论。
重视文档:认真撰写需求、设计、测试等文档,养成工程化规范习惯。
善用工具:主动学习Git、项目管理平台(如Jira)及代码审查工具,适应团队协作。
先宏观后细节:用思维导图梳理知识模块间的逻辑关系,建立整体框架后再深入细节。
四、学习目标
掌握软件工程基本概念与开发流程
能运用UML进行系统分析与设计
能按规范完成需求、设计及测试文档
理解项目管理与团队协作要点
具备从编码者向软件工程师转变的系统思维
五、对不同背景同学的建议
算法/AI方向:重点补足需求分析、系统设计和测试方法,弥补工程短板。
后端/全栈方向:侧重架构设计与项目管理,贴近实际工作场景。
零基础起步:紧跟课程节奏,认真完成每次实践,重在理解方法与流程。
以下是结合自身情况对这份指南的分析。
一、合理性分析(哪里"对"了)
- 框架正确:指南中的瀑布/敏捷模型、UML、测试、文档规范,是任何大型软件项目(包括自动驾驶系统)都必须遵循的基本法。
- 痛点匹配:它强调"重视文档"和"善用 Git",这恰好击中了我"代码结构松散、缺乏协作流程"的软肋,方向是对的。
- 分类建议中肯:给"算法/AI 方向"建议"补足系统设计",这个判断非常准确。
二、对我的实用价值分析(哪里"不够"或"错位")
能帮到我的地方:
- 强迫我摆脱"笔记本脚本"思维。指南要求"贯穿项目实践",那么需求分析会逼着我去思考"输入是什么格式?异常如何处理?",这能根治"写完模型就扔"的坏习惯。
- 测试策略可迁移。软件工程中的单元测试和集成测试思想,完全可以迁移到模型推理验证上,帮助学会"模块化排查"。
对我不利或借鉴意义有限的地方:
- 背景严重"偏业务系统"。指南默认项目是"选课系统、博客平台"(增删改查)。但自动驾驶是实时物理交互系统,更看重状态机设计、数据管道(Data Pipeline)编排、时间同步。如果硬套指南里的 UML 类图去画网络层,会觉得很别扭,对科研直接帮助不大。
- "8000 行"目标与指南脱节。8000 行在 CV 炼丹里是合适的,但在软件工程大作业里(通常是一个完整系统),8000 行可能只是后端一个模块的代码量。指南没有提醒我"工程代码量必须远超练手代码量",容易让我低估课程的劳动强度。
- 缺失"数据版本管理"与"实验追踪"。真正的工程痛点其实是数据集的版本管理(DVC)、训练实验的日志记录(MLflow)。传统 SE 指南不涉及这些,但这对我来说才是真正的"工程化"。
附:作业提交截图

浙公网安备 33010602011771号