谁撰写微软支持文章?它们是否总是可信的?

7

以下是一个关于IT技术的文章示例:

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

我认为这些文章是由微软公司的员工编写的,而且这些文章中的代码始终是稳定可靠的,不会包含任何恶意代码。我只是想确保我能向我的老板解释这是一个可以从中复制代码的安全来源(我被告知不要从互联网上复制代码,但这似乎是一个安全的来源)。


9
如果你能理解示例代码,那么你应该能够确定其中是否有任何“恶意”的东西,对吧?当然,你不应该在项目中添加任何你不理解的内容。 - Carl Norum
当然可以,但我是一个懒惰的程序员。如果这些文章能够百分之百地信任,我会测试功能,而不会花时间去理解每一行代码。我只是试图为自己找条捷径(尽管以后可能会因为不完全理解所实现的代码而吃亏)。 - sooprise
2
无论是谁编写的代码,都不能百分之百地信任它。你必须验证每一行生产代码。不理解代码并不会让你走捷径。此外,你所做的可能不符合适用法律的规定(例如,SOX合规性可能会阻止你这样做)。 - corsiKa
2
@glowcoder - 我肯定不会信任 Knuth 的代码。他甚至不测试自己的代码,只是证明它是正确的。 :D - Jeffrey L Whitledge
前提很荒谬,有成千上万的行业人士会对恶意微软代码大加挞伐。他们希望如此。 - Hans Passant
显示剩余2条评论
8个回答

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;
}

现在,这里有两个问题:
- 为什么没有排序顺序的比较器被认为是有效的?我认为这应该是一个构造函数参数,在构造点进行验证。 - 您不应该仅仅取反一个比较结果来执行“反向比较”。如果第一个比较的结果是int.MinValue,则会导致错误,因为 -int.MinValue == int.MinValue。更好的方法是反转用于执行原始比较的参数。
对于这段代码,我还有其他一些问题,但是这两个足以证明我的观点。
我也非常同意其他答案,包括: - 检查您想要使用的任何代码的版权/许可等信息 - 确保您了解您想要使用的任何内容

他们并不是恶意的,但他们同意代码有时候可能就是错的。C#代码似乎还好,但Visual C++和MFC代码在某些地方可能会非常糟糕。要保持谨慎,并始终验证他们展示的代码是否符合您的要求。 - Justin

5
你的老板不会介意你把代码复制到一个测试项目中,用来测试和理解代码。然后你可以利用所学写出生产代码。虽然我认为除了微软以外没有人知道编写这些支持文章的人的名字,但它们来自于与你的工具链相同的供应商。因此,如果你不信任支持文章,那么你也不能信任购买的工具。

4

微软知识库文章展示了安全(指非恶意但不一定安全)的代码,但通常示例提供的是最基本的用例。很可能你需要稍微调整代码才能让它按照你的意愿工作。

你还应该注意文章的日期。例如,你链接的文章已经有将近三年的历史了。现在肯定有更好的处理方式。


3

请注意,文章中的大多数代码都是为了帮助您理解概念而存在的。它们并不是“生产就绪”的。相反,请学习这些概念,并实现您自己的代码。


+1. 微软还有一个名为 http://1code.codeplex.com/ 的项目,旨在提供更多“生产就绪”的示例。 - Alexei Levenkov

2

你是否被告知不要从互联网上复制代码,因为会涉及版权问题?如果是这样,那么你不必担心这个微软代码。

我建议你不要使用你不理解的任何代码。如果你无法确定代码是否恶意,请勿使用。


谢谢提醒关于是否侵犯任何权利使用微软代码的问题,我也在思考这个问题。+1 - sooprise

1

MSDN和kb支持文章是由MS员工编写的,他们是所给产品的UX团队(用户体验)的一部分。这些人通常具有技术写作背景,但不一定是开发人员(尽管有些人是)。UX团队通常会与产品的开发人员合作,以确保其代码示例正确。然而,在我的经验中,这种合作是典型的MS开发人员最低优先级之一,可能会被忽视,因此有时会导致糟糕的代码出现。

话虽如此,我完全同意Carl Norum的评论。复制您不理解的代码是自担风险的。确保您了解您放置在产品中的任何代码!


0

我总是觉得微软的文章质量非常高(可惜他们的产品不是)。

但是,总有一些欺诈网站的危险。


你一定已经习惯了糟糕的代码。微软代码算不上我见过最差的,但也远远谈不上“最高质量”。它几乎总是达到展示概念的最低要求,而且几乎总是故意排除错误检查和最基本的数据清理。 - cHao
我在描述文档,这与代码不同。然而,为了传达复杂的想法,很多时候将例子“简化”是有益的。这是一个很好的沟通方式。 - Steve Wellens
可能会出现这种情况,但你知道人们会尝试将代码原封不动地复制到他们的项目中。 (证据:就是这个问题。)需要有一个非常明显的警告,指出该代码通常不代表最佳实践(特别是关于安全性和错误检查),并且不应在未经修改的情况下使用。 - cHao
每个代码片段前都加上免责声明,说明它仅供教育使用而非生产使用?我不在意。 - Steve Wellens
我也是这样。但显然有些人只是复制/粘贴代码并更改一些变量。虽然这很糟糕,但可以理解——他们相信微软会正确使用自己的框架。即使像“// TODO:添加一些错误检查!”这样的注释可能足以让人们知道代码不完整,并且会在许多IDE的任务列表中显示,以提醒他们修复它。 - cHao

0

请说明您仔细阅读了文章以理解其中的信息,并且只复制您理解的代码。

如果您不理解代码,即使代码是正确的,它也可能无法完成您实际需要完成的任务,因此您的程序将是不正确的。

如果有您不理解的部分,您还将难以调试和维护代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接