欢迎来到强健与安全的程序编写世界!
在本章中,我们将学习如何编写“强健”的代码。你有没有试过在使用应用程序时,因为输入错误而导致程序崩溃?或是遇到过一个不需要密码就能登入的网站?这些程序都不够强健(Robust)或安全(Secure)。学完这些笔记,你将会知道如何确保你的程序能优雅地处理错误,并将入侵者拒之门外。别担心,内容看起来虽然多,但我们会把它拆解成简单步骤,一步步带你掌握!
1. 数据验证:程序的“守门员”
数据验证(Data Validation)是指电脑进行的一项检查,确保输入的数据是合理(sensible)或合乎情理(reasonable)的。它不会检查数据是否 100% 正确,但会检查该数据是否符合特定的规则。
把它想象成夜店门口的保安:他们会检查你有没有身份证以及年龄是否合资格,但他们不一定需要知道你的生平故事!
常见的验证检查
根据 AQA 课程大纲,你需要掌握以下三种简单的常规检查:
1. 长度检查(Length Check):检查数据是否符合最少或最多的字符数限制。
例子:确保密码长度至少有 8 个字符。
2. 存在检查(Presence Check):检查数据是否已被输入(确保输入栏位不是空的)。
例子:确保注册表单中的“电子邮件地址”栏位没有留空。
3. 范围检查(Range Check):检查数字或日期是否落在特定的数值范围内。
例子:如果程序要求输入月份,输入的数字必须介乎 1 到 12 之间。
重点总结:
验证可以阻止程序处理“垃圾”数据,从而防止程序在运行后期崩溃。
2. 验证身份:你是谁?
身份验证(Authentication)是确认使用者身份的过程。在你的 GCSE 课程中,重点在于使用用户名(username)和密码(password)的简单验证流程。
一个简单的身份验证流程通常包括:
1. 要求使用者输入用户名。
2. 要求输入密码。
3. 检查密码是否与该用户名储存的密码相符。
4. 如果匹配,则允许进入;否则显示“拒绝访问(Access Denied)”。
你知道吗? 即使我们现在见到 FaceID 或指纹扫描等先进技术,它们本质上都只是身份验证的不同实现方式!
3. 测试你的代码
测试(Testing)是运行程序以找出错误(漏洞/bugs)的过程。这是开发过程中至关重要的一环,因为即使是最顶尖的程序员也会犯错。一旦发现错误,你就必须修正(refine)它。
三种测试数据类型
要正确测试程序,你不能每次都输入相同的数字。你需要使用不同类型的测试数据(test data)。想象一个接收 \( 1 \) 到 \( 10 \) 之间数字的程序:
1. 正常数据(Normal Data):这是程序应该能够处理的“典型”数据。
例子:输入数字 5。
2. 边界数据(Boundary/Extreme Data):这是处于允许范围边缘的数值。
例子:输入 1 或 10。(边界数据也包括边界外一点点的数值,如 0 或 11,用来测试“围栏”是否有效)。
3. 错误数据(Erroneous Data):这类数据类型明显错误,应该被程序拒绝。
例子:当程序预期输入数字时,输入“香蕉”这样的文字或“#”这样的符号。
快速回顾:测试表
如果允许的范围是 \( 1 \) 到 \( 10 \) :
- 7 是正常数据。
- 1 是边界数据。
- 10 是边界数据。
- 15 是错误数据。
- "Hello" 是错误数据。
4. 识别与分类错误
当事情出错时,错误通常属于以下两类之一。理解错误的类型能让你更快地修复它们!
语法错误(Syntax Errors)
语法错误是程序语言中“文法”或“拼写”上的错误。如果有语法错误,程序完全无法运行。
类比:这就像试图阅读一段语无伦次的句子;你甚至无法开始理解它的意思。
常见原因:遗漏括号、关键字(如 print)拼写错误,或忘记加上冒号。
逻辑错误(Logic Errors)
逻辑错误是程序设计方式上的错误。程序运行得非常流畅,但输出的结果却是错误的。
类比:这就像按照食谱做蛋糕,但把糖误当成盐。你依然做出了蛋糕,但吃起来味道糟透了!
常见原因:将 \( + \) 用成了 \( - \),或者在该用“大于或等于”的地方误用了“大于”。
记忆小撇步:
Syntax(语法)= Spelling(拼写错误,程序启动不了)。
Logic(逻辑)= Lost(迷失了,程序跑得动但得到错误答案)。
总结:如何让程序变得强健且安全
1. 使用验证来确保只有合理的数据能够进入。
2. 使用身份验证来确保只有合适的人才能使用程序。
3. 使用正常、边界和错误数据来测试你的程序。
4. 找出并修正语法与逻辑错误来优化你的代码。
你做得很好!继续在你的程序语言中练习编写这些常规,很快“强健的程序设计”就会成为你的第二天性!