本学期所选修的“软件工程”课程作业,需要自己动手,从头开发一个“复活”软件,主要功能是实现大学生闲置物品的管理,支持大学生在平台上发布自己的闲置,同时查看他人的发布;不但要提供可运行的代码,还要提供比较详细的文档说明。简而言之,需要自己完成一个简易版的“闲鱼”出来。
对于写代码一事,我并不陌生,也并非没有设计过有一定复杂度的程序;但是过往的经历里,所写的代码一般不过几百行,所用到的类一般不过七八个,所写过的“Read Me”文档,也不过是寥寥数语的简单描述;若说从零开始,手搓一个像模像样的软件,还要为之配上详尽的分析与使用文档,却实属第一回的尝试。看起来,为了完成这个目标,是非得用上新学的工程化思想与开发方法不可了!
在正式的软件开发之前,需要首先确定软件过程模型和开发方法。显然,“复活”软件开发的需求比较明确,适合使用“正派武功”“瀑布模型”进行实现,即将软件开发过程分为需求分析、软件设计、编码实现、软件测试、运行维护等步骤,严格按照先后次序和逻辑关系来组织实施。确定好总路线后,我便一头扎进“瀑布”中,开始“复活”软件的开发。
首先需要做的是需求分析。我尝试以一个使用者的身份,分析软件应该满足哪些需求:最基本的需求是物品与需求的增、删、改、查操作;为了面向大规模用户进行扩展,需要增加账号管理系统;为了对物品进行方便的管理,可以将物品分类,每一类型通过一定的属性加以刻画;为了实现对账号和物品的有效管理,需要设置管理员身份并给予权限。
这些初步确定的需求,天然地可以通过“面向对象的需求分析方法学”以及UML建模语言加以描述。根据需求画出用例图,再根据用例画出顺序图,再根据顺序图画出类图,自然而然地就把用户提出的需求,转化为软件开发的目标,一个清晰的图景已经逐渐地展开了。
从边界类、控制类和分析类的划分,我考虑套用MVC风格,把软件系统分成模型、视图和控制器三类构建,便得到软件的体系结构设计;进一步对用户界面进行设计,不求精致、完美,但求清晰明了之余,能够给用户一些小惊喜。因此,除了一般功能的设计,我计划在登录的主界面处放上一句小诗,起到一分点缀。
接着需要做的是编码实现。古人云:“君子善假于物。”如今,大模型可以直接根据需求与设计文档生成代码,这使得编码实现过程得以大大简化。然而,在“复活”软件的编码实现环节,大模型初次生成的代码在功能上存在一定问题,例如:选择性地只实现了一部分功能需求;GUI界面的实现美观程度较低;账号信息管理存在bug。因此,我仍然要在大模型生成的代码基础上进行修改,以实现所有的预期功能。
最后,我进行了简单的测试,逐一验证了用户注册与登录,物品与需求信息的发布、修改、查询与删除,管理员操作等功能。当把最终版的软件代码与文档上传至Github仓库后,一种成就感油然而生:我终于也能完成了一个比较复杂的、像模像样的软件项目了!
虽然这个简陋的“复活”软件仍然存在着很多不足,例如GUI界面比较粗糙、软件信息的管理实现比较简单,但开发过程使我初步地收获了现代软件开发过程的经验:
一、软件开发过程中,“慢”就是快。正所谓“不谋全局者,不足以谋一域”。对于软件系统的开发而言,各构建之间存在复杂的相互作用,即使只是对功能进行简单的维护与扩展,也会“牵一发而动全身”,因此需要“谋定而后动”,先明确清晰的体系架构,设计好高内聚低耦合的模块后再进行开发,才能得到扩展性、维护性、健壮性与实用性良好的系统;如果不在开发之前先做足需求分析与软件设计的功课,直接开始编码实现,写到哪里算哪里,很容易陷入重重代码织就的迷雾之中。当然,从“敏捷原则”出发,在前期的功课不用做的过于详细,但仍然需要建立框架、留出余量,否则,再简单的体系也会逐渐变成“屎山代码”。
二、大模型时代,人类软件工程师仍然有用武之地。在需求分析层面,因为软件的设计与开发,归根结底是要满足人类的需求;虽然大模型未必没有分析用户心理的能力,但它现在仍然没有“灵魂”,没法“推己及人”地构思用户在实际使用中所可能产生的需求。因此,在软件需求分析层面,仍然需要人类需求分析工程师与利益相关方进行交互,以充分获取需求、分析需求。在编码实现层面,虽然大模型已经具有不弱的编程能力,能够大幅提升实现效率,但并不能保证每一段代码实现的如臂所指;更严重的问题是,大模型的debug过程受到提示词的干扰:假如本身一段代码没有bug,但大模型收到debug的指示,很有可能会改出bug来。因此,仍然需要人类程序员把好最后一道关。
现代的软件工程师,即使只是和十年前相比,也可以说是更加幸运的。计算机辅助工具,特别是人工智能技术的兴起,极大提升了软件开发的效率。这也促使软件工程师将更多精力从“编写代码”转向“构建软件”,在需求洞察与架构设计上投入更多思考。未来,软件开发范式或许将因此而发生翻天覆地的变化,但其核心或许始终如一:以最低的时间与资金成本,实现最关键的功能,为用户提供最优的体验,并为未来的可能性留下最广阔的空间。
浙公网安备 33010602011771号