Get the 1,000- Foot View

?

Get the 1,000- Foot View

Erik Doernenburg

AS ARCHiTECTS, WE WAnT To KnoW how good the software is that we are developing. Its quality has an obvious external aspect—the software should be of value to its users—but there is also a more elusive internal aspect to quality, having to do with the clarity of the design, the ease with which we can under- stand, maintain, and extend the software. When pressed for a definition, this is where we usually end up saying “I know it when I see it.” But how can we see quality?

In an architecture diagram, little boxes represent entire systems and lines between them can mean anything: a dependency, the flow of data, or a shared resource such as a bus. These diagrams are a 30,000-foot view, like a land- scape seen from a plane. Typically the only other view available is the source code, which is comparable to a ground-level view. Both views fail to convey much information about the quality of the software: one is too high level and the other provides so much information that we cannot see structure. Clearly, what is missing is a view in between—a 1,000-foot view.

This 1,000-foot view would provide information at the right level. It aggregates large amounts of data and multiple metrics, such as method count, class fan out, or cyclomatic complexity. The actual view very much depends on a spe- cific aspect of quality. It can be a visual representation of a dependency graph, a bar chart that shows metrics at a class level, or a sophisticated polymetric view that correlates multiple input values.

?

??Manually creating such views and keeping them in sync with the software is a hopeless endeavor. We need tools that create these views from the only true source, the source code. For some views—a design structure matrix, for example—commercial tools exist, but it is also surprisingly easy to create spe- cialized views by combining small tools that extract data and metrics with generic visualization packages. A simple example would be to load the output from checkstyle, which is essentially a set of metrics on the class and method level, into a spreadsheet to render charts. The same metrics could also be shown as a tree-map using the InfoViz toolkit. A great tool to render complex dependency graphs is GraphViz.

Once a suitable view is available, software quality becomes a little less subjec- tive. It is possible to compare the software under development with a handful of similar systems. Comparing different revisions of the same system will give an indication of trends, while comparing views of different subsystems can highlight outliers. Even with just a single diagram, we can rely on our ability to spot patterns and perceive aesthetics. A well-balanced tree probably represents a successful class hierarchy; a harmonious set of boxes might show code that is organized into appropriately sized classes. Most of the time a very simple relationship holds: if it looks good, it probably is good.

Erik Doernenburg is a technology principal at ThoughtWorks, Inc., where he helps clients with the design and implementation of large-scale enterprise solutions.

时间: 2024-11-09 00:47:09

Get the 1,000- Foot View的相关文章

精彩的.net 2015

Understanding 翻译为了解或理解,对于 .NET 来说,2015 年注定会更加精彩,所以标题就用了“精彩”这个词,翻译这篇文章有两个原因:学英语.以及跟随作者回顾一下去年的 .NET. 在去年 BUILD 大会之后,我写了一篇文章 Exciting Times for .NET,并且从那以后,我在 .NET 团队中工作充满了乐趣,其中包括 runtime.framework.languages 和编译器.虽然在过去一年中,我的工作重点在内部社区,例如为我们的同事安排内部会议,我也花费

Async in depth

Writing I/O- and CPU-bound asynchronous code is straightforward using the .NET Task-based async model. The model is exposed by the Task and Task<T> types and the async and await keywords in C# and Visual Basic. (Language-specific resources are found

李兴华JavaWeb开发笔记

李兴华JavaWeb开发笔记 1.Java语法-基础 环境变量-JAVA_HOME, PATH, ClassPath 变量名 作用 举例 JAVA_HOME 指向JDK目录 C:\Program Files\Java\jdk1.7.0_21 PATH 指向java.exe目录. %JAVA_HOME%\bin; %JAVA_HOME%\jre\bin CLASSPATH 执行.jar文件.zip文件..class文件所在目录. (程序要用到哪些.class文件,) %JAVA_HOME%\lib

【FastDev4Android框架开发】实例解析之SwipeRefreshLayout+RecyclerView+CardView(三十五)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50087873 本文出自:[江清清的博客] (一).前言: 作为Android L开始,Google更新了新控件RecyclerView和CardView,这两个控件在之前的文章中已经做了详细介绍和使用,同时在前面还对下拉刷新组件SwipeRefreshLayout进行相关讲解.本来该专题不在更新了,正好昨天有一个群友问到了怎么样结合SwipeRefreshLayou

触摸 响应者链

触摸 响应者链     事件: 由硬件捕获到用户的一个操作     iOS的事件: 触摸时间, 晃动事件, 远程控制事件     触摸事件: 支持多点触摸, 最多支持11个点, 6s以后的设备支持压感识别     如何捕获用户的触摸事件?     1.用户能够触摸的都是UIView或UIView的子类     2.创建一个UIView的子类     3.重写UIView的几个方法 和触摸相关的方法 一次触摸包含: 一次开始, 一次结束, 多次移动 - (void)touchesBegan:(NS

扩展HT for Web之HTML5表格组件的Renderer和Editor

在HT for Web提供了一下几种常用的Editor,分别是: slider:拉条 color picker:颜色选择器 enum:枚举类型 boolean:真假编辑器 string:普通的文本编辑器 除了这几种常用编辑器之外,用户还可以通过继承ht.widget.BaseItemEditor类来实现自定义编辑器. 而渲染器,在HT for Web提供常用的Renderer有: enum:枚举类型 color:颜色类型 boolean:真假渲染器 text:文本渲染器 和编辑器一样也可以自定义

Android应用Preference相关及源码浅析(Preference组件家族篇)

1 前言 前一篇(点我阅读前一篇<Android应用Preference相关及源码浅析(SharePreferences篇)>)我们讨论分析使用了Android的SharePreferences,相信看过的朋友都有了自己的感悟与理解,这一篇我们继续乘热打铁来说说SharePreferences的衍生品--Preference组件. 其实Preference组件大家一定不陌生,因为Android系统的Setting应用及我们市面上一些符合Android设计思想的应用的设置界面一般都会用它来实现,

练习:专家术语学习机

1 package com.hfjava5; 2 3 public class PhraseOMatic { 4 public static void main(String[] args) { 5 String[] wordListOne = {"24/7", "multi-Tier", "30,000 foot", "B-to-B", 6 "win-win", "front-end"

【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)

转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/49992269 本文出自:[江清清的博客] (一).前言: [好消息]个人网站已经上线运行,后面博客以及技术干货等精彩文章会同步更新,请大家关注收藏:http://www.lcode.org 话说RecyclerView已经面市很久,也在很多应用中得到广泛的使用,在整个开发者圈子里面也拥有很不错的口碑,那说明RecyclerView拥有比ListView,GridVi

[转]在 ASP.NET MVC 4 中创建为移动设备优化的视图

原文链接 https://msdn.microsoft.com/zh-cn/magazine/dn296507.aspx 如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾. 一方面,客户在其编写应用程序和网站的方法中强烈要求(或乐于要求)移动优先. 另一方面,同一些人又经常称赞 CSS 媒体查询和流体布局. 我所发现的矛盾在于经常利用 CSS 媒体查询和流体布局并未在其他内容之前优先处理移动方面,它不是一种移动优先的方法. 在本文中,我将介绍如何使用服务器端逻辑为给定设