如何制表软件更快更高更强

伦敦奥运会即将落幕但这并不意味着奥运精神的陨落。奥运的口号是“更快、更高、更强”分享一些诀窍与练习方法,来帮助您跑得更快、跳得更高、变得更强我認为这是个不错的主意。虽然不能成为下一个乌塞恩·博尔特或者勒布朗·詹姆斯但至少能让您在下一场街篮甚至花样跳水比赛中出类拔萃。 1. 跑更快 与2008年不同的是博尔特这次真的要突破自己的记录了。跑得更快的诀窍在于爆发您的潜能。这就需要对踝关节、膝盖及髋关節进行针对性的练习以提高爆发力。准确地说无论在短跑、拳击、足球或者其他运动中,髋关节对于速度与力量的要求都很关键另┅个诀窍就是要提高身体后部的力量——锻炼臀部、脚筋及下腰椎部位。如果有留意奥运会的短跑手您会发现他们的臀部都是很有力的,就跟足球的跑卫一样这就是他们速度爆发的来由。 2. 高强度练习:《偷骗拐抢》这不仅仅是一部布拉德·彼特主演的电影,更是提高速度与爆发力的最好方法之一。这与硬拉有几分相似不同的是,您是双手撑开举起杠把越过头部。这个动作有点难因此您要从零或者低重量开始训练,直至适应这项方法为止一旦掌握了方法,就必须在日常大量的训练中加入此项练习并通过全身协调以达成起跑架上嘚爆发,飞跑全场(或者模拟会议室)

}

设计软件架构时常常遇到的一大難题就是质量属性为此不仅会使设计变得困难,规格难度也会变大因此,软件系统中的许多问题都与规格和质量属性(如可变性或性能)设计直接相关质量属性对客户及终端用户认可的影响较大。找到系统性的合适解决方法至关重要这也是我们所要面临的一大挑战。

质量属性比较难以处理因为它们需要根据不同情况做不同处理,特别是它们不仅影响系统的某一部分也会影响整个系统例如,工程師无法在系统的某一个特定地方限制安全或性能属性很多情况下这样的尝试都无法实现,因为大家关注的问题是互相交织而且甚至常常昰很宽泛的比如,他们会要求软件工程师向现有组件植入设计和代码换句话说,大多数质量属性是整体性的需要总体上的战略应对筞略。

Grady Booch曾说过软件架构就是不惜一切代价去改变以满足要求,尤其是质量属性的要求Martin Fowler也同样提到过:软件架构至关重要――不管那意菋着什么。

那么软件工程师应如何应对复杂局面呢第一步就是要确保充分理解所有的需求以及排好优先次序表。对于类似“应具有高性能”或“需要提供更高的安全性”之类的需求规格其实意义并不大这些说法对于高层来说似乎是合乎逻辑的。但是实际操作起来到底昰什么意思呢?

对于任何好的设计来说首要的挑战及前提就是创建好的需求规格。但是到底什么才算是好的需求呢?根据ISO的原则好嘚需求应涵盖以下特征:

  • 紧凑: 需求应只针对一件事情
  • 完整: 应在一处将需求完整的阐述,无任何信息遗漏
  • 一致: 各需求不应互相矛盾并应完铨符合文档
  • 准确: 所有相关利益人的业务要求需得到满足。
  • 现行: 项目进行过程中需求都不可过时
  • 外部可见: 需求所指定产品的某一特性是可鉯被用户外部可见或可经历的。有关内部架构、设计、实施、或测试决定的“要求”应得以合理限制并应在需求文档的约束部分作明确說明。
  • 可行: 需求在项目约束范围内应做到可实施
  • 明确: 需求的表达应简洁明了,不含专业术语、缩写(除非在要求文档中有明确定义)、戓其它深奥用语应该表达客观事实而非主观意愿。
  • 强制性: 需求所代表的是利益相关者定义的特征如有遗漏会导致不可弥补的缺失。
  • 可檢验: 需求的实施可通过以下四种可行的方法来决定:检验、分析、演示、或测试

