使用說明書 使用 說明書 說明 掃一掃分享 立即制作 發(fā)布者:打得過 發(fā)布時(shí)間:2018-05-24 版權(quán)說明:該作品由用戶自己創(chuàng)作,作品中涉及到的內(nèi)容、圖片、音樂、字體版權(quán)由作品發(fā)布者承擔(dān)。 侵權(quán)舉報(bào) 說明書H5,H5頁面制作工具詳盡的使用說明書維基百科,自由的百科全書小黃鴨調(diào)試法,又稱橡皮鴨調(diào)試法、黃鴨除蟲法(Rubber Duck Debugging)是可在軟件工程中使用的一種調(diào)試代碼的方法。方法就是在程序的調(diào)試、除錯(cuò)或測(cè)試過程中,操作人耐心地向小黃鴨解釋每一行程序的作用,以此來激發(fā)靈感與發(fā)現(xiàn)矛盾。此概念是參照于一個(gè)故事。故事中程序大師隨身攜帶一只小黃鴨,在調(diào)試代碼的時(shí)候會(huì)在桌上放上這只小黃鴨,然后詳細(xì)地向鴨子解釋每行代碼。[1]許多程序員都有向別人提問及解釋編程問題的經(jīng)歷,而目標(biāo)甚至可能是完全不懂編程的人。而就在解釋的過程中,程序員可能就發(fā)覺了問題的解決方案。一邊闡述代碼的意圖,一邊觀察它實(shí)際上的意圖并做調(diào)試,兩者間的任何不協(xié)調(diào)都會(huì)變得更明顯,使人更容易發(fā)現(xiàn)錯(cuò)誤所在。[2]如果沒有玩具小鴨,操作人也可以向其他任何東西傾訴,比如桌上的盆栽、鍵盤/鼠標(biāo)等。衍生該方法流行開來后,許多程序員紛紛效仿,由此誕生了Saber調(diào)試法(即使用Saber手辦代替小黃鴨),初音調(diào)試法(即使用初音未來手辦代替小黃鴨)等。例如以下代碼//#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]; } //μú?t?? 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;}很明顯,通過小黃鴨調(diào)試法可知代碼完全正確沒有漏洞。由此可以看出,小黃鴨調(diào)試法的效率非常的高,比起傳統(tǒng)的調(diào)試方法可以高出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.