软件工程第一次团队作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13546
这个作业的目标 完成 GitHub 团队主页搭建,含成员信息贡献;生成符合团队特色的 Logo;在博客园发布含技能评估、代码量目标、AI 生成学习指南及分析的随笔,熟练用 Markdown 编写并附加编辑截图,确保所有内容按要求整合。
学号 102301403
团队主页网址 https://github.com/Hannezs/404-Team-Not-Found

公共仓库自我介绍截图

image
image
image

一、专业知识与能力自我评估

(一)已具备的专业能力​

编程语言基础能力(C 语言、C++、汇编)​

  • C 语言:掌握循环(for/while)、分支(if-else/switch)、数组、指针等核心语法;理解内存分配基础(malloc/free),能避免简单的内存使用错误。​
  • C++:熟悉面向对象基础特性,会定义类与对象、实现封装(private 成员 + public 接口)、继承(单继承场景,如 “图形类” 派生 “圆形类 / 矩形类”),能通过重载运算符(如 +、<<)简化代码操作;了解 STL 基础容器(vector、string),可用于存储和处理数据,如用 vector 实现动态数组管理。​
  • 汇编:掌握 8086 汇编基础指令(MOV、ADD、SUB、CALL、RET 等),能读懂简单的汇编代码(如实现两数相加的汇编程序),理解 “指令 - 寄存器 - 内存” 的交互逻辑,可辅助分析 C 语言代码的底层执行过程(如函数调用栈的构建与销毁)。​

计算机基础理论与应用能力​

  • 数据结构:能手动实现常用数据结构的核心操作,如链表(单链表的增删改查)、栈(顺序栈 / 链栈的 push/pop)、队列(循环队列的入队 / 出队)、二叉树(前中后序遍历、层序遍历);掌握基础排序算法(冒泡排序、快速排序、直接插入排序)和查找算法(顺序查找、二分查找),能根据数据规模选择合适算法(如小规模数据用冒泡排序,大规模有序数据用二分查找)。​
    数字逻辑与计算机组成原理:理解逻辑门(与 / 或 / 非门)、时序逻辑电路(触发器、寄存器)的工作原理;熟悉计算机硬件体系(CPU、内存、I/O 设备的交互),能解释 “指令执行周期”(取指 - 译码 - 执行 - 写回),知道内存地址的划分(如代码段、数据段、栈段的作用)。​
  • 计算机网络:掌握 OSI 七层模型(物理层 - 数据链路层 - 网络层 - 传输层 - 会话层 - 表示层 - 应用层)和 TCP/IP 四层模型的核心功能;了解常用协议的作用,如 IP 协议(路由选择)、TCP 协议(可靠传输、三次握手 / 四次挥手)、HTTP 协议(超文本传输),能通过浏览器开发者工具查看 HTTP 请求头 / 响应头,理解 “URL 请求 - 服务器响应” 的基本流程。​
  • 离散数学:掌握命题逻辑(真值表、等价演算、推理规则)、谓词逻辑(量词、谓词公式)、集合论(集合运算、关系与函数)、图论(图的基本概念、最短路径算法(Dijkstra 算法)),能运用这些理论解决简单问题,如用命题逻辑验证推理的有效性、用图论分析 “交通路线最短路径”。​
    基础工具使用能力​
  • 编程工具:熟练使用 Visual Studio、Dev-C++ 等 IDE 进行 C/C++ 代码编写、编译、调试(设置断点、查看变量值、单步执行)。

(二)感兴趣的技术方向​

底层开发相关方向(嵌入式开发、系统开发)​

  • 嵌入式开发:对 “软件控制硬件” 的交互逻辑感兴趣,希望学习嵌入式系统的开发流程(如基于 STM32 开发板的程序设计),掌握硬件驱动编写(如 LED 灯控制、按键中断处理)、嵌入式操作系统(如 FreeRTOS)的基础使用,未来能独立开发小型嵌入式设备(如简易智能家居控制模块)。​
  • 系统开发:想深入了解操作系统的核心机制(如进程管理、内存管理、文件系统),学习 Linux 系统下的 C/C++ 编程(如使用系统调用函数 fork 创建进程、socket 实现网络通信),理解 “用户态 - 内核态” 的切换逻辑,能开发简单的系统工具(如文件搜索工具、进程监控工具)。​

