一、作业背景与组队协作模式

作为23 计科7班软件工程专业的大二学生,我们在 “软件工程导论” 课程中接触到 “结对编程” 这一经典开发模式。本次作业要求 2-3 人组队,借助代码自动生成工具完成一个可运行的小型项目,旨在让我们体会 “人机协作 + 人际协作” 在软件开发中的价值。

我们小组由  陈豪杰(需求分析与 AI 交互)、孙晟继(代码测试与 Bug 修复;文档编写与技术复盘)两位成员组成。采用 “轮值主导 + 互补支持” 的协作模式:每次功能迭代由一位成员主导执行,另外两位从旁提供思路并记录过程,确保每个环节都有多元视角的参与。

二、工具选型与技术栈决策

在代码自动生成工具的选择上,我们对比了三类主流方案:

工具 优势 不足 最终选择理由
GitHub Copilot 与 VS Code 深度集成,实时代码补全 对复杂需求的理解能力较弱 更适合 “编码辅助”,而非 “需求→代码全流程”
豆包代码助手 中文交互友好,支持多轮需求迭代 生成代码的工程化程度一般 备选方案
ChatGPT 自然语言理解能力强,支持复杂需求拆解 需要手动调整代码适配本地运行环境 能完整承接 “需求描述→代码生成→问题优化” 全流程

最终我们选择ChatGPT(GPT-4 版本)作为核心工具,技术栈为Python 3.9(选择 Python 是因为其语法简洁,适合快速验证功能)。

三、项目开发全流程详解

1. 需求工程:从模糊想法到可执行需求

起初我们对 “图书管理系统” 的需求仅停留在 “能借还书” 的模糊认知,通过小组头脑风暴和 “需求细化提问法”,逐步明确了功能需求、非功能需求用户场景

  • 功能需求

    • 基础功能:图书信息 CRUD(创建、查询、更新、删除);
    • 核心流程:借阅(需验证图书状态)、归还(需更新状态和记录);
    • 拓展功能:图书分类(按作者、出版社)、借阅统计。
  • 非功能需求

    • 性能:单批次处理 100 本图书时响应时间 < 1 秒;
    • 可靠性:数据持久化,程序崩溃后可恢复;
    • 易用性:控制台交互需有清晰的菜单引导。
  • 用户场景

    • 场景 1:图书管理员添加新到的 “人工智能” 系列教材;
    • 场景 2:学生查询 “Python 编程” 相关图书并借阅;
    • 场景 3:管理员月末统计本月图书借阅 Top3。

2. 代码生成:AI 的 “理解 - 生成” 能力边界

我们将需求拆解为 “领域模型设计→核心功能实现→交互逻辑开发” 三个阶段,逐步向 ChatGPT 投喂需求:

  • 领域模型设计:向 AI 提问:“请设计图书管理系统的领域模型,包含 Book、User、Library 三个核心类,需体现类之间的关联关系。”AI 生成的 UML 类图描述(文本版):

    +----------------+        +----------------+
    |    Book        |        |    User        |
    +----------------+        +----------------+
    | - title: str   |        | - name: str    |
    | - author: str  |        | - role: str    |  # 如"学生"、"管理员"
    | - isbn: str    |        | - borrow_history: list |
    | - status: str  |        +----------------+
    | - borrower: User|--------|*--------------|
    +----------------+        |                |
                              +----------------+
    
    +----------------+
    |  Library       |
    +----------------+
    | - books: list  |
    | - users: list  |
    +----------------+
    | + add_book()   |
    | + borrow_book()-+----+
    | + return_book()-+    |
    +----------------+    |
                          |
    +----------------+    |
    |  Main          |    |
    +----------------+    |
    | - library: Library|<-+
    | + run()        |
    +----------------+
    
  • 核心功能实现:基于领域模型,进一步要求 AI 生成代码:“请基于上述类图,生成 Python 代码实现图书借阅、归还功能,要求借阅时检查图书状态,归还时记录归还时间。”AI 生成的关键方法示例:

    python

    class Library:
        def borrow_book(self, book_isbn, user_name):
            for book in self.books:
                if book.isbn == book_isbn:
                    if book.status == "可借阅":
                        book.status = "已借阅"
                        book.borrower = user_name
                        book.borrow_date = datetime.datetime.now()
                        # 为用户添加借阅记录
                        for user in self.users:
                            if user.name == user_name:
                                user.borrow_history.append({
                                    "book_title": book.title,
                                    "borrow_date": book.borrow_date
                                })
                        return True, "借阅成功"
                    else:
                        return False, "图书已被借阅"
            return False, "图书不存在"
    
        def return_book(self, book_isbn):
            for book in self.books:
                if book.isbn == book_isbn:
                    if book.status == "已借阅":
                        book.status = "可借阅"
                        return_date = datetime.datetime.now()
                        borrow_date = datetime.datetime.strptime(book.borrow_date, "%Y-%m-%d %H:%M:%S")
                        days_borrowed = (return_date - borrow_date).days
                        book.borrower = None
                        book.borrow_date = None
                        return True, f"归还成功,借阅时长{days_borrowed}天"
                    else:
                        return False, "图书未被借阅"
            return False, "图书不存在"
    

3. 测试驱动的优化迭代

