软件工程第一次作业

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

第一部分————Github

个人主页

image

个人博客

image

由于本人已经不在使用Github Pages当作个人博客,原有部署的也被替换(存档在分支,可以点击此处预览)
因此图中的博客位于ch0n9k41.cn(使用Github Action部署,文章在side_blog仓库)

第二部分————huggingface-API

这个API免费额度极少,所以并没有怎么尝试提示词,写了一个脚本来实现
项目结构:
image
其中config.yaml是配置文件,内置默认提示词(主要是负面的提示词)
用的官方库对接,因此核心的语句只有:

  1. 设置鉴权Key
    image
  2. 调用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
  1. 最后成品
    image

由于实际生图的时候已经没了额度,所以这里图中运行最后是报错的,提示词也是瞎写的

生成图:

hf_image_20260909_144848_random_a_red_panda_bd82d07b_1
hf_image_20260909_145209_random_鹿鹿鱼鱼_eb6c8c98_1
第二张的提示词其实是"鹿鹿鱼鱼",不知道为啥生成了个这东西。
4. 总结
普普通通的生图,还没开始就已经结束(免费额度有点少了,谁vivo50来氪金

第三部分————AI学习指南

零、其他要求的内容(这个不是AI写的)

  1. 目前不会的有很多,但问题在于从来没接触过实际工作中会用到的东西,和实际有点脱节。技能树等见github主页。
  2. 截至目前的代码量很少,希望能多练练实际项目。
  3. 期待学习k8s,jenkins等的使用
  4. 收获不知道

一、课程目标

掌握软件工程的基本概念、开发流程和常用方法,能够运用工程化思想分析、设计和实现中小型软件系统,并理解团队协作与项目管理。

二、核心学习内容

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幻觉的话)。

省流:这份指南整体合理,作为学习路线图大体是合格的,能够帮助自己建立知识框架、规划学习进度、明确实践方向。

posted @ 2026-09-06 18:50  丛雨绫刀  阅读(36)  评论(0)    收藏  举报