软件工程课程第一次团队作业

这个作业属于哪个课程 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

成员资料截图

image

团队LOGO

image

自我评估

一、目前已经具备的专业知识和能力

  1. C/C++ 基础编程能力:掌握 C 语言指针、数组、结构体,能实现链表的增删改查操作;能用 C++ 编写一些算法题(如DFS、BFS、线段树、动态规划)

  2. Python 基础应用能力:掌握 Python 语法(循环、函数、类),能编写简单数据处理脚本(如用 pandas 读取 Excel 表格数据,计算课程平均分与及格率;在全国大学生数学建模比赛中使用Python进行数据的处理和分析)

  3. Java 基础开发能力:能用 Java 完成基础控制台程序(如学生成绩管理系统,实现增删改查与成绩排序)

  4. 如图所示:

ce27d62b61bdf2ce2f7eb414882b87a3

二、对哪类技术方向有兴趣

  • 前后端
  • 微信小程序

三、觉得自己还缺少的能力

  • 啥都缺...

目前的代码量&结课之后希望达到的代码量

目前emmm,好像没多少,cpp算法题300+

本学期这门课完成后,希望增加5000行以上吧

最期待在课程中能够学习到的知识与收获

  • 从“只会写一些.cpp文件的算法题” 到 “了解完整的开发过程”。过去写的各种大模拟算法只是问题的高度抽象与提炼,而实际的软件开发需要涉及多个模块。期待学习到一个软件从 “用户有需求” 到 “最终能用”,每个阶段要产出什么,怎么把软件的一个功能拆成小模块实现,模块之间怎么对接才不会乱。

  • 学习团队协作,更好的分工与配合。

  • 收获能落地的项目经验:拥有一个 “拿得出手的小项目”;解决实际问题的思维;积累关于开发过程的细节与坑点的经验。

软件工程课程学习指南(by Doubao)

一、学习目标

(一)知识目标

  1. 理解软件工程的基本概念、原则和价值,明确软件工程与传统编程的区别与联系。

  2. 掌握软件生命周期各阶段(需求分析、设计、编码、测试、维护)的核心任务、方法和工具。

  3. 熟悉常见的软件开发模型(如瀑布模型、敏捷模型、原型模型)的适用场景、优缺点及实施流程。

  4. 了解软件质量保证、项目管理(进度、成本、人员)、软件文档规范等相关知识。

(二)能力目标

  1. 能够运用需求分析方法(如用例图、访谈法)梳理和明确软件项目的功能与非功能需求。

  2. 具备进行软件概要设计和详细设计的能力,包括模块划分、接口设计、数据库设计等,并能使用 UML 等工具绘制设计图。

  3. 能够结合编码规范,运用至少一种编程语言实现设计方案,同时掌握版本控制工具(如 Git)的基本使用。

  4. 掌握软件测试的基本方法(黑盒测试、白盒测试、回归测试等),能设计测试用例并执行测试,定位和协助修复软件缺陷。

  5. 具备参与小型软件开发项目的能力,能够在团队中分工协作,遵循项目流程完成相关任务,并撰写规范的软件文档。

二、核心知识体系

(一)基础概念篇

  1. 软件工程定义、发展历程及重要性

  2. 软件的分类(按功能:系统软件、应用软件、支撑软件;按规模:小型、中型、大型、超大型)

  3. 软件危机的表现、成因及解决思路

  4. 软件工程三要素:方法、工具、过程

(二)软件开发模型篇

  1. 瀑布模型:线性阶段划分,适用于需求明确、稳定的项目,重点掌握各阶段交付物(如需求规格说明书、设计文档)。

  2. 敏捷模型(Scrum、Kanban):迭代式开发,强调快速响应变化,掌握 Sprint 周期、每日站会、产品待办列表(Product Backlog)等核心实践。

  3. 原型模型:快速构建原型验证需求,适用于需求模糊的项目,了解原型的分类(抛弃型、演化型)。

  4. 其他模型(增量模型、螺旋模型):对比各模型的适用场景,能根据项目特点选择合适的开发模型。

