欢迎来到软件工程!
在本章中,我们将探讨建立计算机程序的“宏观愿景”。你已经学会了如何编写 Python 代码和创建算法,但专业的程序员是如何构建像 Instagram 或 TikTok 这样庞大的应用程序呢?他们并不会直接开始敲键盘!他们使用的是软件工程 (Software Engineering)。
你可以把软件工程想象成建造摩天大楼的蓝图。你总不会在没有计划的情况下就开始叠砖块,对吧?软件工程提供了必要的架构,以确保程序稳定、实用且易于修复。
2.6.1 程序开发的 5 个阶段
软件开发通常遵循一个特定的流程。即使你只是制作一个简单的计算器,遵循这些阶段也能让你省去很多麻烦!
阶段 1:收集需求 (Gather Requirements)
在写下任何一行代码之前,你需要知道程序应该做什么。这个阶段涉及与用户沟通,以了解他们的需求。
例子:如果你要建立一个“功课规划”应用程序,你需要知道:它需要日历吗?它应该发送通知吗?它需要将数据保存到文件中吗?
关键目标:定义输入 (Inputs) 和输出 (Outputs)(正如我们在 2.1 节中学到的)。
阶段 2:设计解决方案 (Design Solutions)
现在你已经知道要构建什么了,接下来就是计划如何构建它。这是你创建流程图或伪代码等“蓝图”的地方。
类比:这就像厨师在烹饪前写下食谱。在纸上修改错误比修复一个烤焦的蛋糕要容易得多!
阶段 3:编写代码 (Write Code)
这是大多数学生最喜欢的部分!你将设计转化为实际的 Python 代码。由于你已经有了设计,这个阶段应该会顺利得多,因为你不必再去“猜测”接下来该输入什么。
阶段 4:测试与优化 (Test and Refine Code)
没有程序第一次就能完美运行。在此阶段,你运行程序以查找“臭虫”(Bugs/错误)。你将使用测试案例(正常、错误和边界条件)和追踪表 (Trace Tables) 来确保一切运作正常。如果发现问题,你便需要“优化”(修复和改进)代码。
阶段 5:部署代码 (Deploy Code)
这是“盛大开幕”的时刻!部署意味着将软件安装到用户的计算机上,或让应用程序上架供大众下载和使用。
记忆法 (Mnemonic):
Great Dogs Will Treat Dads
(Gather 收集, Design 设计, Write 编写, Test 测试, Deploy 部署)
快速回顾箱:
1. 收集:问题是什么?
2. 设计:规划逻辑(流程图)。
3. 编写:用 Python 编码。
4. 测试:查找并修复错误。
5. 部署:交给用户使用。
2.6.2 线性开发与迭代开发
你可能会认为我们总是按直线从阶段 1 到阶段 5。这称为线性 (Linear) 顺序。然而,在现实世界中,情况很少那么简单!
什么是迭代开发 (Iterative Development)?
迭代开发意味着以“周期”或“循环”的方式经历这些阶段。如果一开始觉得困难也不用担心——只需将其想象为“反复改进”软件的过程。
有时,当你在测试代码(阶段 4)时,你会意识到你的设计(阶段 2)可能有误。这时你需要回到设计阶段,进行修正,然后再次编写代码。这种“回头”的过程就是迭代流程的一部分。
为什么要使用迭代开发?
1. 需求变更:有时用户会改变对他们想要什么的主意。
2. 发现问题:你可能会在进行到一半时发现技术问题,迫使你重新设计程序的一部分。
3. 持续改进:你可以先发布应用程序的“基础版本”,然后在后续周期中不断添加功能。
你知道吗?
你最喜欢的大多数应用程序(例如 WhatsApp)都是迭代开发的。它们从基本的讯息功能开始,然后通过开发阶段“循环”回来,稍后再添加视频通话、贴图和状态更新等功能!
关键点:开发并不总是一条从头到尾的直线。它通常是一系列圆圈,我们在其中进行测试、学习,然后回到原点改进我们的工作。
应避免的常见错误
• 跳过设计阶段:许多学生会直接开始编码。这通常会导致“意大利面式代码”(Spaghetti code),即混乱且难以修复。永远记得先计划!
• 在最后才进行测试:不要等到整个程序完成后才进行测试。在开发过程中分小部分进行测试(增量测试)。
快速回顾:核心概念
软件工程是一种构建程序的结构化方法。它包括收集需求、设计、编写代码、测试和部署。虽然它们看起来像是直线步骤,但我们通常会以迭代周期来工作,使软件变得越来越好!