第一次作业
这个作业属于哪个课程 | 软件工程 |
---|---|
这个作业要求在哪里 | 第一次作业 |
这个作业的目标 | 1、Github团队主页搭建 2、团队Logo文生图任务 3、在博客园发一篇随笔总结作业并且讲述自己的情况 |
学号 | 102301305 |
团队主页网址
自我介绍
能力评估
我的技能树目前具有鲜明的系统底层导向,建立在坚实的计算机科学基础之上。
能力:
一、扎实的系统级编程能力
· 语言工具: 熟练掌握 C语言 和 C++,深刻理解指针、内存管理、编译链接过程等核心概念。熟悉 x86汇编语言,能够理解高级代码如何映射到机器指令,具备初步的逆向分析和性能洞察能力。
· 核心优势: 这使得我能够编写高性能、低开销的代码,并对程序的底层行为有清晰的认知。
二、坚实的计算机系统理论基础
· 计算机组成原理: 了解CPU的工作原理、存储器层次结构、指令执行流程,建立了“软件如何驱动硬件”的宏观概念。
· 操作系统知识:对计算机组成原理、汇编、C语言、操作系统的学习。
· 数据结构与算法: 了解经典数据结构和算法,并能够使用C/C++高效实现,理解不同数据结构对时间和空间复杂度的影响。
· 计算机网络: 了解TCP/IP协议栈、Socket编程基础,知道数据如何在网络中传输。
感兴趣的技术方向:系统软件开发、软硬件协同与安全。
目前缺乏的关键能力:大型项目工程化与实践能力的缺失、对现代软件架构与开发范式的陌生。
代码量
3000,期待达到6000
课程期待
掌握工具链: 熟练使用 Git, CMake, GTest 等。
建立工程思维: 掌握 UML、设计模式、测试方法。
获得团队经验: 体验完整的、规范的团队开发流程。
产出代表作: 完成一个结构清晰、文档齐全、经过测试、由版本控制管理的C/C++系统项目。
工具
deepseek deepseek
核心价值:帮助拓宽视野、连接知识点、并提供即时可操作的实践指导,这是DeepSeek最直接、最重要的帮助。DeepSeek能直接给予工业级的代码模板和最佳实践,跳过漫无目的的搜索,快速弥补工具链和经验上的不足。尽管DeepSeek很强大,但必须清醒地认识到它的局限:知识可能过时或存在细微偏差、缺乏真正的系统直觉。
工具指南
第一阶段:项目奠基与协作起航(第1-4周)
· 第1-2周:过程模型与需求分析
· 理论: 学习软件生命周期、瀑布模型、敏捷开发。讨论为何你们选择的项目适合敏捷迭代。
· 实践:
1. 组建团队,确定项目。
2. 撰写《软件需求规格说明书》: 描述项目功能、性能指标(如QPS)、接口等。学会区分功能性需求与非功能性需求。
3. 建立协作基础设施: 在GitHub/GitLab上创建仓库,学习并实践Git分支策略。
· 第3-4周:软件设计入门与建模
· 理论: 学习软件架构、模块化设计、接口设计。重点学习UML(用例图、类图、时序图)。
· 实践:
1. 绘制系统架构图: 描述项目有哪些核心模块及其关系。
2. 绘制核心模块的UML类图和时序图: 在编码前完成设计。
3. 搭建项目骨架: 使用CMake创建标准的项目结构,实现“Hello World”级别的编译和运行。
第二阶段:系统实现与质量保障(第5-10周)
· 第5-7周:核心开发与设计模式
· 理论: 学习编码规范、代码重构。学习常用的设计模式(如单例、工厂、观察者、策略模式)。
· 实践:
1. 制定团队的C++编码规范。
2. 开始核心模块的编码。 在代码中有意识地应用1-2种设计模式,并在文档中说明。
3. 持续集成: 配置GitHub Actions,实现代码提交后的自动编译。
· 第8-10周:软件测试
· 理论: 学习测试级别(单元、集成、系统)、测试方法(黑盒/白盒)。
· 实践:
1. 引入Google Test框架。
2. 为核心模块(如数据结构、业务逻辑)编写单元测试,并追求一定的测试覆盖率。
3. 进行集成测试,确保模块间协调工作。
第三阶段:进阶主题与项目交付(第11-16周)
· 第11-13周:系统深化与性能
· 理论: 学习性能工程、并发编程、系统调试。
· 实践:
1. 性能剖析: 使用 perf 或 gprof 对项目进行性能分析,找到一个瓶颈并优化。
2. 调试实践: 使用 GDB 调试一个复杂的程序错误(如死锁、核心转储)。
3. 项目迭代: 基于测试和性能分析,进行代码重构和优化。
· 第14-16周:配置管理、文档与总结
· 理论: 学习软件配置管理、DevOps基础、软件文档。
· 实践:
1. 完善项目文档: 撰写《用户手册》和《开发者手册》。
2. 项目演示与复盘: 准备最终演示,并总结项目中的经验教训(哪些做得好,哪些是坑)。
3. 最终交付: 提交一份完整、规范、可运行的软件项目。
评价:这份指南指明了一条清晰的路径,将你分散的底层知识串联起来,并考虑到“团队协作”、“项目管理”、“质量保证”。但是学习量偏大。