软件工程第一次作业
| 这个作业属于哪个课程 | 2026软件工程与软件工程实践 |
|---|---|
| 这个作业要求在哪里 | 第一次作业 |
| 这个作业的目标 | 学习使用Github,huggingface-API的调用,以及使用AI生成软件工程课程学习指南,并评价 |
| 学号 | 102401509 |
第一部分————Github
个人主页
个人博客

由于本人已经不在使用Github Pages当作个人博客,原有部署的也被替换(存档在分支,可以点击此处预览)
因此图中的博客位于ch0n9k41.cn(使用Github Action部署,文章在side_blog仓库)
第二部分————huggingface-API
这个API免费额度极少,所以并没有怎么尝试提示词,写了一个脚本来实现
项目结构:

其中config.yaml是配置文件,内置默认提示词(主要是负面的提示词)
用的官方库对接,因此核心的语句只有:
- 设置鉴权Key
![image]()
- 调用API
#省流:client.text_to_image(prompt=prompt, model=model_id, **kwargs)
def generate_via_api(
client: InferenceClient,
model_id: str,
config: Dict[str, Any],
prompt: str,
negative_prompt: Optional[str],
num_images: int,
seed: Optional[int],
cli_overrides: Dict[str, Any],
) -> list[Path]:
gen = config.get("generation") or {}
base_kwargs = {
"negative_prompt": negative_prompt,
"width": gen.get("width"),
"height": gen.get("height"),
"num_inference_steps": gen.get("num_inference_steps"),
"guidance_scale": gen.get("guidance_scale"),
}
for key in ("width", "height", "num_inference_steps", "guidance_scale"):
if key in cli_overrides and cli_overrides[key] is not None:
base_kwargs[key] = cli_overrides[key]
base_kwargs = {k: v for k, v in base_kwargs.items() if v is not None}
logger.debug("API 后端:待生成图片数量=%s,基础参数=%s", num_images, base_kwargs)
paths: list[Path] = []
for i in range(num_images):
kwargs = dict(base_kwargs)
current_seed = None
if seed is not None:
current_seed = seed + i
kwargs["seed"] = current_seed
logger.debug("API 后端:开始第 %s/%s 次调用,model=%s,参数=%s", i + 1, num_images, model_id, kwargs)
start = time.perf_counter()
image = client.text_to_image(prompt=prompt, model=model_id, **kwargs)
elapsed = time.perf_counter() - start
logger.debug("API 后端:第 %s/%s 次调用返回,类型=%s,耗时=%.2fs", i + 1, num_images, type(image).__name__, elapsed)
path = make_filename(config, prompt, i, current_seed)
image.save(path)
logger.debug("API 后端:图片已写入 %s", path)
paths.append(path)
print(f"[{i + 1}/{num_images}] 已保存:{path}")
logger.debug("API 后端:全部请求完成,共生成 %s 张图片", len(paths))
return paths
- 最后成品
![image]()
由于实际生图的时候已经没了额度,所以这里图中运行最后是报错的,提示词也是瞎写的
生成图:


