2011-04-07 24 views
7

這是我說的文章的類型的例子:誰寫微軟支持文章?他們總能被信任嗎?

http://support.microsoft.com/kb/319401

我認爲這些文章是由誰爲微軟工作,並在文章中的代碼將永遠是堅如磐石的人寫的並且從不包含任何惡意代碼。我只是想確保我可以向我的老闆解釋,這是一個複製代碼的好地方(我被告知永遠不要從互聯網複製代碼,但這似乎是一個安全的來源)。

+9

如果你能理解的示例代碼,你應該能夠確定是否有任何「惡意」的,不是嗎?你當然不應該添加任何你不明白的東西給你的項目。 – 2011-04-07 15:55:45

+0

絕對,但我是一個懶惰的程序員。如果這些文章可以在100%的時間內被信任,我會測試功能,而不是花時間去理解每一行代碼。我只是想爲自己做一個快捷方式(儘管不完全理解我實現的代碼可能會在後來讓我陷入困境)。 – sooprise 2011-04-07 15:58:54

+2

沒有什麼可以信任的,0%的時間。無論Donald Knuth如何寫作,您都必須驗證每一行產品代碼。由於不理解代碼,你根本就沒有做出快捷方式。此外,你在做什麼可能不適用的法律完全符合(例如SOX合規可能會阻止您這樣做。) – corsiKa 2011-04-07 16:02:55

回答

8

我會相信他們不是惡意的,但他們並不總是好的代碼。 (MSDN示例有時非常糟糕。)

例如,這裏是你給的樣品中的一些代碼:

compareResult = ObjectCompare.Compare 
    (listviewX.SubItems[ColumnToSort].Text, 
    listviewY.SubItems[ColumnToSort].Text); 

// Calculate correct return value based on object comparison 
if (OrderOfSort == SortOrder.Ascending) 
{ 
    // Ascending sort is selected, return normal result of compare operation 
    return compareResult; 
} 
else if (OrderOfSort == SortOrder.Descending) 
{ 
    // Descending sort is selected, return negative result of compare operation 
    return (-compareResult); 
} 
else 
{ 
    // Return '0' to indicate they are equal 
    return 0; 
} 

現在,這裏有兩個問題:

  • 爲什麼認爲有效有一個比較器沒有排序?這應該是一個構造函數參數,在構建IMO時進行驗證。
  • 你應該只是否定一個比較的結果來執行「反向比較」。如果第一次比較的結果是int.MinValue - 因爲-int.MinValue == int.MinValue會中斷。反轉用於執行原始比較的參數會更好。

還有其他的事情,我想在此代碼再跟,但是這兩個應該是足以讓我的觀點。

我衷心地與其他的答案也同意,在以下方面: - 檢查你想使用 任何代碼的版權/許可證等 - 確保您瞭解任何你想使用

+0

他們不是惡意的,但同意代碼有時可能只是平坦的錯誤。 C#代碼似乎沒問題,但Visual C++和MFC代碼在某些地方可能是徹頭徹尾的糟糕。拿一點鹽,總是驗證他們展示的代碼是否符合你的要求。 – Justin 2011-04-07 16:29:30

2

您是否因爲版權問題被告知不要複製互聯網上的代碼?如果是這樣,那麼你不必擔心這個微軟代碼。

我會建議你不要使用任何你不明白的代碼。如果您不能說代碼是否是惡意的,請不要使用它。

+0

感謝您提供關於是否侵犯了使用Microsoft代碼的權利的說明,我也很想知道。 +1 – sooprise 2011-04-07 16:02:20

4

Microsoft知識庫文章顯示安全(如在非惡意但不一定安全的情況下)代碼,但通常該示例提供了可能的最基本的用例。有一個很好的機會,你將不得不調整一下代碼,使其按照你想要的方式工作。

您還應該注意文章的日期。例如,您鏈接的文章已近三年之久。現在肯定有更好的方法來處理這種情況。

0

我一直髮現微軟的文章是最高質量的(可悲的不是他們的產品)。

但是,欺騙網站總是存在危險。

+0

你必須習慣於可怕的代碼。 MS代碼並不是我見過的最差的,但它遠沒有達到「最高質量」。幾乎總是最低限度地展示一個概念,幾乎總是故意排除錯誤檢查,甚至是數據最基本的清理。 – cHao 2011-04-08 10:50:03

+0

我正在描述與代碼不同的文檔。但是,很多時候要傳達一個複雜的想法,「愚弄」一個例子是有益的。這是溝通的好方法。 – 2011-04-09 02:54:46

+0

它可能是,但你知道人們會試着將代碼原樣並將其複製到他們的項目中。 (證據:*這個問題*。)需要有一個非常明顯的警告,即代碼通常不代表最佳實踐(尤其是安全和錯誤檢查),不應在未經修改的情況下使用。 – cHao 2011-04-09 08:06:18

5

如果您只將代碼複製到您用於測試和理解代碼的測試項目中,您的老闆可能不會介意。然後,您可以使用您學過的知識編寫生產代碼。

儘管我不認爲微軟以外的任何人都知道編寫這些支持文章的人的姓名,但他們來自工具鏈所在的同一供應商,所以如果您不信任支持文章,那麼你不能相信你買的工具。

0

說明您仔細閱讀文章以理解其中的信息,並且只複製您理解的代碼。

如果你不明白代碼,那麼即使代碼是正確的,它可能不會做你真正需要做的事情,因此你的程序將是不正確的。

如果有不明白的部分,您也將很難調試和維護代碼。

3

請注意,文章中的大部分代碼都可以幫助您理解這些概念。他們不是「生產準備」。學習這些概念,並實現自己的。

+0

+1。還有微軟的http://1code.codeplex.com/項目試圖提供更多的「生產準備」樣本。 – 2011-04-07 16:52:22

1

MSDN而kb支持文章由作爲特定產品UX團隊(用戶體驗)一部分的MS員工編寫。這些人通常具有技術寫作背景,但不一定是開發人員(儘管有些人)。 UX團隊與產品開發人員合作以確保其代碼示例是正確的,這是非常常見的。然而,根據我的經驗,這種合作是典型的MS開發人員的最低優先級之一,可以忽略,因此有時會導致糟糕的代碼泄漏。

隨着中說,我完全卡爾Norum時的評論表示贊同。複製您不明白的代碼需要您自擔風險。確保您瞭解您在產品中放置的任何代碼!