孙晟继 同学采用黑盒测试 + 白盒测试结合的方式,对系统进行了多轮验证:

  • 黑盒测试场景

    • 场景 1:输入无效 ISBN(如 “123”),验证系统是否提示 “ISBN 格式错误”;
    • 场景 2:借阅已被借出的图书,验证系统是否提示 “图书已被借阅”;
    • 场景 3:连续添加 10 本不同图书,验证数据持久化是否完整。
  • 白盒测试重点:针对borrow_book方法,通过单元测试验证分支逻辑:

    python

    def test_borrow_book(self):
        # 初始化图书馆、图书和用户
        lib = Library()
        book = Book("测试图书", "测试作者", "测试出版社", "9787111694220")
        lib.books.append(book)
        user = User("测试用户", "学生")
        lib.users.append(user)
        
        # 测试正常借阅
        result, msg = lib.borrow_book("9787111694220", "测试用户")
        self.assertTrue(result)
        self.assertEqual(msg, "借阅成功")
        self.assertEqual(book.status, "已借阅")
        
        # 测试借阅已借出的图书
        result, msg = lib.borrow_book("9787111694220", "另一用户")
        self.assertFalse(result)
        self.assertEqual(msg, "图书已被借阅")
    

基于测试结果,我们又向 AI 提出了3 类优化需求

  • 数据层:“如何将图书数据保存到 SQLite 数据库,实现更可靠的持久化?”
  • 交互层:“如何优化控制台菜单的交互体验,比如添加颜色提示?”
  • 功能层:“如何实现图书逾期提醒(假设借阅期限为 30 天)?”

AI 针对 “逾期提醒” 生成的代码片段:

python

def check_overdue(self):
    overdue_books = []
    now = datetime.datetime.now()
    for book in self.books:
        if book.status == "已借阅":
            borrow_date = book.borrow_date
            due_date = borrow_date + datetime.timedelta(days=30)
            if now > due_date:
                overdue_days = (now - due_date).days
                overdue_books.append({
                    "title": book.title,
                    "borrower": book.borrower,
                    "overdue_days": overdue_days
                })
    return overdue_books

四、项目成果与延伸思考

1. 最终系统功能全景

我们的图书管理系统最终实现了7 大核心功能

  • 图书信息管理(添加、修改、删除、查询);
  • 多维度查询(按书名、作者、ISBN、出版社);
  • 借阅 / 归还流程(含状态校验、时间记录);
  • 数据持久化(支持 JSON 文件和 SQLite 数据库双模式);
  • 逾期提醒(自动计算并提示超期图书);
  • 用户管理(区分管理员和普通用户权限);
  • 借阅统计(按月、按用户生成借阅排行)。

其中 “多维度查询” 的运行示例:

请输入操作序号:2
===== 请选择查询方式 =====
1. 按书名查询
2. 按作者查询
3. 按出版社查询
4. 按ISBN查询
请输入序号:2
请输入作者关键词:张三
查询结果:
1. 《Python编程从入门到精通》  ISBN:9787111694220  状态:可借阅
2. 《数据结构与算法分析》      ISBN:9787115537930  状态:已借阅

2. 对 “AI + 编程” 未来的思考

通过本次实践,我们对 “人工智能辅助软件开发” 有了更具象的认知:

  • AI 的当前定位:是 “超级助手” 而非 “替代者”。它能高效处理标准化、重复性的编码工作(如生成 CRUD 接口、基础算法实现),但对业务逻辑的深层理解、系统架构的全局设计仍需人类主导。
  • 工程师的能力进化:未来的开发者需要更强的 “需求拆解能力” 和 “代码校验能力”—— 能把模糊的业务需求转化为 AI 可理解的精准提示,也能快速识别 AI 生成代码中的潜在问题(如性能瓶颈、逻辑漏洞)。

以本次项目为例,AI 生成的 “数据持久化” 代码最初仅支持单线程写入,在我们提出 “多用户并发访问” 的假设后,又通过提示 “如何实现 Python 文件的并发安全写入?” 得到了带锁机制的优化方案:

python

import threading

class SafeLibrarySystem(LibrarySystem):
    def __init__(self):
        super().__init__()
        self.file_lock = threading.Lock()  # 新增文件锁
        
    def save_to_file(self):
        with self.file_lock:  # 加锁保证并发安全
            super().save_to_file()

五、团队总结与致谢

  • 陈豪杰(需求与 AI 交互):ChatGPT 的代码生成能力超出预期,但需要非常精准的提示词。比如最初我只说 “生成图书管理系统代码”,得到的是很简陋的版本;后来学会拆解需求(如 “先设计领域模型→再实现核心功能→最后优化交互”),产出质量才明显提升。
  • 孙晟继(测试与优化):结对编程让测试工作更有价值。当我发现 “借阅后图书状态未更新” 的问题时,XXX 能快速和 AI 沟通定位,这种 “发现问题→解决问题” 的闭环效率很高;文档与复盘,整理过程中发现,把每次和 AI 的对话记录下来(包括失败的提示词),是很好的学习素材。比如有一次我问 “优化图书系统”,AI 回复很宽泛;后来改成 “从性能、可靠性、易用性三个维度优化图书管理系统的 Python 代码”,得到的建议就具体多了。

感谢本次作业让我们深入体验了 “AI 辅助结对编程” 的完整流程,也期待在后续课程中探索更多软件工程实践方法!

班级:23 计科7班  小组成员:陈豪杰 孙晟继

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