Windows 8开发的幕后故事
fmms 13年前
<p> Windows 8 消费者预览版的发布让世人都有机会体验这款全新的操作系统,那么在其开发的背后,有什么有趣的故事吗?微软近日在官方博客中介绍了 Windows 8 开发团队的两位新成员及 Windows 8 项目的“细枝末节”。</p> <p> Chris Edmonds 和 Mohammad Almalkawi 都是在 Windows 8 即将开始规划时加入了微软开发团队,因此,Windows 8 是他们从头至尾开发完整 Windows 的初次体验,下面通过他们的口述,我们能了解很多 Windows 8 的幕后故事。</p> <p> <strong>你们在 Windows 8 项目中负责哪些工作?</strong></p> <p> <strong>Chris:</strong>我在 Windows 7 正式发布前几个月加入到 Windows 团队。不久之后,我加入了新成立的 Windows 运行时体验团队。运行时体验团队构建了 Windows 运行时 (WinRT)基础架构的方方面面。在 Windows 8 的开发过程中,我有幸参与了 WinRT 多个部分的设计。</p> <p> 在 Windows 8 开发的 M1 阶段,我参与了 WinRT 系统核心模式的定义。我们将整个项目划分为了三个时间段,并根据从最初设计到最终产品的过程,将体系结构和实施划分到这些时间段中。我们必须承担起协调 Windows 8 所涉及各种技术的全部工作。在 M1 阶段,我们设计了事件、对象构建、异步方法和方法重载的模式。为这些基本概念定义坚实的模式非常重要,这样才能保证与 WinRT 进行互操作的每种编程语言能够以自然和熟悉的方式向开发人员呈现这些概念。</p> <p> 在 M2 阶段,我有幸参与了 Metro 风格应用程序的部分开发工作。我负责的具体工作是 Metro 风格应用程序在 WinRT 中的注册,以便它们可以通过合约启动和交互。</p> <p> M3包括大量跨小组的协作,我意识到,对于 Windows 8 这样浩大而复杂的项目来说,这种协作的确至关重要。在本时间段中,我与一个团队合作定义和实施了 Metro 风格应用程序的应用程序模型的核心部分。这项工作可以确保以不同语言编写并在不同 UI 平台上运行的 Metro 风格应用程序具有一致的合约行为和应用程序生命周期。</p> <p> <strong>Mohammad:</strong>我有幸参与了从初始阶段开始的整个 Windows 8 项目。我们划分了三个主要的功能时间段(M1、M2和 M3)来逐步实现 Windows 8 的目标。每个时间段的阶段包括:</p> <p> — 规格和设计阶段。功能人员由研究同一功能的 4 至 5 名开发人员、测试人员和项目经理共同组成,本阶段会产生一系列规格文档。</p> <p> — 接下来是编码阶段,我们会在该阶段实施规格阶段梳理出的功能,并对其进行单元测试和功能测试。</p> <p> — 最后是集成和稳定化阶段,将来自多个团队的不同部分予以集成,并修复缺陷。</p> <p> 在 M1 阶段,我参与了应用程序扩展查找和激活的设计和开发。这一 WinRT 基础架构允许应用程序参与受操作系统支持的合约(例如,搜索和共享),并充当现有 Windows 功能的基础。</p> <p> 在 M2 阶段,我负责实施 Windows 元数据解析功能,这是一个将由 WinRT 工具链生成的元数据与 JavaScript 和 C# 语言投影联系起来的重要 API。</p> <p> 在 M3 阶段,我负责设计和开发命名空间枚举 API,该 API 支持 Chakra JavaScript 引擎将功能映射至 WinRT 命名空间和类型。CLR 也使用此 API 来实施元数据解析,并且 Visual Studio 使用此 API 来支持 WinRT 类型的 Intellisense。</p> <p> <strong>这个项目最让你们感到惊奇的部分是什么?</strong></p> <p> <strong>Chris:</strong>我认为参与 Windows 项目最令我感到惊奇的部分是团队的规模和始终同时开展的活动数量。在开发分配给我的几项功能的过程中,我有幸与团队中的数百名成员进行交流,并梳理出了规范和解决方案。这种工作方式听起来有些紧张(并且最初确实令我有些手忙脚乱),但当我们通过团队交流得出精彩的点子时,总是令我倍感兴奋。我觉得凭借如此有限的人力,就完成了 Windows 这样具有如此众多用户和用途的项目,简直是一项不可思议的成就。</p> <p> <strong>Mohammad:</strong>我觉得在微软工作最令我感到惊奇的就是经常会解决一些实际问题,并有机会从头开始负责一些关键部分的开发。我不但能够获得所需的培训,还从实际工作中受益匪浅。当然,我也并非一个人在黑暗中独自摸索,各种支持渠道、各领域的专家和高级工程师们都会在我需要时伸出援手。</p> <p> <strong>你们必须克服的最大挑战是什么?</strong></p> <p> <strong>Mohammad:</strong>加入团队后不久,我必须着手修改 COM 激活中的陌生代码。这些代码非常基础,许多 Windows 组件都在其基础上构建,因此我必须保证自己进行的更改不会适得其反。</p> <p> 这些代码对于团队中的专家来说可能非常简单明了,但对于我这样的新手来说绝非如此。我必须阅读大量代码,执行单步调试,并编写大量测试案例,这不但能促进我对代码的理解,还能确保我在未破坏原有功能的同时进行了必要的修改。</p> <p> <strong>Windows 8 的规划是如何出炉的?</strong></p> <p> <strong>Chris:</strong>规划 Windows 8 的情形对于团队中的不同成员来说可谓天差地别。作为规划工作的一部分,新成立的运行时体验团队花费了一周的时间来使用各种语言、堆栈、框架和技术来构建应用程序。这是由于 Windows 8 的设计宗旨之一是可通过多种语言编程。这一宗旨的部分目标是为了强迫我们每个人使用自己并不熟悉的语言,以便体验学习曲线。我使用 IronPython 和 XNA 开发了一个 3D 地形生成程序,使用 HTML\JavaScript 开发了一个照片库应用程序,并使用 C++ 通过绘画 GDI 开发了一个简单的 2D 物理引擎。通过这些应用程序构建练习,我们得以向团队介绍构建每个应用程序所获得的经验,包括正面、负面和不堪回首的经验。</p> <p> <strong>哪些方面给你们留下了最深刻的印象?</strong></p> <p> <strong>Mohammad:</strong>我对现有 Windows 工程系统的质量感到印象深刻;它可以同时支持数千名 Windows 软件工程师,并可确保数百万行代码在日常构建和质量检测过程中的健康。自动质量检测包括关键的端到端测试、性能测试、应用程序兼容性测试、静态代码分析和其他有助于快速发现问题的测试,并严格控制其通过正向和逆向集成在分支机构间的传播。</p> <p> <strong>Windows 8 的开发工作目前的重点是?</strong></p> <p> <strong>Mohammad:</strong>性能、性能—除此之外还是性能!</p> <p> 我负责的功能接近软件堆栈底层,并且经常使用,因此性能对于它们来说至关重要。我目前正在重点关注性能分析,以及各种性能改进的原型设计和集成。我们从设计之初就将性能放在首位,因此对于已经写入基础架构的大量代码,我们只需对其性能进行精细调整。</p>