软件工程课程第一次团队作业
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/homework/13546 |
这个作业的目标 | 一、基础工具准备(GitHub 、博客园) 二、掌握基础的 Git 操作、AI 工具的使用、Markdown 文档的编写 三、协作搭建 Github 团队主页 |
学号 | 102301642 |
Github团队主页搭建
团队主页网址
https://github.com/b-yx/EchoLogic
成员资料截图
团队LOGO
自我评估
一、目前已经具备的专业知识和能力
-
C/C++ 基础编程能力:掌握 C 语言指针、数组、结构体,能实现链表的增删改查操作;能用 C++ 编写一些算法题(如DFS、BFS、线段树、动态规划)
-
Python 基础应用能力:掌握 Python 语法(循环、函数、类),能编写简单数据处理脚本(如用 pandas 读取 Excel 表格数据,计算课程平均分与及格率;在全国大学生数学建模比赛中使用Python进行数据的处理和分析)
-
Java 基础开发能力:能用 Java 完成基础控制台程序(如学生成绩管理系统,实现增删改查与成绩排序)
-
如图所示:
二、对哪类技术方向有兴趣
- 前后端
- 微信小程序
三、觉得自己还缺少的能力
- 啥都缺...
目前的代码量&结课之后希望达到的代码量
目前emmm,好像没多少,cpp算法题300+
本学期这门课完成后,希望增加5000行以上吧
最期待在课程中能够学习到的知识与收获
-
从“只会写一些.cpp文件的算法题” 到 “了解完整的开发过程”。过去写的各种大模拟算法只是问题的高度抽象与提炼,而实际的软件开发需要涉及多个模块。期待学习到一个软件从 “用户有需求” 到 “最终能用”,每个阶段要产出什么,怎么把软件的一个功能拆成小模块实现,模块之间怎么对接才不会乱。
-
学习团队协作,更好的分工与配合。
-
收获能落地的项目经验:拥有一个 “拿得出手的小项目”;解决实际问题的思维;积累关于开发过程的细节与坑点的经验。
软件工程课程学习指南(by Doubao)
一、学习目标
(一)知识目标
-
理解软件工程的基本概念、原则和价值,明确软件工程与传统编程的区别与联系。
-
掌握软件生命周期各阶段(需求分析、设计、编码、测试、维护)的核心任务、方法和工具。
-
熟悉常见的软件开发模型(如瀑布模型、敏捷模型、原型模型)的适用场景、优缺点及实施流程。
-
了解软件质量保证、项目管理(进度、成本、人员)、软件文档规范等相关知识。
(二)能力目标
-
能够运用需求分析方法(如用例图、访谈法)梳理和明确软件项目的功能与非功能需求。
-
具备进行软件概要设计和详细设计的能力,包括模块划分、接口设计、数据库设计等,并能使用 UML 等工具绘制设计图。
-
能够结合编码规范,运用至少一种编程语言实现设计方案,同时掌握版本控制工具(如 Git)的基本使用。
-
掌握软件测试的基本方法(黑盒测试、白盒测试、回归测试等),能设计测试用例并执行测试,定位和协助修复软件缺陷。
-
具备参与小型软件开发项目的能力,能够在团队中分工协作,遵循项目流程完成相关任务,并撰写规范的软件文档。
二、核心知识体系
(一)基础概念篇
-
软件工程定义、发展历程及重要性
-
软件的分类(按功能:系统软件、应用软件、支撑软件;按规模:小型、中型、大型、超大型)
-
软件危机的表现、成因及解决思路
-
软件工程三要素:方法、工具、过程
(二)软件开发模型篇
-
瀑布模型:线性阶段划分,适用于需求明确、稳定的项目,重点掌握各阶段交付物(如需求规格说明书、设计文档)。
-
敏捷模型(Scrum、Kanban):迭代式开发,强调快速响应变化,掌握 Sprint 周期、每日站会、产品待办列表(Product Backlog)等核心实践。
-
原型模型:快速构建原型验证需求,适用于需求模糊的项目,了解原型的分类(抛弃型、演化型)。
-
其他模型(增量模型、螺旋模型):对比各模型的适用场景,能根据项目特点选择合适的开发模型。
(三)软件生命周期各阶段篇
- 需求分析阶段
-
核心任务:确定用户需求(功能需求、非功能需求如性能、安全性、易用性),形成需求规格说明书。
-
常用方法:用户访谈、问卷调查、现场观察、用例分析(绘制用例图)。
-
工具:Visio、StarUML(绘制用例图)、Axure(需求原型设计)。
- 软件设计阶段
-
概要设计:划分软件模块,确定模块间的接口和依赖关系,设计软件架构(如分层架构、微服务架构)。
-
详细设计:设计模块内部的算法、数据结构,明确类的属性和方法,绘制类图、时序图等。
-
设计原则:高内聚、低耦合,单一职责原则、开闭原则等面向对象设计原则。
-
工具:StarUML、PowerDesigner(数据库设计)、DrawIO。
- 编码阶段
-
编码规范:命名规范、注释规范、代码格式规范(如 Java 的 Google 编码规范、Python 的 PEP8)。
-
编程语言与技术栈:结合课程要求选择(如 Java+Spring Boot、Python+Django、C#+.NET)。
-
版本控制:Git 基本操作(提交、分支、合并、冲突解决),平台使用(GitHub、GitLab)。
- 软件测试阶段
-
测试类型:单元测试(测试单个模块,工具如 JUnit、pytest)、集成测试(测试模块间交互)、系统测试(测试整个系统功能与非功能)、验收测试(用户参与验证需求)。
-
测试方法:黑盒测试(等价类划分、边界值分析)、白盒测试(语句覆盖、判定覆盖)。
-
缺陷管理:缺陷的生命周期(发现、提交、指派、修复、验证、关闭),工具如 JIRA、Bugzilla。
- 软件维护阶段
-
维护类型:改正性维护(修复缺陷)、适应性维护(适应环境变化)、完善性维护(新增功能)、预防性维护(预防潜在问题)。
-
维护流程:维护申请、分析评估、制定方案、执行维护、测试验证、文档更新。
(四)辅助知识篇
-
软件文档:需求规格说明书、设计文档、测试报告、用户手册等的撰写规范。
-
软件质量:质量属性(正确性、可靠性、可维护性、易用性),质量保证方法(评审、审计)。
-
项目管理:范围管理、时间管理(甘特图)、成本管理、人员管理(团队角色)。
三、推荐学习资源
(一)教材
-
《软件工程:实践者的研究方法》(Roger S. Pressman 著):经典教材,涵盖软件工程全领域知识,适合深入理解理论。
-
《构建之法:现代软件工程》(邹欣 著):结合国内软件开发实践,案例丰富,语言通俗,适合入门。
-
《敏捷软件开发:原则、模式与实践》(Robert C. Martin 著):深入讲解敏捷开发思想与实践,适合重点学习敏捷模型时参考。
(二)在线课程
-
Coursera《Software Engineering》(University of Alberta):系统讲解软件工程基础,包含案例分析和作业实践。
-
慕课网《软件工程实战:从需求到部署》:以实际项目为驱动,演示从需求分析到上线的完整流程,侧重实践。
-
B 站《软件工程导论》(哈尔滨工业大学):国内高校优质课程,贴合课程教学大纲,适合打基础。
(三)工具
-
建模工具:StarUML(UML 图绘制)、Axure(需求原型)、PowerDesigner(数据库设计)。
-
版本控制:Git + GitHub/GitLab。
-
测试工具:JUnit(Java 单元测试)、pytest(Python 单元测试)、Postman(接口测试)、Selenium(自动化测试)。
-
项目管理与缺陷跟踪:JIRA、Trello(轻量项目管理)。
(四)社区与文档
-
Stack Overflow:解决软件开发中遇到的技术问题。
-
软件工程网(www.se.org.cn):获取行业动态、技术文章和标准文档。
-
各工具官方文档(如 Git、JUnit、JIRA):学习工具使用的权威资料。
四、高效学习方法
(一)理论与实践结合
-
每学习一个阶段的理论(如需求分析),立即通过小型案例练习(如设计一个简单的图书管理系统的需求用例图)巩固。
-
课程中后期参与或组队完成一个完整的小型项目(如个人博客系统、学生成绩管理系统),覆盖需求、设计、编码、测试全流程,将理论知识应用到实际开发中。
(二)多维度输入与输出
-
输入:除教材外,定期阅读软件工程相关博客(如 InfoQ、ThoughtWorks)、观看技术讲座,了解行业最新实践(如 DevOps、低代码开发)。
-
输出:撰写学习笔记(梳理知识点逻辑)、项目文档(按规范撰写需求说明书、测试报告),尝试在技术社区分享自己的项目经验或问题解决思路。
(三)小组协作学习
-
与同学组成 3-5 人的学习小组,模拟软件开发团队,分工完成项目(如一人负责需求分析,一人负责设计,一人负责编码与测试)。
-
定期开展小组讨论,分享学习难点(如设计阶段的模块划分问题)、交流项目进度,互相评审代码和文档,提升团队协作能力。
(四)错题与问题积累
-
建立学习错题本,记录测试方法、开发模型等易混淆知识点的对比(如瀑布模型与敏捷模型的区别),以及项目中遇到的典型问题(如 Git 冲突解决、测试用例设计不全面)及解决方案。
-
定期回顾错题本,避免重复踩坑,同时总结同类问题的解决规律。
五、常见问题与解决思路
(一)理论理解困难,难以区分相似概念(如 “瀑布模型” 与 “增量模型”)
- 解决思路:绘制对比表格,从 “阶段划分方式”“需求稳定性要求”“交付物特点”“适用项目” 等维度梳理差异;结合具体案例(如开发一款成熟的办公软件用瀑布模型,开发一款需快速迭代的手机 APP 用增量模型)加深理解。
(二)实践中不知如何开展项目,缺乏整体规划
- 解决思路:从模仿开始,参考成熟的项目模板(如 GitHub 上的开源小型项目),学习其需求文档、设计方案的结构;将项目拆解为小任务(如 “第一周完成需求分析并输出用例图”“第二周完成数据库设计”),逐步推进。
(三)编码能力不足,影响项目进度
- 解决思路:优先巩固编程语言基础(如针对 Java,复习集合、异常处理等核心知识点);在项目开发中,优先实现核心功能,复杂功能可参考开源代码或寻求同学帮助;利用课余时间通过 LeetCode、牛客网等平台练习编码,提升代码效率和质量。
(四)忽视文档撰写,导致项目后期维护困难
- 解决思路:明确各阶段文档的核心作用(如需求规格说明书是后续设计和测试的依据),在项目计划中预留文档撰写时间;参考行业规范模板(如 IEEE 标准的需求文档模板),确保文档内容完整、逻辑清晰;定期对文档进行评审和更新,保证文档与项目实际进度一致。