学期2024-2025-1 学号20241306《计算机基础与程序设计》第10周学习总结
学期2024-2025-1 学号20241306 《计算机基础与程序设计》第10周学习总结
作业信息
这个作业属于哪个课程 | [2024-2025-1-计算机基础与程序设计(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP)) |
---|---|
这个作业要求在哪里 | [2024-2025-1计算机基础与程序设计第5周作业(https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP/homework/13276)) |
这个作业的目标 | Pep/9虚拟机,机器语言与汇编语言,算法与伪代码,测试:黑盒,白盒 |
作业正文 |
教材学习内容总结
一.Pep/9虚拟机:
1.内存单元:由65536字节的存储空间构成,地址范围为-7FFF到7FFF(十六进制表示),相当于十进制数的-32768到327671。
2.字长:Pep/9的字长可以是2字节(16位)。
3.指令格式:一条指令由两部分组成,一是指令说明符(8位),二是(可选的)操作数说明符(16位)。
4.寄存器:拥有多个寄存器,重点研究的有程序计数器(PC)、指令寄存器(IR)和累加器(A),这些寄存器分别用于存储下一条指令的地址、当前正在执行的指令副本以及数据和运算结果。
二.机器语言与汇编语言
1.机器语言:
定义:机器语言是由0和1按一定规则排列组成的指令集,能被计算机硬件直接识别和执行。
特点:执行效率高,速度快,但可读性差,编程繁杂,且只适用于特定类型的计算机。
2.汇编语言:
定义:汇编语言用助记符、地址符号或标号代替机器语言的二进制码,是一种面向机器的低级语言。
特点:可读性较机器语言强,执行速度快,能直接对硬件实施控制。但编程效率不高,且为特定计算机设计,不同平台之间不可直接移植。
翻译:汇编语言编写的程序需要由汇编程序翻译成机器语言后才能被执行。
三.算法与伪代码
1.算法定义:
算法是一系列解决问题的清晰指令,能够对规范的输入,在有限时间内获得所要求的输出。
算法是解决问题的方法或过程,必须描述为一个有限步骤序列,并在有限时间内结束。
2.伪代码:
伪代码是一种介于真正的程序代码和非形式化描述之间的形式,使用结构化格式和特定词汇,易于人类理解3。
伪代码不是真正的计算机代码,不用于被计算机执行,而是用于描述算法的逻辑和步骤。
3.算法与伪代码的关系:
算法可以用伪代码来表示,伪代码帮助人们理解算法的逻辑和步骤,而不涉及具体的编程语言实现细节。
四.测试:黑盒,白盒
软件测试中,黑盒测试与白盒测试是两种重要的测试方法。
1.黑盒测试:又称为功能测试,主要检测软件的每一个功能是否能够正常使用。测试时,将程序视为一个不可打开的黑盒子,不考虑其内部结构和特性,仅通过程序接口进行测试。黑盒测试注重于测试软件的功能性需求,检查程序功能是否按照需求规格说明书的规定正常使用。其优点是与软件具体实现无关,测试用例可在软件实现过程中设计,有助于压缩项目总开发时间。
2.白盒测试:基于软件内部结构的一种测试方法,主要针对代码和程序逻辑进行测试。目的是发现代码中的隐藏错误,如逻辑错误、边界条件错误等,并保证每个逻辑分支正确执行。白盒测试需要测试工程师具备深厚的软件开发功底,精通相应的开发语言
教材学习中的问题和解决过程
- 问题1:Pep/9虚拟机有哪些应用场景?
- 问题1解决方案:
教学目的:作为一种虚拟机,Pep/9在计算机科学教育中被广泛用于教学目的,帮助学生理解计算机系统的运作原理,包括硬件和操作系统的模拟。
算法与程序设计学习:通过Pep/9虚拟机,学生可以学习汇编语言编程,理解机器语言指令的执行过程,以及算法在底层硬件上的实现方式。
模拟与测试:Pep/9虚拟机可用于模拟特定计算机系统的行为,便于开发者在无需实际硬件的情况下进行测试和调试。 - 问题2:高级语言是如何转化为机器语言的?
- 问题2解决方案:
编译:编译是将整个高级语言编写的源程序先翻译成机器语言程序,再生成可在操作系统下直接运行的执行程序(目标程序)。编译过程包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等阶段。编译后的程序执行效率高,因为整个程序在执行前已经被完全翻译和优化。
解释:解释是逐句解释执行源程序,即解释一句执行一句,不产生目标文件。解释器读取高级语言源代码,逐句将其转换成机器语言并执行。解释方式灵活,便于调试和修改程序,但执行效率相对较低。
编译和解释方式各有优缺点,通常根据具体需求和应用场景选择合适的方式。 - 问题3:什么是编译器?
- 问题3解决方案:
定义:编译器是一种将高级语言程序转换为目标机器指令的程序,是软件开发过程中不可缺少的工具之一。
功能:编译器的主要功能是将高级语言(如C、C++、Java等)编写的源代码翻译成等价的低级语言(如汇编语言、机器语言)程序,以便计算机能够直接执行。
工作原理:编译过程通常包括词法分析、语法分析、语义分析、代码优化、存储分配和代码生成等逻辑步骤。编译器会逐一遍历源程序,完成相应的分析和转换工作,最终生成可执行的目标代码。
编译器作为连接高级语言和机器语言的桥梁,在软件开发中发挥着至关重要的作用。它不仅提高了编程效率,还使得程序更易于维护和理解 - 问题4:如何编写高效的算法?
- 问题4解决方案:
编写高效的算法是计算机科学和软件工程中的核心技能。以下是一些关键步骤和策略,用于编写高效的算法:
明确问题:
确保完全理解问题,包括输入、输出和约束条件。
分析问题的本质,确定是否需要优化时间复杂度、空间复杂度或其他性能指标。
设计算法:
选择合适的数据结构:根据问题的需求,选择能够高效支持所需操作的数据结构。
利用数学和逻辑:运用数学定理、公式和逻辑推理来简化问题。
分治法:将问题分解为更小的子问题,然后递归地解决这些子问题。
动态规划:当问题具有重叠子问题时,使用动态规划可以避免重复计算。
贪心算法:在某些情况下,贪心策略可以产生最优解或近似最优解。
实现算法:
使用高效的编程语言:选择执行速度快的编程语言,并熟悉其优化特性。
编写清晰的代码:保持代码简洁、易读,并遵循良好的编程实践。
利用库函数:当可能时,使用标准库或第三方库中的高效函数。
测试与验证:
创建测试用例:设计一组涵盖各种情况的测试用例,以确保算法的正确性。
性能分析:使用性能分析工具来测量算法的运行时间和资源消耗。
调试与优化:根据测试结果进行调试,并优化算法以提高效率。
持续改进:
学习新算法和技术:保持对最新算法和技术的了解,以便在适当的时候应用它们。
反馈与迭代:根据用户反馈和实际应用中的表现,不断改进算法。
考虑并行与分布式计算:
当问题规模庞大时,考虑使用并行算法或分布式计算来提高效率。
文档与注释:
为算法提供详细的文档和注释,以便其他人能够理解其工作原理和如何使用。
编写高效的算法需要不断的实践、学习和优化。通过遵循上述步骤和策略,可以逐渐提高算法设计和实现的能力。 - 问题5:什么是贪心算法与动态规划?
- 问题5解决方案:
贪心算法与动态规划
贪心算法:
定义:贪心算法在求解问题时,总是做出在当前看来最好的选择,即局部最优解,试图通过局部最优推出全局最优。
特点:无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。
适用场景:适用于一维问题,如教师排课系统、任务调度等。
动态规划:
定义:动态规划是一种递推算法,用局部最优解来推导全局最优解,主要用于解决具有最优子结构的问题。
特点:有回退功能,会根据以前的选择结果对当前进行选择,主要运用于二维或三维问题。
与贪心算法的关系:动态规划更为一般,贪心算法可以看作是动态规划的一个特例。 - 问题6:黑盒测试和白盒测试的实际应用场景
- 问题6解决方案:
黑盒测试:
用户交互界面测试:模拟用户操作,验证界面响应和交互逻辑。
功能性测试:根据需求文档,测试软件功能是否按预期工作。
性能测试:评估软件在不同负载下的性能表现,如响应时间、吞吐量等。
后期阶段测试:主要用于软件开发的后期阶段,验证软件是否满足用户需求。
白盒测试:
复杂逻辑和算法测试:针对软件中的复杂逻辑和关键算法,确保逻辑正确性和代码覆盖率。
早期阶段测试:通常在软件开发的早期阶段进行,以便及时发现和修复代码中的错误。
安全性测试:验证软件的安全性要求,确保没有安全漏洞。 - 问题7:除了黑盒测试和白盒测试,还有哪些其他的软件测试方法?
- 问题7解决方案:
除了黑盒测试和白盒测试,软件测试还包含多种其他方法,这些方法可以从不同角度对软件进行全面的测试。
灰盒测试:结合黑盒和白盒测试的特点,既关注外部表现也考虑内部逻辑。
静态测试:不运行程序,仅通过分析代码、结构等来检查程序的正确性。
动态测试:运行程序,检查运行结果与预期结果的差异,并分析性能指标。
此外,从开发过程级别来看,还有以下测试方法:
单元测试:针对软件设计的最小单位进行正确性检验。
集成测试:在单元测试基础上,检查软件单元之间的接口关系。
系统测试:判断整个系统是否符合要求,包括功能、性能等测试。
回归测试:修改代码后重新测试,确认未引入新错误。
冒烟测试:对硬件或组件更改后进行的初步测试,确认基本功能正常。
基于AI的学习