今人不见古时月,今月曾经照古|

DriOgon

园龄:1年7个月粉丝:6关注:11

先天软工实体队——beta冲刺

一、alpha冲刺完成后情况概述

在完成α冲刺后,我们组只是简单实现了项目的框架和基本功能,还需进一步优化和完善。

1.存在问题

1.1.AI功能实现不足🤖

现有的 AI 模块只提供了最基础的聊天功能,还没有引入举一反三、问题解析等更切合实际的功能

1.2.历年卷预览待开发🫣

历年卷的预览功能尚在开发中,需要更多的工作来完善。

1.3.页面跳转与前端设计需要完善🖌️

用户界面的设计和页面跳转功能仍需进一步优化,以提升用户体验。

1.4.需求变更管理👨🏻‍💼

在项目后期,需求变更仍然存在,需要建立更严格的需求冻结期和变更管理流程,以避免频繁的需求调整影响项目进度。

1.5.团队成员的持续激励🏅

需要进一步完善激励机制,确保团队成员保持高昂的工作积极性和良好的工作状态。

1.6.时间与精力的平衡🧑‍💻

近期团队成员在项目之于有大量的考试和作业,无法在项目中投入大量精力,需要找到更好的工作与学习平衡。

2.探索思路与解决过程

2.1 AI

我们使用了智谱AI大模型,在原有的类ChatGPT交互的功能基础下,尝试增加了右键功能的脚本,但这一脚本很难适配到我们的网站,于是我们考虑去使用固定小窗口AI辅助的功能。这一功能仍在实现中,组员正在紧密开发。

2.2 预览

我们的预览、下载都与福币有关,具体思路是:用户可以免费预览前两页的历年卷,其余剩下的历年卷需要消耗福币来解锁预览全部历年卷和下载历年卷功能。因此我们的预览模块是有别于浏览器自带的pdf预览功能。这就需要我们独立实现新的预览功能开发,这是我们正在做的。

2.3 学习参考

团队成员积极比对现有成熟网站,对照自身常识认知以及邀请用户体验,进一步完善页面跳转和前端设计,使审美更符合大众,以及方便用户实际的使用。

2.4 需求变更管理

在beta开发中,我们小组有别于alpha的人员安排。alpha开发时是每两个同学负责一个模块,包括前后端的所有开发。但是在alpha开发结束后,我们发现了这一分工的不合理之处,组长需要负责汇总每一模块的开发,这会拖延各个模块的开发,也让组长的工作量和压力很大。于是在beta开发之初,我们改用了另一种人员安排,即将小组分为两个子小组,设两个子小组的组长,子小组成员的工作只需要汇报给子组长,子组长汇总完毕后再汇报给组长,这样就减轻了大家的工作量。

2.5 奶茶诱惑 🧋

组长为每位组员都买了奶茶,起到了良好的顺毛和激励作用。

2.6 每日固定时段集中编程

为了提高团队编程效率也为了减轻团队队员压力,在β冲刺阶段,我们团队每天都在19:00~23:00线下集中编程,在其余时间段队员可以合理安排其它课业,达到了互惠互利,既提高效率又促进交流。

二、特色功能

2.1最”全“的FZU资源平台💪

集齐全校各门类专业课历年卷,各课程课本pdf等资料。帮助你不必再去互助群找黑心二道贩子,寻学长学姐撇下脸皮面子,降低你我备考的信息差,降低复习”白费功夫“的可能性。

2.2智能AI辅助规划复习计划功能🍵

输入你的考试时间,基础情况(或通过AI试卷测试),目标分数等。AI一键帮你指定复习计划,并根据你的复习进度实时调整,使你复习无忧。

2.3"福币"系统🪙

通过用户观看我们所投放的广告,获取福币,用户兑换历年卷,小礼品等材料的同时也可以助力”卷卷福“小平台进一步维护,完善,升级自己。

上传历年卷,经管理员审核后通过即获得100福币。


商城兑换礼品功能,以及购买成功、余额不足逻辑