(三)软件生命周期各阶段篇

  1. 需求分析阶段
  • 核心任务:确定用户需求(功能需求、非功能需求如性能、安全性、易用性),形成需求规格说明书。

  • 常用方法:用户访谈、问卷调查、现场观察、用例分析(绘制用例图)。

  • 工具:Visio、StarUML(绘制用例图)、Axure(需求原型设计)。

  1. 软件设计阶段
  • 概要设计:划分软件模块,确定模块间的接口和依赖关系,设计软件架构(如分层架构、微服务架构)。

  • 详细设计:设计模块内部的算法、数据结构,明确类的属性和方法,绘制类图、时序图等。

  • 设计原则:高内聚、低耦合,单一职责原则、开闭原则等面向对象设计原则。

  • 工具:StarUML、PowerDesigner(数据库设计)、DrawIO。

  1. 编码阶段
  • 编码规范:命名规范、注释规范、代码格式规范(如 Java 的 Google 编码规范、Python 的 PEP8)。

  • 编程语言与技术栈:结合课程要求选择(如 Java+Spring Boot、Python+Django、C#+.NET)。

  • 版本控制:Git 基本操作(提交、分支、合并、冲突解决),平台使用(GitHub、GitLab)。

  1. 软件测试阶段
  • 测试类型:单元测试(测试单个模块,工具如 JUnit、pytest)、集成测试(测试模块间交互)、系统测试(测试整个系统功能与非功能)、验收测试(用户参与验证需求)。

  • 测试方法:黑盒测试(等价类划分、边界值分析)、白盒测试(语句覆盖、判定覆盖)。

  • 缺陷管理:缺陷的生命周期(发现、提交、指派、修复、验证、关闭),工具如 JIRA、Bugzilla。

  1. 软件维护阶段
  • 维护类型:改正性维护(修复缺陷)、适应性维护(适应环境变化)、完善性维护(新增功能)、预防性维护(预防潜在问题)。

  • 维护流程:维护申请、分析评估、制定方案、执行维护、测试验证、文档更新。

(四)辅助知识篇

  1. 软件文档:需求规格说明书、设计文档、测试报告、用户手册等的撰写规范。

  2. 软件质量:质量属性(正确性、可靠性、可维护性、易用性),质量保证方法(评审、审计)。

  3. 项目管理:范围管理、时间管理(甘特图)、成本管理、人员管理(团队角色)。

三、推荐学习资源

(一)教材

  1. 《软件工程:实践者的研究方法》(Roger S. Pressman 著):经典教材,涵盖软件工程全领域知识,适合深入理解理论。

  2. 《构建之法:现代软件工程》(邹欣 著):结合国内软件开发实践,案例丰富,语言通俗,适合入门。

  3. 《敏捷软件开发:原则、模式与实践》(Robert C. Martin 著):深入讲解敏捷开发思想与实践,适合重点学习敏捷模型时参考。

(二)在线课程

  1. Coursera《Software Engineering》(University of Alberta):系统讲解软件工程基础,包含案例分析和作业实践。

  2. 慕课网《软件工程实战:从需求到部署》:以实际项目为驱动,演示从需求分析到上线的完整流程,侧重实践。

  3. B 站《软件工程导论》(哈尔滨工业大学):国内高校优质课程,贴合课程教学大纲,适合打基础。

(三)工具

  1. 建模工具:StarUML(UML 图绘制)、Axure(需求原型)、PowerDesigner(数据库设计)。

  2. 版本控制:Git + GitHub/GitLab。

  3. 测试工具:JUnit(Java 单元测试)、pytest(Python 单元测试)、Postman(接口测试)、Selenium(自动化测试)。

  4. 项目管理与缺陷跟踪:JIRA、Trello(轻量项目管理)。

(四)社区与文档

  1. Stack Overflow:解决软件开发中遇到的技术问题。

  2. 软件工程网(www.se.org.cn):获取行业动态、技术文章和标准文档。

  3. 各工具官方文档(如 Git、JUnit、JIRA):学习工具使用的权威资料。

四、高效学习方法

(一)理论与实践结合

  1. 每学习一个阶段的理论(如需求分析),立即通过小型案例练习(如设计一个简单的图书管理系统的需求用例图)巩固。

  2. 课程中后期参与或组队完成一个完整的小型项目(如个人博客系统、学生成绩管理系统),覆盖需求、设计、编码、测试全流程,将理论知识应用到实际开发中。

(二)多维度输入与输出

  1. 输入:除教材外,定期阅读软件工程相关博客(如 InfoQ、ThoughtWorks)、观看技术讲座,了解行业最新实践(如 DevOps、低代码开发)。

  2. 输出:撰写学习笔记(梳理知识点逻辑)、项目文档(按规范撰写需求说明书、测试报告),尝试在技术社区分享自己的项目经验或问题解决思路。

(三)小组协作学习

  1. 与同学组成 3-5 人的学习小组,模拟软件开发团队,分工完成项目(如一人负责需求分析,一人负责设计,一人负责编码与测试)。

  2. 定期开展小组讨论,分享学习难点(如设计阶段的模块划分问题)、交流项目进度,互相评审代码和文档,提升团队协作能力。

(四)错题与问题积累

  1. 建立学习错题本,记录测试方法、开发模型等易混淆知识点的对比(如瀑布模型与敏捷模型的区别),以及项目中遇到的典型问题(如 Git 冲突解决、测试用例设计不全面)及解决方案。

  2. 定期回顾错题本,避免重复踩坑,同时总结同类问题的解决规律。

五、常见问题与解决思路

(一)理论理解困难,难以区分相似概念(如 “瀑布模型” 与 “增量模型”)

  • 解决思路:绘制对比表格,从 “阶段划分方式”“需求稳定性要求”“交付物特点”“适用项目” 等维度梳理差异;结合具体案例(如开发一款成熟的办公软件用瀑布模型,开发一款需快速迭代的手机 APP 用增量模型)加深理解。

(二)实践中不知如何开展项目,缺乏整体规划

  • 解决思路:从模仿开始,参考成熟的项目模板(如 GitHub 上的开源小型项目),学习其需求文档、设计方案的结构;将项目拆解为小任务(如 “第一周完成需求分析并输出用例图”“第二周完成数据库设计”),逐步推进。

(三)编码能力不足,影响项目进度

  • 解决思路:优先巩固编程语言基础(如针对 Java,复习集合、异常处理等核心知识点);在项目开发中,优先实现核心功能,复杂功能可参考开源代码或寻求同学帮助;利用课余时间通过 LeetCode、牛客网等平台练习编码,提升代码效率和质量。

(四)忽视文档撰写,导致项目后期维护困难

  • 解决思路:明确各阶段文档的核心作用(如需求规格说明书是后续设计和测试的依据),在项目计划中预留文档撰写时间;参考行业规范模板(如 IEEE 标准的需求文档模板),确保文档内容完整、逻辑清晰;定期对文档进行评审和更新,保证文档与项目实际进度一致。

后台博文编辑页面的截图

image

posted @ 2025-10-05 20:19  byxxx  阅读(17)  评论(0)    收藏  举报