软件工程综合实践第一次作业

软件工程综合实践作业

发布提示:本文档中的截图均引用自本地路径,博客园发布前请先将图片上传至博客园相册或其他图床,并替换为对应的图片链接。

这个作业属于哪个课程 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,成功后返回图片数据并在页面展示。

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.

设计思路说明

  1. 先用风格化(3D render / kawaii style)且要素明确的提示词验证模型对"场景描述 + 光照 + 风格参数"的理解能力,得到一张坐在木地板上、暖色阳光房间中的可爱生物图;
  2. 第二个提示词显式继承第一张图的环境描述(sunlit warm room、wooden floor、soft lighting),从而在同一场景下切换主体与画风,从卡通玩偶过渡到写实人像,检验模型对"环境一致性 + 写实细节"的控制能力;
  3. 人像提示词按"发色/瞳色/面部特征/表情/布光/画质"逐层细化,并叠加 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. 运行效果截图

前端交互界面

Flux 图像生成器界面2

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

提示词一生成结果

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

提示词二生成结果

后端服务运行与代码环境

VS Code 环境与 Flask 服务运行

4. 调用体验与心得

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


二、GitHub 个人主页搭建

采用"同名仓库 README 个人主页"方案:创建与 GitHub ID 同名的公共仓库,在 README 中撰写个人介绍页。

主页截图

299dd738819cad7eff31f57a17a2785d

主页内容说明

  • 仓库 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 方向"建议"补足系统设计",这个判断非常准确。

二、对我的实用价值分析(哪里"不够"或"错位")

能帮到我的地方

  1. 强迫我摆脱"笔记本脚本"思维。指南要求"贯穿项目实践",那么需求分析会逼着我去思考"输入是什么格式?异常如何处理?",这能根治"写完模型就扔"的坏习惯。
  2. 测试策略可迁移。软件工程中的单元测试和集成测试思想,完全可以迁移到模型推理验证上,帮助学会"模块化排查"。

对我不利或借鉴意义有限的地方

  1. 背景严重"偏业务系统"。指南默认项目是"选课系统、博客平台"(增删改查)。但自动驾驶是实时物理交互系统,更看重状态机设计、数据管道(Data Pipeline)编排、时间同步。如果硬套指南里的 UML 类图去画网络层,会觉得很别扭,对科研直接帮助不大。
  2. "8000 行"目标与指南脱节。8000 行在 CV 炼丹里是合适的,但在软件工程大作业里(通常是一个完整系统),8000 行可能只是后端一个模块的代码量。指南没有提醒我"工程代码量必须远超练手代码量",容易让我低估课程的劳动强度。
  3. 缺失"数据版本管理"与"实验追踪"。真正的工程痛点其实是数据集的版本管理(DVC)、训练实验的日志记录(MLflow)。传统 SE 指南不涉及这些,但这对我来说才是真正的"工程化"。

附:作业提交截图

作业提交截图

posted @ 2026-09-09 14:02  frochen  阅读(31)  评论(0)    收藏  举报