软件工程实践相关方向(项目设计、测试与优化)​

  • 项目规范化设计:对 “从需求到产品” 的完整流程感兴趣,希望学习需求分析方法(如用例图梳理用户需求)、概要设计(模块划分)、详细设计(类图、接口定义),摆脱 “直接写代码、忽略文档” 的习惯,能参与团队项目的设计环节,输出规范的设计文档。​
  • 代码测试与优化:想掌握软件测试的核心方法(单元测试、集成测试)和工具(如 GTest、Valgrind),学会编写测试用例验证代码正确性,通过内存检测工具发现内存泄漏、野指针等问题;同时学习代码优化技巧(如减少冗余计算、优化数据结构选择),提升程序的运行效率和稳定性。​

(三)目前缺少的能力​

1. 工程化编程与工具能力​

  • 代码规范性:缺乏统一的代码风格(如变量命名、函数注释、代码缩进),编写的代码仅能实现功能,但可读性差(如变量名用 “a/b/c” 而非 “studentScore/circleRadius”),不满足企业级项目的代码规范要求。​
  • 工程化工具使用:不会使用版本控制工具(如 Git)进行团队协作开发(如分支管理、合并代码、解决冲突);不熟悉测试工具(GTest、Valgrind)和项目管理工具(如 Jira),无法对代码进行系统测试和任务跟踪,难以应对团队项目的协作需求。​
  • 复杂场景编程:面对 “多模块交互”“异常处理” 等复杂场景时能力不足,如不会用设计模式(如工厂模式、单例模式)解耦模块依赖,异常处理仅依赖 “if-else” 而非 C++ 的 try-catch 机制,代码的可维护性和鲁棒性差。​

2. 技术深度与跨领域整合能力​

  • 底层技术深度不足:汇编仅停留在 “读懂简单代码”,不会编写复杂汇编程序(如中断服务程序);嵌入式开发未接触过实际硬件(如开发板),不会使用硬件调试工具(如 J-Link);操作系统仅了解理论,不会编写内核模块或调用系统底层接口。​
  • 跨领域技术整合:无法将多门课程的知识结合使用,如不会用 “计算机网络 + C++” 开发网络通信程序(如客户端 - 服务器聊天程序),不会用 “数据结构 + 嵌入式” 优化嵌入式程序的数据存储(如用链表管理传感器采集的数据),知识处于 “单点掌握” 状态,未形成完整的技术链。​

3. 项目实战与文档能力​

  • 实战经验匮乏:仅完成过课程要求的小型作业(如单人编写的 500 行以内程序),未参与过 “多人协作、周期较长、需求复杂” 的团队项目,缺乏 “需求拆解、任务分配、模块对接” 的实战经验,难以应对真实项目中的协作问题(如模块接口不兼容、代码冲突)。​
  • 文档撰写能力:不会编写规范的软件工程文档(如需求规格说明书、概要设计文档、测试报告),仅能撰写简单的作业报告,文档中缺少 “需求优先级划分”“模块交互图”“测试用例设计” 等核心内容,无法支撑项目的设计、开发和维护流程。

二、代码量现状与目标

(一)当前代码量​

截至目前,累计代码量约8000-90000 行(补充 C/C++ 与汇编相关代码)。其中:​

  • 课程作业代码占比约 75%:包括 C/C++ 课程的面向对象编程代码(约 2000 行,如复杂类设计、模板应用)、汇编语言程序代码(约 1000 行,如中断处理程序、简单 IO 控制代码)、数据结构与算法实现代码(约 1000 行,如 C++ 版图算法、排序算法优化);​
  • 个人小项目代码占比约 25%:包括 C 语言编写的简易嵌入式控制程序(如基于 51 单片机的 LED 控制代码,约 800 行)、C++ 实现的控制台版图书管理系统(约 1000 行);​
    代码局限:仍以单一功能模块为主,缺乏跨语言集成代码与大型项目的系统性代码,未涉及高并发、硬件交互相关的复杂代码。​

(二)本学期课程结束后目标代码量

