使用说明书

扫一扫分享
发布者:打得过
发布时间:2018-05-24
版权说明:该作品由用户自己创作,作品中涉及到的内容、图片、音乐、字体版权由作品发布者承担。
侵权举报
上一页 下一页
说明书
H5,H5页面制作工具
  • 详尽的使用说明书
  • 维基百科,自由的百科全书
    小黄鸭调试法,又称橡皮鸭调试法、黄鸭除虫法(Rubber Duck Debugging)是可在软件工程中使用的一种调试代码的方法。方法就是在程序的调试、除错或测试过程中,操作人耐心地向小黄鸭解释每一行程序的作用,以此来激发灵感与发现矛盾。此概念是参照于一个故事。故事中程序大师随身携带一只小黄鸭,在调试代码的时候会在桌上放上这只小黄鸭,然后详细地向鸭子解释每行代码。[1]

    许多程序员都有向别人提问及解释编程问题的经历,而目标甚至可能是完全不懂编程的人。而就在解释的过程中,程序员可能就发觉了问题的解决方案。一边阐述代码的意图,一边观察它实际上的意图并做调试,两者间的任何不协调都会变得更明显,使人更容易发现错误所在。[2]如果没有玩具小鸭,操作人也可以向其他任何东西倾诉,比如桌上的盆栽、键盘/鼠标等。
  • 衍生
    该方法流行开来后,许多程序员纷纷效仿,由此诞生了Saber调试法(即使用Saber手办代替小黄鸭),初音调试法(即使用初音未来手办代替小黄鸭)等。例如以下代码
    //#include <iostream>
    //#include <bits/stdc++.h>
    //#define INF 0x3f3f3f3f
    //using namespace std;
    //set<pair<int,int> >s;
    //bool cmp(const pair<int,int>&a,const pair<int,int>&b)
    //{
    // return a.first<b.first;
    //}
    //int main()
    //{
    // for(int i=1;i<=25;i++)
    // s.insert(make_pair(INF,i));
    // pair<int,int>xx;
    // while(s.size()>=5)
    // {
    // vector<pair<int,int> >temp;

  • // for(int i=0;i<5;i++)
    // {
    // temp.push_back(*s.begin());
    // printf("%d ",s.begin()->second);
    // s.erase(s.begin());
    // }
    // printf("\n");
    // fflush(stdout);
    // for(int i=0;i<5;i++)
    // {
    // scanf("%d",&temp[i].first);
    // }
    // sort(temp.begin(),temp.end(),cmp);
    // s.insert(temp[0]);
    // s.insert(temp[1]);
    // xx=temp[2];
    // }
    // vector<pair<int,int> >temp;
    // for(int i=0;i<4;i++)
    // {
  • // temp.push_back(*s.begin());
    // printf("%d ",s.begin()->second);
    // s.erase(s.begin());
    // }
    // printf("%d\n",xx.second);
    // fflush(stdout);
    // temp.push_back(xx);
    // for(int i=0;i<5;i++)
    // {
    // scanf("%d",&temp[i].first);
    // }
    // sort(temp.begin(),temp.end(),cmp);
    // printf("%d %d 0 0 0\n",temp[0].second,temp[1].second);
    // fflush(stdout);
    // return 0;
    //}
    #include <bits/stdc++.h>

  • using namespace std;

    int main()
    {
        int ans1 = 1, ans2 = 2;
        int a[6][6];
        int b[6][6];
        int c[6];
        int cnt = 1;
        map<int, int> m;
     for(int i = 1; i <= 5; i ++)
     {
      for(int j = 1; j <= 5; j ++)
      {
       a[i][j] = cnt++;
       m[a[i][j]] = i;
       //printf("%d%c", a[i][j], j==5?'\n':' ');
      }
      //fflush(stdout);
      //cout<<flush;
      for(int j = 1; j <= 5; j ++)
      {
  •    int x=0; //scanf("%d", &x);
       b[i][x] = a[i][j];
      }
     }

     for(int i = 1; i <= 5; i ++)
     {
      //printf("%d%c", b[i][1], i==5?'\n':' ');
     }
     fflush(stdout);
     cout<<flush;
     for(int i = 1; i <= 5; i ++)
     {
      int x=0; //scanf("%d", &x);
      c[x] = b[i][1];
     }
     //µÚ¶þÂÖ

     set<int> v;
     vector<int> s;
     v.insert(c[1]);
  •  v.insert(c[2]);
     v.insert(b[m[c[1]]][2]);
     v.insert(b[m[c[2]]][2]);
     for(int i = 1; i <= 25; i ++)
     {
      v.insert(i);
      if(v.size() == 5) break;
     }
     set<int> :: iterator it = v.begin();
     while(it != v.end())
     {
      //cout<<*it;
      s.push_back(*it);
      it ++;
      //if(it == v.end()) cout<<endl;
      //else printf(" ");
     }
     fflush(stdout);
     cout<<flush;
  •  for(int i = 1; i <= 5; i ++)
     {
      int x=0;
      //scanf("%d", &x);
      c[x] = s[i-1];
     }
     printf("%c %c %c %c %c %c %c\n", 53,50,48,49,51,49,52);
     //fflush(stdout);
     //cout<<flush;
        return 0;
    }

    很明显,通过小黄鸭调试法可知代码完全正确没有漏洞。
    由此可以看出,小黄鸭调试法的效率非常的高,比起传统的调试方法可以高出30倍甚至以上。
    参考资料
     The Pragmatic Programmer: From Journeyman to Master. Addison Wesley. ISBN 978-0201616224. p. 95, footnote.
     
  • Baker, SJ, The Contribution of the Cardboard Cutout Dog to Software Reliability and Maintainability.