当软件工程师收到一份需求说明时,应保证其质量一份不佳的需求说明会不可避免地导致一个不良的软件系统,哪怕是再好的设计师以及实施者投入其中也不会起作用因此,测试和评估要求说明是重中之重

有一项需要架构师们十分注意的事项是,应当谨防那些隐蔽的或是隐含意义的需求这样的需求可能不会记录在文档Φ。比方说智能手机应该随时都有反应,或者键盘和显示器应放在同一边这类需求可能看起来是显而易见的,但是并非所有隐含的需求都是如此这已经超出本文要讨论的内容,大家可以参看《KANO分析》一文或许对解决此类问题有所帮助。

另一重要问题在于相关利益人應得到她客观必需的而非她主观想要的。有个老掉牙的故事是关于某车主总是向经销商抱怨应该给他配个更好的保险杠每次他在高速公路上行驶,总是有该死的兔子横穿出来为了躲开而不撞到兔子,他的车子就会在湿滑的公路上避让滑行撞到树上当然了,经销商是鈳以卖给他一辆配备更牢固保险杠的车但是一辆配备ABS的车子对于顾客来说岂不是更好的选择?

最后同样重要的是在考虑质量属性的时候观察上下文总是很关键。试想有要求是你的系统能提供更高的安全性,不管用什么办法哪怕你的应用是全宇宙最安全的系统,但如果要将不安全的遗留代码集成其中就会在整个系统中留一个后门,那这个系统就不会安全请记住,任何系统的质量高低总是取决于它朂薄弱的部分

在处理质量属性时,需考虑的一项重要事项就是其所产生的多维度宇宙例如,性能这样的属性就能够反映在多个方面――由IBM的一篇文章所提出的分类如下:

  • 它可以解决吞吐量问题例如大量的信息可以通过某一消息中间件以秒速进行传递。
  • 它还可以说明反應时间即提出请求到收到响应的时间。
  • I/O速度是指系统所处理的批量数据
  • 察觉性能是指用户在与系统互动时的速度体验。
  • 同时它还涵盖叻启动时间即从系统启动到各个操作部分完全可用所需的时间。
  • 最后同样重要的是它还可以定义可伸缩性――尽管有些人可能并不认為这也与性能有关。

因此在处理性能问题时,软件工程师应当准确地描述其所指的性能是哪一方面处理I/O(输入/输出)速度相较处理吞吐量问题所产生的结果会有差别。

要以更加明确的方式来存档、建模、以及表述质量属性一种比较好的途径就是使用一种基于场景的方法,这和结构评估方法如ATAM类似所有重要的属性都应使用不同场景来描述。在某一场景中外部用户或外部系统在有待开发的系统内部或其中一部分触发某一事件。

例如僵尸网络为了让网络服务器瘫痪会向服务器发送高频次的需求。这样的情况下系统即网络服务器可能也囸处于某一特定状态如联网或未联网。只要发生这样的情况系统应该以某一特定的方式作反应,如只要DDoS(分布式拒绝服务)攻击被traffic模式分析探测出来就进行网络阻隔。我们也应该通过反馈测量来为系统的反馈作定量比如,DDoS攻击应该被探测到并在3分钟内得到解决在这种方法中系统被视为一个黑/灰匣子。

场景会提供很多益处如:

  • 在处理用于系统某一部分的一个质量属性的某一具体方面的时候,场景会比較具体、明确、且简明
  • 场景有助于定性定量地去分析质量属性。
  • 或许场景最重要的优势在于容易被利益相关者所理解业务利益相关者囷工程师双方都能理解、定义、并一起讨论场景。
  • 最后同样重要的是场景可以帮助测试经理明确测试内容以确保质量属性在产品或解决方案中真正得以实施。

效用树是我们的良师益友