希望累计代码量达到10000-15000 行,在原有目标基础上补充 C/C++ 与底层相关项目代码,具体如下:​

  • 完成 1 个跨语言中小型项目(如嵌入式温湿度监测系统:C 语言驱动代码 + Python 上位机界面),代码量约 6000-8000 行,涵盖硬件交互、跨语言通信、数据可视化全流程;​
    补充 C/C++ 软件工程实践代码:包括单元测试代码(如 GTest 测试用例,约 3000-4000 行)、模块化重构代码(如将原有 C++ 项目按设计模式拆分,新增约 2000-3000 行);​
  • 完成软件工程课程要求的完整项目(如校园二手交易平台后端,Java/Spring Boot 实现),代码量约 2000-3000 行。​

三、课程学习期待与目标收获

(一)、掌握跨语言项目的工程化开发流程​

  1. 在原有标准化流程学习期待基础上,希望了解跨语言项目的需求分析、模块划分方法,例如如何界定 C++ 底层模块与 Java 上层模块的职责、如何设计跨语言接口(如 REST API、RPC);
  2. 学会编写多语言项目的设计文档,明确各语言模块的交互协议与数据格式,避免跨语言开发中的沟通与集成问题。​

(二)、提升底层软件的测试与问题排查能力​

  1. 期待学习 C/C++ 项目与嵌入式软件的测试技术,如内存泄漏检测(Valgrind)、性能分析(perf 工具)、硬件接口测试方法;
  2. 掌握底层问题(如野指针、内存越界、设备驱动错误)的系统化排查思路,能通过日志分析、调试工具定位问题根源,提升解决底层软件故障的效率。​

(三)、积累跨领域项目开发经验​

  1. 希望在课程中接触后端开发与嵌入式开发结合的项目案例,了解不同技术领域的工程化差异(如后端项目的高可用设计 vs 嵌入式项目的资源受限优化);
  2. 课程结束后,能拥有 1 个跨语言 / 跨领域项目(如嵌入式 + 后端数据管理系统)放入作品集,展示多技术栈应用能力,提升就业竞争力。​

(四)、强化大型项目的架构设计与可维护性能力​

  1. 期待学习企业级 C/C++ 项目的架构设计模式(如分层架构、微服务架构在底层开发中的应用),掌握模块化设计、代码解耦的实用技巧;
  2. 学会编写规范的 C/C++ 项目文档(如接口文档、维护手册),提升代码的可复用性与可维护性,避免个人项目中 “重编码、轻设计” 的问题。

四、软件工程学习指南(豆包生成)

1.学习目标(16 周学期制)​

  • 掌握软件工程基础流程,能独立完成小型项目的需求分析与设计​
  • 提升 C/C++ 代码工程化编写能力,减少代码耦合度​
  • 学会使用 1-2 种测试工具,保障项目功能稳定性​
  • 完成 1 个小型 C/C++ 底层相关项目(如简易嵌入式控制程序),形成项目文档​

2.阶段学习内容(共 4 阶段)​

阶段一:基础理论与工具入门(第 1-4 周)​

  • 学习内容:软件工程核心流程(需求分析、概要设计、详细设计、测试、维护)、UML 基础绘图(用例图、类图)​
  • 工具学习:Visio(画设计图)、Git(版本控制)​
  • 任务:完成 1 份简单嵌入式项目(如 LED 控制)的需求分析文档,用 Git 管理文档版本​

阶段二:C/C++ 工程化编程(第 5-8 周)​

  • 学习内容:C++ 面向对象编程进阶(封装、继承、多态实战)、代码分层架构(如驱动层、业务层)、设计模式基础(单例模式、工厂模式)​
  • 任务:基于阶段一需求,编写 LED 控制项目的核心代码(约 1500 行),采用分层架构设计​

阶段三:测试与优化(第 9-12 周)​

  • 学习内容:软件测试基础(单元测试、集成测试)、测试工具使用(GTest、Valgrind 内存检测)、代码优化技巧(减少内存泄漏、提升运行效率)​
  • 任务:用 GTest 为阶段二代码编写单元测试用例(覆盖核心功能),用 Valgrind 检测并修复内存问题​

阶段四:项目整合与文档完善(第 13-16 周)​

  • 学习内容:项目部署基础(嵌入式程序烧录简易流程)、项目文档规范(含设计文档、测试报告、用户手册)​
  • 任务:完成 LED 控制项目的烧录与功能验证,整理完整项目文档(含代码、测试报告、设计图),形成个人项目作品集