第二张的提示词其实是"鹿鹿鱼鱼",不知道为啥生成了个这东西。
4. 总结
普普通通的生图,还没开始就已经结束(免费额度有点少了,谁vivo50来氪金)
第三部分————AI学习指南
零、其他要求的内容(这个不是AI写的)
- 目前不会的有很多,但问题在于从来没接触过实际工作中会用到的东西,和实际有点脱节。技能树等见github主页。
- 截至目前的代码量很少,希望能多练练实际项目。
- 期待学习k8s,jenkins等的使用
- 收获不知道
一、课程目标
掌握软件工程的基本概念、开发流程和常用方法,能够运用工程化思想分析、设计和实现中小型软件系统,并理解团队协作与项目管理。
二、核心学习内容
1. 软件工程概述
软件、软件工程的定义;软件危机的表现与原因
软件过程模型:瀑布模型、增量模型、迭代模型、敏捷开发、螺旋模型
理解各种模型的优缺点及适用场景
2. 可行性研究与需求分析
可行性分析:技术、经济、法律、操作可行性
需求获取方法:访谈、问卷、观察、原型法
结构化需求分析:数据流图、数据字典、状态转换图
面向对象需求分析:用例图、用例描述、需求规格说明书
3. 软件设计
总体设计:模块划分、层次结构、接口设计
详细设计:流程图、N-S图、PAD图、伪代码
面向对象设计:类图、时序图、设计原则(单一职责、开闭原则、依赖倒置等)
设计模式初步:工厂模式、单例模式、观察者模式等
4. 软件实现与编码
编程语言选择与编码规范
代码风格、注释、可读性
结对编程、代码走查
5. 软件测试
测试基础:测试目的、测试原则、测试与调试的区别
测试层次:单元测试、集成测试、系统测试、验收测试
测试方法:黑盒测试(等价类划分、边界值分析)、白盒测试(逻辑覆盖)
回归测试、测试用例设计
6. 软件维护与演化
维护类型:纠正性、适应性、完善性、预防性维护
软件演化规律、遗留系统处理
逆向工程与再工程
7. 项目管理
项目计划、进度管理(甘特图、关键路径法)
成本估算(COCOMO模型等)
风险管理、质量管理、配置管理
团队组织与沟通
8. 工具与实践
版本控制:Git
UML建模工具:StarUML、PlantUML等
项目管理工具:GitHub Projects、Trello等
测试框架:JUnit、pytest等
三、学习方法建议
- 建立知识框架:先浏览教材目录,画出整门课的知识地图。
- 理论与案例结合:每个阶段配合一个小项目贯穿始终,如"图书管理系统"或"网上商城"。
- 多画图:UML图、数据流图、流程图必须动手画,不能只看。
- 动手实践:组队完成一次完整的开发流程,从需求到测试。
- 阅读经典:如《人月神话》《代码整洁之道》《设计模式》等。
- 做好总结:每章结束后用自己的语言整理笔记和思维导图。
四、学习计划参考(共12周)
周次 内容 实践任务
1 软件工程概述、过程模型 选择课程项目,分析适用模型
2 需求获取与分析 编写需求规格说明书
3 结构化分析建模 绘制数据流图
4 面向对象分析 绘制用例图
5 总体设计 绘制系统结构图
6 详细设计与UML 绘制类图、时序图
7 编码规范与实现 项目编码
8 软件测试 设计测试用例并执行
9 项目管理 制定项目计划
10 维护与演化 分析维护场景
11 复习与项目完善 整理文档
12 期末复习 真题练习、查漏补缺
五、推荐资源
- 教材:张海藩《软件工程导论》、Roger Pressman《软件工程:实践者的研究方法》
- 视频:中国大学MOOC、B站软件工程课程
- 工具:Git、Visio/StarUML、JUnit、Postman
对这份指南的分析
一、是否合理
结论:总体合理,逻辑清晰,覆盖面较全。
- 指南按照软件工程课程的经典主线("概述→需求→设计→实现→测试→维护→管理")展开,符合认知规律和软件生命周期顺序。
- 理论与实践结合:软件工程是实践性很强的课程,需要多做。
- 或许很前沿:UML工具、测试框架等可能并不常见的东西(至少目前闻所未闻)
但也存在一些不足(AI自己写的,本人没什么可说的):
-
内容偏重传统结构,敏捷开发、DevOps等新内容偏少。当前软件行业大量采用敏捷、持续集成/持续部署(CI/CD)、微服务等,指南中虽有提及但不够深入,需要根据教师授课重点补充。
-
个性化不足。不同学校的软件工程课程侧重点不同,有的偏理论考试,有的偏项目实践,这份指南是一个通用版本,实际使用时需要结合自己的教学大纲和考核方式调整。
-
缺少具体考核应对策略。指南没有涉及考试题型、重点概念背诵、计算题(如关键路径、COCOMO、测试用例覆盖)的专项训练,而这些往往是课程成绩的关键。
-
难度层次不够明显。对于初学者来说,设计模式、面向对象设计等部分可能需要更多前置知识,指南没有标注重点和难点。
二、能否对自己带来帮助
应该能带来较大帮助,主要体现在以下方面:
-
提供清晰的学习路线图:对于刚开始接触的人来说,最怕的就是不知道从哪学起、哪些是重点。这个指南可以用于充当大纲。
-
帮助合理安排时间:12周计划可以直接参考或微调,虽然不一定合理。
-
强调动手实践:反复提到"小项目贯穿始终""多画图""动手实践",这能帮助自己把抽象概念转化为实际能力,也符合软件工程课程的要求。
-
提供资源清单:教材、视频、工具推荐可以节省自己搜索筛选的时间,把精力集中在学习本身(如果不是AI幻觉的话)。
省流:这份指南整体合理,作为学习路线图大体是合格的,能够帮助自己建立知识框架、规划学习进度、明确实践方向。




浙公网安备 33010602011771号