商城搜索功能

2.4智能AI问答🤖

复习过程难免遇上难啃的知识点,不会做的题。历年卷难题鼠标”右键“一键解答,并附带举一反三的题目,知识点定位,详解。

2.5社区榜单🏆

“卷卷榜”排序拥有资源数最多的用户,和”福币榜“名列福币拥有数的排名。激起用户门的打榜兴趣,保持用户活跃度。

2.6社区求助留言

三、关键模块单元测试

因为我们用的php语言,故我们采用composer安装phpunit进行单元自动测试
给出资源中心的测试代码示例,其他关键模块用类似逻辑进行单元测试,得到报告

<?php

use PHPUnit\Framework\TestCase;

class UploadTest extends TestCase
{
    private $conn;

    protected function setUp(): void
    {
        // 创建一个假数据库连接,用于测试
        $this->conn = new mysqli('localhost', 'root', '', 'test_db');

        // 确保数据库连接成功
        if ($this->conn->connect_error) {
            $this->fail('数据库连接失败: ' . $this->conn->connect_error);
        }
    }

    protected function tearDown(): void
    {
        // 清理数据库连接
        $this->conn->close();
    }

    public function testFileUpload()
    {
        // 模拟上传文件数据
        $_FILES['file'] = [
            'name' => 'testfile.pdf',
            'tmp_name' => '/tmp/php/upload_testfile.pdf',
            'type' => 'application/pdf',
            'error' => 0,
            'size' => 12345
        ];

        $_POST['major'] = '计算机科学与技术';

        // 执行上传逻辑
        $upload_dir = 'uploads/';
        $file_name = $_FILES['file']['name'];
        $upload_file = $upload_dir . $file_name;

        // 模拟 move_uploaded_file 成功
        $this->assertTrue(move_uploaded_file($_FILES['file']['tmp_name'], $upload_file));

        // 模拟数据库插入
        $stmt = $this->conn->prepare("INSERT INTO files (filename, filepath, category) VALUES (?, ?, ?)");
        $stmt->bind_param("sss", $file_name, $upload_file, $_POST['major']);
        $result = $stmt->execute();

        // 验证插入是否成功
        $this->assertTrue($result);

        // 清理上传的文件
        unlink($upload_file);
    }

    public function testSearchFunction()
    {
        // 模拟搜索查询
        $_POST['search'] = 'testfile';

        // 执行搜索逻辑
        $search_query = $_POST['search'];
        $stmt = $this->conn->prepare("SELECT filename, filepath FROM files WHERE filename LIKE ?");
        $search_term = "%" . $search_query . "%";
        $stmt->bind_param('s', $search_term);
        $stmt->execute();

        // 检查搜索结果
        $result = $stmt->get_result();
        $this->assertNotEmpty($result->fetch_all(MYSQLI_ASSOC));
    }

    public function testInvalidFileType()
    {
        // 模拟不允许的文件类型
        $_FILES['file'] = [
            'name' => 'testfile.exe',
            'tmp_name' => '/tmp/php/upload_testfile.exe',
            'type' => 'application/x-msdownload',
            'error' => 0,
            'size' => 12345
        ];

        // 执行上传逻辑
        $allowed_types = [
            'image/jpeg',
            'image/png',
            'application/pdf',
            'application/zip',
            'application/msword',
            'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
            'application/vnd.ms-powerpoint',
            'application/vnd.openxmlformats-officedocument.presentationml.presentation',
            'text/plain'
        ];

        // 验证文件类型不在允许的范围内
        $this->assertFalse(in_array($_FILES['file']['type'], $allowed_types));

        // 验证上传失败
        $upload_file = 'uploads/' . $_FILES['file']['name'];
        $this->assertFalse(move_uploaded_file($_FILES['file']['tmp_name'], $upload_file));
    }
}

生成代码覆盖率报告

四、团队协作记录及beta冲刺感受

4.1团队协作记录


4.1.1 commit 记录

