ItemRevive项目开发总结

Item_revive 是一个软件工程课程项目开发的网络应用程序,项目采用Django框架开发。在开发环境中,已实现用户认证与管理、物品发布与编辑、物品浏览与筛选,以及动态物品类型管理。项目已发布在Github:https://github.com/Zhenzhi-Wang-2004/item_revive ,可参考项目文档进行开发环境的搭建。

作为非计算机相关专业的本科生,我的未来规划以科研为主,相对来说实验研究比较多,但我希望自己能够完成理论计算的工作,比如进行蛋白设计,甚至搭建全细胞数字模型。我辅修计算机以及学习软件工程课程的目的更多是希望掌握一些实用的技能,在将来能够用得上。目前我能够比较熟练使用的编程语言是python,同时也掌握一点点C++和R语言,但对于软件开发而言,我学习的编程语言似乎都不太适用。例如,R语言和python更适合完成数据分析,C++更适合完成底层的工作。似乎Java语言更适合用来进行软件开发?但我目前从未接触过Java语言。于是,为了完成课程项目,在现有的编程语言中,我决定使用我最熟悉的python

我之前接触过面向对象编程,并在学习生物信息相关课程的时候得到了较多的锻炼。不过目前为止,我对python的认识仅限于写脚本处理数据,没有做过真正看起来像一个“软件”的项目,我不知道怎么把python脚本变成一个可执行文件,也没写过图形化界面。这个学期一共有5门课程,每门课程都非常有挑战性,而且还要拿出另一半的时间用来做科研,所以从头“造轮子”并不是一个很好的选择。软件开发具有一定的约束性需求,包括开发成本、交付进度、技术选型、遵循标准,显然,我的最大约束就是“时间”,我希望在整个项目上的投入不要超过48小时,也就是如果一天工作8小时,最多要在6天内结束。

10月初,在还没有完整学习软件工程过程知识体系的情况下,我没有先去考虑需求分析、软件架构设计、详细设计,而是先想办法解决技术问题,至少保证能够最低限度地完成这个项目,通过这门课程。我开始查阅相关资料,研究能否用python进行软件开发。一次偶然的机会,我发现了flask开发框架,又进一步发现了Django。如果能够使用一个成熟的软件开发框架,就意味着不需要再去造轮子,但我一开始也担心这样会不会不符合课程的要求、会不会失去了课程项目的意义。然而,从作业要求(即软件需求)上看,并没有对“技术选型”进行任何约束,也就是说只要能做出来,不管用什么工具,都是可以的。而且,我的这个选择非常符合软件工程的基本原则——软件重用原则,即开发过程中尽可能利用已有软件资源和资产来实现软件系统

另一个问题是,软件的定义是由一系列计算机数据和指令组成的集合,按照特定顺序组织,提供特定功能和性能。那么Web网站的开发算不算软件开发?“网站”似乎很不符合软件的定义,也没有“下载”、“安装”、“卸载”的概念。但实际上,Web开发的本质是开发一个运行在服务器上的软件应用,因此属于软件开发,而且均需要遵循软件工程原则,涉及需求分析、设计、编码、测试、部署等生命周期阶段。由此来看,我使用Django来开发“物品复活软件”是完全没问题的!

接下来,采用什么样的开发过程?作为一个从来没开发过软件的初学者,最好的办法肯定是按照最标准的“瀑布模型”,完整地学习一遍从需求分析到软件设计再到编码的过程。但是,10月份就需要完成第一次的开发任务,此时的课程进度还不到三分之一。因此,我应该采用的是“原型模型”,不管三七二十一,先做出来再说,只要能满足最初的需求,“能跑”就行。由于时间紧张,我不可能在这么短的时间内从零基础开始掌握整个Django框架,以及HTML。所以,最佳实践是先使用大模型生成一个最基本的“软件原型”,再逐步学习里面的代码。

而对于第二次作业,需要完成新的软件需求,这就意味着我的第一版软件需要有良好的可扩展性。我的软件开发过程变成了“迭代模型”。一开始,我还是去尝试能否利用大模型完成需求,然而,遇到了很大的困难。对于单个功能的完成,大模型比较擅长,而对于一个项目来说,代码会被分成很多个不同的文件,而且相互之间都有依赖,因此前面的尝试均以失败告终。于是我决定先把现有的代码搞明白,并且想办法提高效率,磨刀不误砍柴工。

第一个难题,是当大模型对各个部分的代码修改后,假如不成功,如何回到原来的状态?我原来的办法是备份原来的代码,如果出错了再粘贴回去,但是工作量特别大。回顾课上讲的内容,我意识到应该用Git来进行版本回退。只需要使用两个命令:git fetch origin maingit reset --hard origin/main,就能回到原来的版本(虽然这个方法并不是最好的,理论上应该用本地的版本库来回退,但是起码能用)。

第二个难题,是如何让大模型能够获取整个项目而不是局部代码的信息。原来,我用的是文心一言,每次都是根据自己的理解,手动找出需要用到的代码。后面我发现了豆包可以通过Github链接上传整个项目,但效果也不好。再后来,我觉得之前用的大模型可能并不是专门用来写代码的,应该有更好的工具。果不其然,我找到了Trae这个工具。Trae是一个集成开发环境,并且内置AI助手。使用Trae,我顺利地完成了软件的迭代。

最后,回顾整个项目过程,虽然代码能力没有得到实质性的提高,如果是早几年辅修计算机(不是为了转码),在科研压力下,我估计会选择退出辅修。但通过这个项目,确确实实学会了开发软件所需要的实用技能,最终开发的效果也还不错。这门课程结束,计算机的辅修也圆满完成了。在辅修计算机之前,我觉得自己的生物专业很容易被替代,没有核心的技术,随便来一个人培训一个月,什么实验都会做了,很后悔没有选择一个更有技术门槛的专业。但辅修完计算机之后,我已经亲身感受到了,在大模型的加持下,计算机的从业人员可以“一个顶五个”,但自己的专业,尤其是“研发”工作,几乎不可能通过大模型来提高效率。而且,我发现自己的能力还是更适合留在本专业,毕竟确实不适合高强度长时间做一件事情。总的来说,这次课程项目是一个非常好的实践。

posted on 2026-01-06 23:05  Stonewzzzz  阅读(1)  评论(0)    收藏  举报