3.对这份学习指南的评价

1)合理性分析​

从我的情况来看,这份指南整体合理,但存在部分可调整之处。​

  • 在目标设定上,它贴合我 “语言实力中等、想补底层开发相关能力” 的需求。比如 “掌握软件工程基础流程”“完成小型 C/C++ 底层项目”,既没有像复杂指南那样设定过高目标(如直接开发大型跨语言项目),也没有停留在纯理论学习,能让我在现有基础上稳步提升,避免因目标不切实际产生挫败感。​
    内容设计上,覆盖了我当前需要的核心能力。阶段一的需求分析、Git 工具学习,能帮我摆脱 “重编码、轻设计” 的习惯 —— 之前我写代码常忽略文档,这份指南从一开始就强调文档编写,正好能弥补我的短板;阶段二的 C++ 工程化编程、分层架构,针对我 “代码耦合度高” 的问题,能引导我写出更规范的代码;阶段三的测试工具学习,也是我之前没接触过的实用技能,对后续项目稳定性很重要。不过内容也有局限,比如嵌入式部分只涉及 LED 控制,对 “硬件交互能力” 的提升不够深入,若想往嵌入式方向发展,可能需要补充更多硬件驱动相关内容。​
  • 执行节奏上,16 周分 4 个阶段,每个阶段 4 周,任务量相对均衡。比如阶段二用 4 周编写 1500 行代码,每周约 375 行,对我来说难度适中,不会像之前看到的某些指南那样,某阶段任务过于密集导致无法完成。但阶段四包含项目烧录、文档完善等多个任务,若期末有课程考试,可能需要提前 1-2 周启动,避免时间紧张。​

2)帮助分析​

这份指南对我的帮助主要集中在 “打基础、养习惯、积素材” 三个方面,同时也有需要主动补充的地方。​

  • 直接帮助上,它能针对性解决我的薄弱点。一是帮我建立工程化思维,之前我写代码只关注功能实现,忽略需求分析和设计,指南里从阶段一就要求写需求文档,能让我学会从 “项目整体” 角度思考,而不是单纯堆砌代码;二是提升 C++ 代码规范性,阶段二的分层架构、设计模式学习,能改善我 “代码混乱、耦合度高” 的问题,比如之前写 C++ 程序时,常把驱动代码和业务代码混在一起,分层架构的学习能帮我理清代码结构;三是掌握实用工具,Git、GTest 这些工具是企业开发常用的,现在学会了,后续做项目或实习时能更快上手。​
  • 间接帮助上,它为我的就业和作品集积累提供了支撑。指南最后要求完成完整项目文档和作品集,正好能解决我 “缺乏底层相关项目素材” 的问题 —— 这份 LED 控制项目虽小,但包含了从设计到测试的完整流程,放入作品集能直观展示我的工程化能力,对申请嵌入式或 C++ 开发相关岗位有帮助。而且指南聚焦 C/C++ 和底层方向,和我感兴趣的 “嵌入式开发、C++ 后端开发” 岗位需求匹配,能帮我在大三明确学习重点,避免盲目刷题或学无关技术。​
  • 不过,指南也有潜在局限需要我主动适配。比如硬件资源方面,嵌入式项目需要开发板,若学校实验室没有,我得自己购买低成本的 STM32 开发板(如 STM32F103C8T6),否则阶段二和阶段四的实践会受影响;另外,指南对 “跨语言集成能力” 的覆盖不足,而我之前想补全 C++ 与其他语言的交互能力,所以在学习指南的同时,我可能需要每周抽 2-3 小时,额外学习 Socket 通信基础,补充跨语言开发相关知识。​

4、总结​

整体来说,这份简单的软件工程学习指南对我是 “合理且有实用价值” 的。它符合我当前的基础和发展需求,能帮我补全工程化思维、代码规范性等核心短板,还能积累项目作品集。虽然存在 “硬件依赖、跨语言内容不足” 的小问题,但通过自己购买设备、额外补充学习就能解决。后续我会按照这份指南推进学习,同时根据课程安排灵活调整节奏,比如期末前提前启动阶段四任务,避免和考试冲突。​

Mackdown编辑界面截图

image
image
image
image
image

posted @ 2025-10-01 23:32  苏欣欣  阅读(23)  评论(0)    收藏  举报