(一) 实验的目的和要求
操作系统是一门实践性很强的课程,只有把理论和实践紧密地结合在一起,才能取得较好的学习效果。学生们通过课堂学习或自学,并在完成书本每一章后面的一些习题后,理解了操作系统的基本概念。但仅有这一方面的训练还是很不够的。一个普遍的规律是学生们似乎已掌握了书本内容,也能完成一些基本的习题甚至很轻松地通过了一些测验,但一旦需要编制一个稍为复杂的实用系统软件,哪怕只有近百行的不大的程序,就会碰到很多难以克服的困难,甚至不知从何处下手。即使绞尽了脑汁,花了很多时间才编写出来的程序,在计算机上却怎么也调试不出来。程序中不仅有不少平时不注意的语法错误,更含有一些严重的逻辑错误,改正了一个又暴露出了另一个。好多小时过去了,不少学生还坐在终端前面束手无策。即使勉强调试出了程序,但程序结构性差,效率低,也经不起较为严格的测试。
上机实验是一种更全面更严格的训练,是学习环节中的一个不可缺少的组成部分。实验对于提高学生用学到的书本知识解决实际问题,培养实际工作所需要的动手能力,对于提高以科学理论和工程上的技术规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性的作用。机器是最为严厉的老师,通过上机实验,学生可以在程序设计方法、上机操作等基本技能和科学的作风方面受到比较系统和严格的训练。
很多学生认为上机实验就是编写一个程序,上机通一通。有少数学生甚至不作准备,直接在终端前“打草稿”,边运行边修改。这些学生以为按实验步骤规范地做是添了麻烦,做“文章”比编程更吃力。对以往的教学实验中的问题分析表明,规范化的实验步骤不但可以培养科学、正规化的工作方法和作风,为今后设计编制复杂、庞大的应用程序和系统程序打下扎实的基础,即使在现阶段的实验中也能有效地少犯和避免犯大错误,节约上机准备和上机调试时间。
在工厂中,一个产品的开发需要经过分析、设计、制造、测试等一系列的过程,一个软件开发的步骤与其很相似。因此上机实验要规范化地进行,以保证实验顺利完成。
(二) 实验步骤
1. 问题分析
在正式的程序设计之前首先要分析和透彻地理解问题本身,用结构化的分析方法分析问题的结构。要克服急于编程的欲望,开始时必须保证有一段时间集中精力分析软件应当做什么,而不是如何来做。根据问题的性质和要求构造一个满足问题要求和限制的系统。
结构化分析的基本方法就是“分解”和“抽象”。把一个大问题分割成若干个小问题,然后分别解决,这就是“分解”。先考虑问题的本质和功能,暂把问题的细节略去,以后再考虑实现的细节,这就是“抽象”。自顶向下逐层分解的分析体现了分解和抽象的原则,使人们不至于一下子陷入细节,这样有助于正确地理解问题,避免走“冤枉路”。
在结构化分析阶段,学生应先画出问题流程图,导出系统的逻辑模型,用约定的图型和记号,对问题进行逻辑上的模拟和描述。
2. 结构化设计
在导出了问题流程以后,就可以进行系统结构设计,即把问题模型转化为系统结构模型。这个阶段的工作是将系统划分成一个个模块,选择数据结构,定义在其上进行的操作,利用这些操作便可以实现系统所要求的功能。每一个操作是一个过程或函数,其对应于一个模块,以完成系统的子功能。所有模块应按从上向下调用的原则构成层次型的结构图,并与问题的逻辑结构相对应。
在结构化设计过程中要列出过程和函数间的调用关系,过程的接口部分说明,模块之间的输入输出方式,模块之间传递什么数据类型,求精所得出的模块结构图。
用结构化的自然语言描述模块所要做的工作和输入输出。
在把系统划分成模块时,要考虑以下几个因素: 模块内部数据联系度要大,模块问的联系度要低,模块尽量通过少数参数联系,模块间的共享信息应尽量少。
3. 过程设计
即确定每个模块的内部特征,即怎样做的问题。按照在前一阶段规定的逻辑模块设计程序和控制结构,使程序结构清晰、流畅。
按照操作的要求确定数据结构及其算法。
使用顺序,选择和循环三种基本的单入口和单出口的控制结构描述过程的内部流程,使程序的基本结构与问题的流图结构保持一致,使程序的静态结构与动态执行保持一致,使过程流图易读、易编码、易修改。
过程设计主要有图形描述方法和设计语言描述方法两种,前者有流程图、 N-S盒图和PAD(程序分析图)。如采用C语言来进行程序设计,在过程设计阶段可采用三个基本的控制结构和自然语言来描述程序流程,用这种方法进行过程设计,其结构与最终的程序接近,很容易进一步细化,编写正式的语言程序。
4. 结构化编程
在完成了过程设计之后,就可以着手编写C程序了。在编程时除了要求源程序的语法正确、程序逻辑无误,还要求程序有较好的可读性、可靠性、健壮性、可测试性和可修改性。
结构化程序设计支持自顶向下、逐步求精的思想,采用顺序、选择和重复三种单入口、单出口基本控制语句和它们的嵌套组合来构成具有复杂层次的结构化程序,用这种方法编制出来的程序具有较好的可读性、可靠性和可测试性。结构化编程方法严格限制goto语句的使用。
(1) 结构化编程要求程序员有良好的程序设计风格,程序结构友好,层次分明,思想清晰。
(2) 采用良好的程序书写文体和格式,程序行按程序的层次结构合理安排缩格,使其按锯齿形排列。程序中插入必要的空行,使逻辑结构更加清晰、易读。
(3) 在程序中加上必要的注释。注释有序言性和功能性两类。注释要包含程序模块的功能、界面接口及进入及离开模块的参数的说明、调用语句的格式。对程序中的数据结构及重要变量和一些主要语句要加以说明。一般讲注释的总量约占全部源程序的三分之一到一半以上。注释要在开发过程中形成,而不能在上机完成后补写。
(5) 选用有意义的常量、类型和变量标识符,并使这些标识符按一定的规律排列,尽量避免采用容易混淆的英文字母和数字字符作为变量标识符,如英文字母o和数字0、英文字母I、l和数字1等。
(6) 语句代码要简单,直接,清晰,不要追求奇特怪巧的“技术”。
(7) 避免过多的循环或条件嵌套,避免复杂的条件测试。一般情况下逻辑运算“非”总令人头痛一些。在多条件测试时,使用括号可增加条件测试的清晰性和可靠性。
(8) 合理的对用户友好的输入输出格式。交互式I/O中,输入要有提示,并采用自由格式。输出语句要带有输出值的说明,格式要整齐,美观。
(9) 不要修补结构不好的程序,要忍痛割爱,从新编写。
5. 上机调试
一个程序输入后,经过排除了语法错误,能初步地正常运行,并非大功告成了,还要对程序进行一系列的测试。测试是软件开发中很重要的环节,学生通过上机要提高程序调试技术。测试方法有两大类,即黑盒法和白盒法。
采用黑盒法,测试者不关心程序内部是如何做的,只对程序的接口进行测试,检查程序是否能得到它的“功能说明”所预期的结果。在进行黑盒法测试时,将输入数据按“定义域”分成若干个等价类,在定义域内和定义域外各设计一组有代表性的数据对程序的行为进行测试。程序往往在处理边缘情况时最易犯错误,故检查边缘情况的测试最能暴露出程序中隐含的问题,测试效率也较高。一程序如在各个定义域之中和之外的边界处运行正常的话,一般在其它部分也能正常地运行。
当采用黑盒法测试时发现了错误,根据程序的内部逻辑,凭经验和直觉,用“猜错”技巧对测试方案进行选择和推断,对一些认为是可疑的、易错的路径进行测试。白盒法就是针对程序的各种判断和分支语句设计多组输入数据,对程序的执行进行跟踪,尽量覆盖程序的逻辑。测试时可在怀疑的部分插上标准的打印语句以显示程序的动态行为; 也可利用调试、排错软件帮助定位错误点,以便修改、排除。
6. 整理和完成实验报告
按照以上步骤写出实验报告,包括问题分析、总体设计、过程设计、数据结构及算法思想、编程、测试步骤、测试数据、对测试中主要问题的解决方法、输出结果。各种文档要求在开发过程中形成,而不能在最后阶段补写(但可誉清)。为了便于他人运行程序,最后还要写出用户使用说明和使用时的注意事项。
作为实验报告,还应写出通过本次实验所获得的经验、心得、体会、本次实验中存在的问题和尚待改进之处。
|
相关推荐
《用户画像-方法论与工程化解决方案》是一本深度探讨用户画像系统构建的书籍,它从技术、产品和运营三个维度全面阐述了从无到有建立用户画像系统的关键技术和策略。书中涵盖了用户画像的理论体系、实操步骤、场景...
首先,Oracle实施方法论的核心是其标准化的流程,包括需求分析、系统设计、开发、测试、数据迁移、用户培训和上线支持等阶段。在需求分析阶段,项目团队会深入理解业务流程,识别关键性能指标,并确定系统应如何满足...
《网上智能评教系统开发详解》 随着信息技术的飞速发展,教育行业的信息化进程也在不断推进。网上智能评教系统作为教育评价体系的重要组成部分,它利用先进的计算机技术和网络技术,为教师教学质量评估提供了便捷、...
### 软件工程实践与敏捷方法论教程 #### 第1章:软件工程概述 **软件工程定义**:软件工程是一门系统化的学科,它强调使用规范化、可靠化且高效的方法来开发和维护软件,目的是为了提升软件产品的质量和开发效率。...
在《C语言中级教程-9 再论函数》这篇教程中,作者深入探讨了C语言中的函数概念及其重要性,并提供了丰富的示例来帮助读者更好地理解和掌握函数的使用方法。本文将根据给定的文件内容总结关键知识点,旨在加深对C语言...
### Linux学习方法论 在数字化转型的浪潮下,Linux作为一款免费且开源的操作系统,在服务器领域占据了主导地位。本文将围绕“Linux学习方法论”这一主题展开,详细探讨如何高效地学习Linux,包括选择合适的Linux...
在硬件开发领域,"paper-ma开发笔记"通常指的是基于Paper(论文)的研究和实践,Ma可能是指一种特定的硬件架构或设计方法。这个压缩包文件"ruc_master_paper-master (22).zip"可能包含了一个关于硬件开发的项目或者...
BEM是一种流行的前端开发方法论,它有助于创建可维护、可复用和模块化的CSS代码。Laravel的Blade模板引擎则提供了一种高效的视图层解决方案,使得开发者能够轻松地组织和控制视图组件。 首先,了解BEM的基本概念至...
本资源是一个基于jspm开发的烘焙爱好者网站的Java毕业设计项目,包括完整的源代码、论文以及详细的说明文档。该资源为烘焙爱好者们提供了一个互动交流、分享烘焙经验、展示烘焙成果的平台。 项目采用jspm作为模块...
直方图均衡化是一种经典的对比度增强方法,它通过重新分布图像的灰度级,使图像的灰度直方图更均匀,从而扩大图像的动态范围,提高对比度。然而,传统的直方图均衡化可能会导致图像整体亮度发生改变,这在某些应用...
总之,《Visual C# 2010与UML开发实战-范例教程》是一份全面而实用的教学资料,它不仅教授编程语言,还涵盖了软件工程的重要方法论。通过学习,读者可以提高软件开发的专业素养,为职业生涯打下坚实的基础。
macOS 应用开发基础教程,对 macOS 平台中应用开发的 AppKit 系统...最后介绍了几个小型项目的 demo 开发过程关键代码和开发思路,力求让读者从基础知识,方法论,项目实践多纬度去理解和掌握 macOS 平台的应用开发。
"matlab开发-DataDieboldLizip"是一个Matlab开发项目,专注于Diebold-Li模型,该模型是SSMs的一个实例,特别适用于利率期限结构建模。 Diebold-Li模型是由Chris Diebold和Yung Chul Li在2006年提出的,旨在改进原有...
2. **算法实现**:为了实现这一方法,研究人员开发了一套算法程序。这套程序可以根据输入的货物参数自动计算出其余三个点的坐标,并确保这些点之间的距离满足码垛的要求。 3. **系统集成**:将上述算法集成到现有...
通过这个教程,你不仅能够掌握Log分析的基本技巧,还能了解到如何在实际开发中运用这些知识来优化你的毕业设计。记住,良好的日志记录习惯对于任何开发者来说都是一个宝贵的资产,它能够让你在面对复杂问题时更加...
- **架构框架**:如SOA(面向服务架构)、TOGAF(开放组架构框架)等,提供了一套结构化的架构开发方法论。 6. **技术趋势** - **云计算**:介绍了云计算对系统架构的影响,如IaaS、PaaS、SaaS模式及其架构设计。...
3. **ScanResult**:当你调用`WifiManager`的`startScan()`方法进行Wi-Fi扫描后,系统会返回一个`ScanResult`列表,包含所有检测到的Wi-Fi接入点的信息,如SSID(网络名称)、BSSID(接入点的MAC地址)和信号强度等...
**3.1 驱动开发的方法论** - 驱动开发是Linux内核学习的一个重要方面,涉及硬件交互和底层编程技术。 - 本节提供了驱动开发的基本步骤和技巧。 **3.2 设备模型(上/下)** - 设备模型是Linux内核中用于管理各种硬件...
玩转 Linux 系统的方法论 Linux 桌面系统因其开源、开放源代码、强大的稳定性和高效性能,在服务器领域占据主导地位,但在桌面用户中,其市场占有率相对较低。这篇指南旨在帮助对Linux桌面感兴趣的用户理解和掌握...