教你如何开发--方法论

偶然(最近这个词用的很多)发现了一篇好文。完全是方法论的东西。也不知道是哪个牛人写的。我觉得这篇文章完全可以指导我们平时的开发工作。

 

原文地址 : http://ee.sjtu.edu.cn:8080/os/lab1.asp

 

 

实验指导书
( ) 实验的目的和要求
    操作系统是一门实践性很强的课程,只有把理论和实践紧密地结合在一起,才能取得较好的学习效果。学生们通过课堂学习或自学,并在完成书本每一章后面的一些习题后,理解了操作系统的基本概念。但仅有这一方面的训练还是很不够的。一个普遍的规律是学生们似乎已掌握了书本内容,也能完成一些基本的习题甚至很轻松地通过了一些测验,但一旦需要编制一个稍为复杂的实用系统软件,哪怕只有近百行的不大的程序,就会碰到很多难以克服的困难,甚至不知从何处下手。即使绞尽了脑汁,花了很多时间才编写出来的程序,在计算机上却怎么也调试不出来。程序中不仅有不少平时不注意的语法错误,更含有一些严重的逻辑错误,改正了一个又暴露出了另一个。好多小时过去了,不少学生还坐在终端前面束手无策。即使勉强调试出了程序,但程序结构性差,效率低,也经不起较为严格的测试。
    上机实验是一种更全面更严格的训练,是学习环节中的一个不可缺少的组成部分。实验对于提高学生用学到的书本知识解决实际问题,培养实际工作所需要的动手能力,对于提高以科学理论和工程上的技术规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性的作用。机器是最为严厉的老师,通过上机实验,学生可以在程序设计方法、上机操作等基本技能和科学的作风方面受到比较系统和严格的训练。
    很多学生认为上机实验就是编写一个程序,上机通一通。有少数学生甚至不作准备,直接在终端前“打草稿”,边运行边修改。这些学生以为按实验步骤规范地做是添了麻烦,做“文章”比编程更吃力。对以往的教学实验中的问题分析表明,规范化的实验步骤不但可以培养科学、正规化的工作方法和作风,为今后设计编制复杂、庞大的应用程序和系统程序打下扎实的基础,即使在现阶段的实验中也能有效地少犯和避免犯大错误,节约上机准备和上机调试时间。
    在工厂中,一个产品的开发需要经过分析、设计、制造、测试等一系列的过程,一个软件开发的步骤与其很相似。因此上机实验要规范化地进行,以保证实验顺利完成。
 
( ) 实验步骤
    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. 整理和完成实验报告
    按照以上步骤写出实验报告,包括问题分析、总体设计、过程设计、数据结构及算法思想、编程、测试步骤、测试数据、对测试中主要问题的解决方法、输出结果。各种文档要求在开发过程中形成,而不能在最后阶段补写(但可誉清)。为了便于他人运行程序,最后还要写出用户使用说明和使用时的注意事项。
    作为实验报告,还应写出通过本次实验所获得的经验、心得、体会、本次实验中存在的问题和尚待改进之处。

你可能感兴趣的:(方法论)