敏捷界面重构 — initial idea
很多人都觉得界面的事情是细枝末节,等功能做好了,找个时间一起清理一下就好,不会占用太多工夫。很多人也都是这样做的。
这里说的界面开发是指系统的交互设计和界面可用性及易用性设计,也包括CSS的界面布局、颜色、字体等基本的视觉元素。这些问题的重要性不用多谈。
我在项目中期加入过几个项目,这时候最令人头疼也最令人兴奋的莫过于在开发中期对于界面和UI进行变更了。一个项目在初期如果没有做良好的界面设计,想要在中间来进行大的变更简直是噩梦一般。在一个敏捷团队中,做这样的事情尤其困难。
敏捷开发中的一个实践,是需要客户的协作和参与,及时由客户认可做完的需求以及由客户决定下一步的开发。这种客户享有决定权能够使开发变得更顺畅,客户关系变得更融洽,是一个很好的实践。
但是,这种实践给界面的改进带来很大的麻烦:如果在项目中期打算进行界面的变更,自然要写出很多跟界面相关的需求,而客户按照需求的价值决定优先 级,他们有时候不理解这样的界面改进如何带来价值,为什么改善一些文字描述和交互方法还要占用开发时间,他们更希望在有限的时间内增加更多的功能和修复更 多的BUG。这时候,这些界面调整的优先级就被排的很低,在几个开发周期内都没有得到采纳。
我们先后尝试了几种方法来改进这个过程,例如给客户培训交互设计和可用性知识;将开发人员分为两组,其中一组专职负责界面改进;或者将界面改进需求单独分成一组,要求客户每个迭代从其中选择一部分等等。但这些办法都不是很理想,没有达到预期效果。
事后总结原因,觉得最大的原因还是在于:客户不是用户。他们虽然负责对项目功能验收,但他们并不最终使用系统。系统使用上的问题不是他们最关心的。他们需要得到投资回报,因此选择了回报更快的功能开发。从这方面看,客户的选择是无可厚非的。
理想的解决方案应当是在一开始就对界面及UI进行控制和把握,并进行持续的度量和改进,或者称为:界面重构。将界面重构和代码重构等同到同样地位,在开发过程中持续随时的进行改进。
我们都知道,代码重构是在不改变代码行为的基础上,改变其内部的结构。通过一系列小的步骤进行重新构造,系统不会因为这些小步骤的改变而停止运转, 仍然会保持顺利正常的运行。重构的结果是一套良好可读的代码,它不仅能够对我们扩展功能有帮助,也是我们适应变化的基本手段之一。
我们将其类比到界面的开发过程中:我们需要在不改变界面功能的情况下,通过一系列细小的步骤,来改变界面的交互行为和可用性。最终结果,不仅仅是一套良好的界面,也是保证我们扩展新的功能和适应变化的基础。
重构的一个要点是测试。测试可以保证重构的正确。而界面开发的过程中,测试工具的缺乏导致我们不得不采用其他的方式来保证功能的正确。一种可行的办 法是维护一个界面原型,纸质或电子形式均可。在不停地开发过程中,不断的维护这个原型,使之先于实际实现被用户感知和体验,提前获得用户的反馈和客户的认 可,并将原型用于指导团队的开发。这种不断的用户体验和用户测试过程,可以在一定程度上保证界面重构的正确性。BA阐述需求或QA进行验收测试的时候,也 不妨考虑使用界面原型作为一个验收条件来展现给开发者。
重构的另一个要点是要经常不断的进行,每当写新代码之前,先进行一点重构,使旧的代码更好阅读。界面重构也应该是这样。对每一个开发完成的需求,提 高界面验收的标准。不仅仅是完成功能就可以,还需要达到一定程度的可用性和可维护性要求。例如必须遵循提前制定的UI Guideline等等。避免因为界面开发的涣散导致的破窗户,这种疏于整理的小细节可能最终成为最头疼的问题。
比如,我们在开发的过程中,以前只以60分作为界面的验收标准,等积累一段时间后再批量修改界面一次,但可能这次修改只能达到80分。现在我们需要 改为以80作为验收标准后,在开发的过程中多花点时间来重构一点点,一直保持80的水平。这样如果我们需要进行更大的改进,可能很容易就能改到90或 100分,从而达到我们最终的目标。
由于开发团队的人员多数不太擅长界面的知识,并且界面的测试和度量工具缺乏所致,界面的持续改进在项目中较难做的很好。这些实践又要求BA或QA能 够有相应的交互设计能力和可用性工程的经验,也限制了其在项目中的实践。但这些确是在一个项目中长期被忽视地方,应当进行一些加强和发展。
总而言之,敏捷过程和界面设计并不是矛盾的,将敏捷的思想应用于界面开发和交互设计的过程中,我们可以获得更多更广泛的想法。
4月23日,和Erik谈 了谈这个想法,他也认同这类做法,但觉得由于目前没有一个显然的Vision,或者说,不像Code Refactoring那样有良好的OO设计准则和可读性在前方可以到达,这样的UI重构的准则不是很明显。原因可能还是由于Developer大多缺乏 这方面的Sense。路还很长。
分享到:
相关推荐
游戏采用Java语言开发,运行于Windows平台,旨在提高用户的数学计算能力和思维敏捷度。游戏设有多种难度级别,并包含积分、排名、进度控制等功能。 【标签】: 设计模式、重构、游戏开发、Java 【部分内容】: 提到...
4. **支持敏捷开发**:重构是敏捷开发实践的重要组成部分之一,它能够帮助团队快速响应需求变化。 #### 三、重构的原则与技巧 1. **小步快跑**:每次只修改一小部分代码,避免一次性做大量的更改,这样可以减少...
将不同的系统功能(如数据访问、用户界面、业务逻辑)分离到不同的层,有助于提高系统的可维护性和扩展性。本章介绍了分层架构的基本原则,以及如何通过合理划分各层的职责,来构建更加健壮和灵活的软件系统。 ### ...
面向对象设计的五个核心原则,即SRP(单一职责原则)、OCP(开放封闭原则)、LSP(里氏替换原则)、DIP(依赖倒置原则)和ISP(接口隔离原则),提供了指导软件设计和重构的基本准则,旨在提高代码质量和维护性。 #### 极限...
本文将围绕敏捷开发流程中的关键环节——提升代码质量的五个步骤展开讨论,即统一编码规范、静态代码分析、单元测试、持续集成及代码评审与重构,并介绍相关工具和方法的应用。 #### 一、统一编码规范 统一编码...
12.5 ATM用户界面的例子 12.6 结论 参考文献 第Ⅲ部分 薪水支付案例研究 第十三章 COMMAND模式和ACTIVE OBJECT模式 第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托 第十五章 FACADE模式和MEDIATOR模式 第...
结合解释型语言的动态特性、模型驱动技术和分层重构的思想,提出了企业信息系统基于动态解释的多维重构技术,实现界面、过程和数据的动态重构以支持企业业务的柔性调整和敏捷实施。在典型轻纺企业的实际应用表明,该...
现状分析涵盖了承载业务、系统架构和网络配置三个方面,详细列举了当前系统存在的问题和局限性,如系统性能瓶颈、数据整合困难和用户界面不友好等,这些都是重构的重要驱动力。 建设的必要性和意义在于,通过重构,...
- **IDE插件**:提供方便的重构操作界面。 - **在线工具**:适用于远程协作或特定场景下的代码重构。 #### 第三章:代码性能优化方法 **代码性能优化概述** 代码性能优化涉及减少资源消耗、提高代码执行效率等...
4. **重构**:为了保持代码的可读性和可维护性,敏捷开发强调重构。在俄罗斯方块游戏中,这可能包括优化方块生成算法、简化碰撞检测逻辑等。 5. **测试驱动开发(TDD)**:遵循TDD原则,先编写测试用例,然后编写满足...
通过对以上知识点的详细阐述,可以看出火车票订票系统的重构不仅仅是为了满足当前的业务需求,更是为了构建一个可持续发展、易于维护且能够应对未来挑战的系统。在整个开发过程中,需要综合考虑技术选型、功能设计、...
12.5 ATM用户界面的例子 12.6 结论 参考文献 第Ⅲ部分 薪水支付案例研究 第十三章 COMMAND模式和ACTIVE OBJECT模式 第十四章 TEMPLATE METHOD模式和STRATEGY模式:继承与委托 第十五章 FACADE模式和MEDIATOR模式 第...
第一部分 敏捷开发 第1章 敏捷实践 第2章 极限编程概述 第3章 计划 第4章 测试 第5章 重构 第6章 一次编程实践 第二部分 敏捷设计 第7章 什么是敏捷设计 第8章 SRP:单一职责原则 第9章 OCP:开放-封闭原则 第10章 ...
- **数据库重构**:Rails支持在开发过程中灵活地修改数据库结构,这在敏捷开发中尤为重要,因为需求的变化可能会导致数据模型的调整。 - **代码生成器**:Rails提供了强大的代码生成工具,帮助开发者快速搭建起...
- 包括算法设计、界面设计等。 **设计方法:** - **结构化设计:** - 基于模块化的思想,将复杂问题分解成若干个较小的部分。 - **面向对象设计:** - 强调对象的概念,利用封装、继承、多态等机制提高软件的可...