`
langyu
  • 浏览: 884125 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我所认识的软件开发原则:二八原则

阅读更多

       二八原则源自经济学理论,表述为:通常一个企业80%的利润来自于20%的项目。由此推广出对日常生活的很多描述,如20%的人投资明天,80%的人消费于今天;20%人的正面思考,80%的人负面思考等。20%和80%只是一个概数,表示少数与绝大多数的对比,它的主要思想是不要平均、对等地看待和处理问题,而是认真分析并找到问题的关键点,集中精力于这些关键点上,获得事半功倍的效果。

       二八原则也适用于软件领域,通常的表述:计算机在80%的时间执行20%的常用代码或是系统在80%的时间使用着20%的常用数据。只是简单描述不会产生感性认识,下面来看几个例子。

       计算机体系中的存储结构,见下图:


       数据通常存储于计算机的外部设备上,但每个数据的处理都得经过CPU。正常情况下CPU可以操作的数据只是所有数据的一部分,为了减少经常通过外接总线取数据的时间消耗,就有了内部存储器的诞生。同样的道理,CPU与主存之间尽管有高速总线连接,但无奈处理频率不一样,取常用数据的时候CPU还是会等待很长时间,这样就有了CPU内部寄存器,用于缓存CPU常用的数据。(注:计算机的存储体系是最初设计时就定义好的,这里为了描述方便,还原它的设计过程)。注意到这里很多时候提到的一个词:常用。正常情况下我们会经常操作数据中很常用的那部分,所以基于这种概率的缓存策略是很有用的。

       Java因执行速度慢饱受诟病,后来JVM中引入的JIT(Just-in-Time)编译器用于将常用的Java字节码编译为机器码保存起来,下次执行时就不用再去解释这些字节码,这样可以有效提高Java的执行速度。同样,在分析Java对象的生存周期后,就可以对那些大量产生,但有效期很短的对象快速执行GC。JVM的内存分代和GC模型充分考虑到对象生存周期及大小的问题,以正确对待客观现实的方式解决JVM内存使用的问题。

       还有一个值得探讨的问题是乐观锁与悲观锁。正常情况下,我们只会操作表中的少数数据行,这时如果为了数据一致性而锁住整个表,就会大大降低DB性能。这种行为可以说成在80%时间只是操作部分行,少数20%的时间才会有对整个表的操作。客观的做法是降低锁的粒度,以更符合实际情况的行为来操作锁。尽管可能增加解决锁冲突的复杂度,但对DB性能的提高是可观的。这种DB锁的问题也出现在程序中,如Hashtable,就可以用ConcurrentHashMap提高并发性能。

       在列举了一些实际问题后发现,很多时候对于事实数据的分析是在程序或是系统出现问题以后才做的,这样的问题如性能瓶颈,响应时间等。在分析清楚事实数据的本身属性及系统的症结之后,就可以有针对性的提出解决方案,用于解决极少数关键问题对整个系统的影响。同样在设计阶段,如果能认识到系统中的主要问题,就可以针对性地设计以提前避免瓶颈的出现。

       怎样找到系统的关键点,决定于事实数据的属性,系统的关键指标,设计者的经验等。如果在设计之初不能很清楚地找到关键点,就应该采取保守策略,不做任何想法优化,等出现问题时再去处理。这样的好处是如果为了解决所认为的关键问题而引入复杂的逻辑,倒是降低了系统的开发和维护成本。

      其实在软件流程上的很多时间,找关键点的目的就是为了优化,提高系统可用性。优化应当以事实数据或是分析报告为切入点,在不确定关键点的时候不能想当然地做优化。以JavaEye前段时间很热的一个帖子从小case看大道理来说。如此优化的前提,应当是在分析完大量数据请求后,明确这几个状态码的请求占绝大多数,那么这样的优化才是成功的。

      二八原则可以有很多解读,但主要一点就是找准主要矛盾。每个人可以试着分析自己系统或是模块的关键点,花更多心思来维护,以获得更优的结果。




我所认识的软件开发原则:权衡
我所认识的软件开发原则:封装
我所认识的软件开发原则:简单表述
我所认识的软件开发原则:减少等待时间

3
0
分享到:
评论

相关推荐

    【软件测试001】认识软件测试、测试分类、测试原则.pdf

    通过这份资料,我将带你认识软件测试的基本概念,了解软件测试的发展历程,探讨为什么要进行软件测试以及如何进行软件测试的职业规划。同时,我还会详细解读软件测试的各类分类方法,包括按开发阶段、是否查看源代码...

    敏捷软件开发 Agile Development

    敏捷软件开发让项目的成功变得更为可能,减少了很多项目的痛苦。 本问介绍了敏捷软件开发的原则和实践,有助于读者对敏捷软件开发有一个宏观的认识和了解。

    计算机软件用户界面设计的基本原则.doc

    计算机软件用户界面设计的基本原则 摘要:目前,大部分软件应用程序和许多Web网站都是使用图形用户界面(GUI)开发工 具构建的。这些工具都提供了一组用于构建GUI的控件,也称为"窗口小部件(widget)。控 件包括文本和数字...

    软件工程认识.docx

    正文 1968年NATO会议上首次提出"软件工程"(SotfwraeEngineeirng)的概念,提出把软件开发从"艺术"和"个体行为"向"工程"和"群体协同工作"转化。其基本思想是应用计算机科学理论和技术以及工程管理原则和方法,按照...

    领域驱动设计:软件核心复杂性应对之道

    通过领域建模,软件开发人员能够展示丰富的功能并将这些功能实现为真正满足用户需要的软件。尽管领域建模非常重要,但市面上介绍如何将有效的领域建模结合到软件开发过程中的著作却非常少。  本书就是为此目的而...

    对软件工程的认识.pdf

    它涉及到程序设计语⾔、数据库、软件开发⼯具、系统平台、标准、设计模式等 ⽅⾯。软件⼯程是应⽤计算机科学、数学、逻辑学及管理科学等原理,开发软件的⼯程。 软件⼯程借鉴传统⼯程的原则、⽅法,以提⾼质量、降低...

    持续集成在项目构件化开发中的应用研究

    高软件开发效率和产品质量,并保证软件开发的成功成为当今世界研究的主题。在项目开发过程中,软件集成发挥了举足轻重的作用,尤其是在项目需求经常变化的过程中,经常 发生软件在集成过程中出现问题而导致项目无法...

    对软件工程的理解.txt

    我对软件工程的理解和认识 软件工程(SoftWare Engineering)的框架可概括为:目标、过程和原则。 (1)软件工程目标:生产具有正确性、可用性以及开销合宜的产品。正确性指软件产品达到预期功能的程度。可用性指软件...

    《软件测试技术》-曲朝阳-电子教案-3929

    软件测试同软件开发之间的关系; 软件测试与开发模型; 软件测试工作流程。 [ 本章目标 ] 了解软件测试的发展历程和行业现状; 掌握软件测试技术的分类; 理解软件测试的目的和软件测试原则,以及了解 ...

    领域驱动设计.软件核心复杂性应对之道

    书中介绍了大量优秀的设计示例、基于经验的技术以及促进处理复杂领域的软件开发的基本原则。本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的java示例,这些例子都是从实际中提取出来的,展示了...

    软件工程知识点

    在软件项目进行过程中,需求分析是从软件定义到软件开发的最关键步骤,其结论不仅是今后软件开发的基本依据,同时也是今后用户对软件产品进行验收的基本依据。 软件开发期 在对软件规格完成定义以后,接着可以按照...

    领域驱动设计.软件核心复杂性应对之道-3

    书中介绍了大量优秀的设计示例、基于经验的技术以及促进处理复杂领域的软件开发的基本原则。本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了...

    保障软件供应链安全《SBOM推荐实践指南》2023年11月发布译文

    2023年11底,美国ODN、NSA CCC、CISA、CSCC等多个政府机构部门联合发布了《保障软件供应链安全:SBOM推荐实践指南》,《SBOM推荐实践指南...并且鼓励软件开发商和供应商共同参考,以维护和提升对软件供应链安全的认识。

    领域驱动设计.软件核心复杂性应对之道-5

    书中介绍了大量优秀的设计示例、基于经验的技术以及促进处理复杂领域的软件开发的基本原则。本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了...

    领域驱动设计.软件核心复杂性应对之道-2

    书中介绍了大量优秀的设计示例、基于经验的技术以及促进处理复杂领域的软件开发的基本原则。本书将设计和开发实践相结合,在介绍领域驱动设计时,还提供了大量的Java示例,这些例子都是从实际中提取出来的,展示了...

    机器人工程专业的认识和感想.docx

    我主要有以下收获: 机器人工程专业的认识和感想全文共4页,当前为第1页。 机器人工程专业的认识和感想全文共4页,当前为第1页。 广茂达公司和纳英特公司都分别介绍了的他们公司的发展历程、主要产品以及发展方向。...

    领域驱动设计.软件核心复杂性应对之道 PDF Part2

    通过领域建模,软件开发人员能够展示丰富的功能并将这些功能实现为真正满足用户需要的软件。尽管领域建模非常重要,但市面上介绍如何将有效的领域建模结合到软件开发过程中的著作却非常少。 本书就是为此目的而编写...

    领域驱动设计.软件核心复杂性应对之道 PDF Part4

    通过领域建模,软件开发人员能够展示丰富的功能并将这些功能实现为真正满足用户需要的软件。尽管领域建模非常重要,但市面上介绍如何将有效的领域建模结合到软件开发过程中的著作却非常少。 本书就是为此目的而编写...

    领域驱动设计.软件核心复杂性应对之道 PDF Part3

    通过领域建模,软件开发人员能够展示丰富的功能并将这些功能实现为真正满足用户需要的软件。尽管领域建模非常重要,但市面上介绍如何将有效的领域建模结合到软件开发过程中的著作却非常少。 本书就是为此目的而编写...

Global site tag (gtag.js) - Google Analytics