下一步就是创建效用树来明确质量属性它以树形的样式呈现,枝叶包含各种场景该效鼡树既可以由业务和开发部门的联合定义也可以由架构师们作为讨论的基础进行准备。在研讨会议中业务和开发部门的相关利益人会为烸个场景指定相应的标准。例如业务相关利益人可能会根据场景的重要性划分为高、低、中各个等级,而工程师可能会根据其实施的难喥进行等级划分两个方面的考量叠加后有助于对场景进行优先次序排列。显然重要的场景实施起来也比较复杂,这样的场景相比那些與业务相关程度低的就应该得到更高的优先级别

效用树下直接位于根部的节点是那些质量属性等级特别高的,如可用性和可变性效用樹中间的节点代表之前显示性能的方面,而枝叶部分表示场景

对于每一个场景,从最重要的即那些有战略意义的开始应采用所谓的设計战术。

让我们以某一设计战术图表为例为了解决某一应用中的安全问题,软件工程师可以使用不同的战略如某一合适的资源管理战畧。对于每一个战略我们都可以应用设计战术。在资源管理中我们可以利用诸如迟缓计算或catching等之类的战术。设计战术图表展示了许多戰略以及战术用以解决某一特定的质量属性问题。

当我们选定设计战术用以实施到某一场景时通常我们会发现更多细节问题。有些设計战术代表了设计模式本身而另一些多种设计模式也可能存在以支持每一设计战术的实施。因此选择正确的模式或风格是软件架构师囷开发者在这一阶段的主要职责。

经验告诉我们“自动神奇地”方式为需求提供了可追溯性请记住我们开始时是要通过场景精确地描述質量属性,进而进行优先排序然后,我们将场景一个个朝下排列进行具体化在最终所引入的设计模式中使用相应的设计战术。现在峩们在架构驱动因素和架构决策之间就有了一个双向的关系。只要任一场景被修改或重新排列次序我们就可以追踪所有受影响的架构组件。相反当我们修改某一架构组件时,我们也要检查哪些要求会因这一改变而受到影响

在ATAM架构评估方法中,两项重要的原则相互印证一个架构中的敏感点意味着某个架构决策或架构模块,它们都和质量属性直接相关而权衡点则是指至少两个质量属性的敏感点(某架構决策或架构模块)。理解敏感点和权衡点非常重要虽然它们都是架构师能够使用的工具,但要小心使用

刚刚我们所了解到的是CMU SEI所称嘚ADD(属性驱动设计)。如果您对此想了解更多请访问它们的网页。

在实际操作中处理质量属性时仅仅考虑架构方面是远远不够的。Bertrand Meyer曾說过:“泡沫不会破灭”“我们所需要的就是代码”

技术决策对于达成质量要求有很重要的影响。所用的应用服务器的种类、持续储存、或信息插件也有很紧密的关联

因此,架构设计应当由具有可行性的范例或模型加以补充有了可行的范例,我们就可以对某特定质量屬性进行评估来看它们是否能够达到这些属性。当某些部分缺少时可以使用仿真来代替,比如在传统的系统工程中硬件开发周期比軟件开发周期要慢。

诚然功能性的要求是富有挑战的,质量数据的实施难度更高因为它们往往代表了多方面的需求。因此这些要求嘟需要仔细去处理。任何特别处理都不可避免地会导致设计失败就像很多项目中会过早进行性能优化描述一样。

为了更系统化地处理质量属性这些属性就需要得以恰当地描述、理解、排列好优先次序、并对应到架构决策中,由QA确认其中一种有效的系统化设计就是利用基于场景的方法,从效用树开始着手利用场景建立质量属性模型。只要方法得当项目就会从可追溯的两方面:架构驱动因素和架构决筞,尤其是其灵敏度和权衡方面得以成效场景同样也有助于定义基于风险的测试方法,从而验证质量属性的成果

想了解更多信息,请閱读相关文章如等

}

我要回帖

更多关于 制表软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信