4.1.2语雀团队协作记录(简单放两张...


4.2团队成员beta冲刺感受

学号 姓名 个人体会
102201312 陈言泷 作为我们小组的组长,由于beta开发的第一周大家有许多事情,比较忙,开发的部分停滞不前。因此我们决定于第二周开始每天晚上20点~22点,让大家在活动室集中开发两到三小时,以加快项目进度。事实证明,这样的方式是非常有利于我们项目的推进,大家在这次的beta冲刺开发中都注入了自己的心血,经常会晚上十一点多后还留在活动室开发。让我感动的是大家对于冲刺开发没有太多的怨言,都很尽力地完成自己的分工,我们的组员真的都很棒!感谢有大家的支持和配合,我们的项目才得以不断完善和发展。
102201313 陈尚冰 在本次任务中,我对现有的登录与注册页面进交互优化,完善登录与注册的逻辑。实现管理员审核历年卷并发放福币功能。我认为,在涉及多表操作时,若变量命名未统一或含义不清晰,易出现业务问题。后续的开发中,需要通过统一命名规则和加强调试防范此类问题的发生,这让我深刻体会到清晰命名对于代码维护的重要性。通过这次任务,我不仅提升了多表操作和前后端交互的能力,还深刻认识到在协作开发中,良好的代码规范和详细的测试流程能够有效提高开发效率并减少错误的发生。
102202125 陈思宇 我做的是排行榜这一部分,不可谓不难。我通过对导航栏和排行榜切换标签的交互效果的改进,使得页面更加友好。特别是使用fetch函数从后端动态获取数据并渲染页面,增强了页面的互动性和灵活性。这不仅提升了用户体验,也让我对如何在前端实现数据动态加载、更新以及展示有了更深的了解。修改过程中,我通过fetch从PHP接口获取排行榜数据,并使用JavaScript渲染出来。这让我更加明白了前后端分离的概念,理解了如何通过API接口与后端进行数据交互,特别是如何处理异步请求以及如何有效地操作DOM进行数据展示。这项技能不仅对前端开发有帮助,在全栈开发中也具有重要意义。
102201237 赖锴彬 提前接轨未来写代码的生活(?),每天面临着许多要求和bug,在时限和其他因素的影响下,更加体会到这种巨量的工程,是仅靠一个人无法完成的,在这次冲刺过程中,加深了对相关知识的理解,也体会到了团队协作的重要性,做了这么久的产品,希望卷卷福能被大家说喜欢。
102201311 张硕 不同与α冲刺的循规蹈矩,β给人最直观的感觉就是“累”。首先是任务多与工期紧。软件的功能需要迭代,页面的ui需要优美,开发的方法需要敏捷,杀手功能需要脱颖而出。除此之外,比任务更为沉重的是压力。毕竟需要给其他的同学尝试使用,面向客户的开发,总会惴惴不安,会不会做的不够好,不够完善,得不到他人的认可,投票(bushi);
熬了过程的苦,回头看结果还是有所收获的。尝试了部署本地服务器,写了js的脚本。了解,实践了AI接口的延伸功能,对web的开发过程有了一些自己的认知,体验,并最终使得“卷卷福”成功的展示。最后的最后,感谢队友的帮助与扶持,队长的奶茶与每天的push。
052206123 柯鸿毅 在本次Beta冲刺中,我最大的感受就是累。在开发过程中有许多的bug需要调试,源码本身的问题、环境配置问题等等,都耗费了大量的时间解决。但于此同时又有一种兴奋感,那是看着我们的软件逐渐成型,想要加把劲彻底完成的感觉。而经过本次Beta,我也逐渐掌握了软件开发的节奏,这对我将来的工作会有很大帮助。
102202133 郑奇键 在这次β冲刺中,我感受到团队协作的成熟度明显提升。相比α冲刺,我们更高效地解决了任务分配和沟通问题,特别是在遇到技术难题时,大家能够迅速集思广益,找到解决方案。我个人在代码实现和调试方面也进步不少,特别是在前端和后端的衔接上积累了更多经验。此外,面对紧迫的时间节点,我们学会了更合理地安排任务优先级,确保项目按时推进。这次冲刺让我更加意识到团队协作和时间管理的重要性,也增强了我对项目成功的信心。
102201308 何愉心 在本次β冲刺阶段,我们团队每天都聚集在活动室进行线下编程和面对面的交流,这不仅提升了我们的工作效率,也增强了团队的凝聚力。在这次冲刺中,我主要负责了商城的开发、关键模块的测试、PPT的制作以及博客文章的撰写。通过这个过程,我不仅在前端开发方面变得更加熟练,还积极学习了之前未曾接触过的后端知识,对数据库的应用有了更深刻的理解。此外,我还加强了编写单元测试和自动化测试的能力,收获颇丰。总的来说,这次冲刺不仅提高了我的技术技能,也让我对团队合作有了更深的认识。
102201531 周炳辉 在开发这个资源中心系统和个人主页的过程中,我深刻体会到了前后端交互的重要性。通过PHP与MySQL的配合,实现了文件上传、下载和分类管理等功能。在处理文件上传时,需要特别注意安全性,包括文件类型验证、大小限制等。同时,使用AJAX技术实现了无刷新上传,提升了用户体验。
分页功能的实现让我理解了如何处理大量数据的展示问题。通过合理的SQL查询和参数传递,既保证了性能,又维持了良好的用户体验。这个项目也让我认识到了代码复用和模块化的重要性,良好的代码结构可以大大提高开发效率和后期维护的便利性。
102201306 邱雨涵 在本次实践中,我负责商城的搭建以及数据库的连接。在实践中,我深刻体会到团队协作和规范化开发的重要性,掌握了敏捷开发和版本控制工具的使用。实验过程中,遇到的需求变更和调试问题让我认识到灵活应对和持续改进的必要性。通过实践,我不仅对前端编写更加熟悉,也对数据库进行了更加深刻的认识。

五、欢迎使用卷卷福

Github仓库链接:https://github.com/DriOgon/JuanJuanFu

卷卷福域名:https://juanjuanfu.cn/

本文作者:DriOgon

本文链接:https://www.cnblogs.com/DriOgon/p/18591497

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   DriOgon  阅读(37)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 阿拉斯加海湾 蓝心羽
  2. 2 夏天的风 火羊瞌睡了
  3. 3 南山南 马頔
  4. 4 我记得 赵雷
  5. 5 Call of Silence(Clear Sky Remix) Clear Sky
  6. 6 GoneBad(PHONK) GTR7
南山南 - 马頔
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 马頔

作曲 : 马頔

编曲 : 尧十三

你在南方的艳阳里大雪纷飞

我在北方的寒夜里四季如春

如果天黑之前来得及

我要忘了你的眼睛

穷极一生做不完一场梦

他不再和谁谈论相逢的孤岛

因为心里早已荒芜人烟

他的心里再装不下一个家

做一个只对自己说谎的哑巴

他说你任何为人称道的美丽

不及他第一次遇见你

时光苟延残喘无可奈何

如果所有土地连在一起

走上一生只为拥抱你

喝醉了他的梦 晚安

他听见有人唱着古老的歌

唱着今天还在远方发生的

像在她眼睛里看到的孤岛

没有悲伤但也没有花朵

你在南方的艳阳里大雪纷飞

我在北方的寒夜里四季如春

如果天黑之前来得及

我要忘了你的眼睛

穷极一生做不完一场梦

你在南方的艳阳里大雪纷飞

我在北方的寒夜里四季如春

如果天黑之前来得及

我要忘了你的眼睛

穷极一生做不完一场梦

大梦初醒荒唐了一生

南山南 北秋悲

南山有谷堆

南风喃 北海北

北海有墓碑

南山南 北秋悲

南山有谷堆

南风喃 北海北

北海有墓碑

北海有墓碑

制作人:韦伟

监制:乌莉雅素

吉他:尧十三

大提琴:王平

童声:孙艺菲/金秋雯