`
langyu
  • 浏览: 888340 次
  • 性别: 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
分享到:
评论

相关推荐

    敏捷软件开发简介PPT

    敏捷软件开发是一种以人为核心、迭代、逐步交付的软件开发方法论,强调灵活性和客户协作。这种方法论在21世纪初期由一群业界专家提出,他们在2001年制定了敏捷联盟宣言,以此来应对传统软件开发过程中存在的问题,...

    面向Agent的软件开发

    为了更好地理解面向Agent的软件开发,首先需要对Agent本身有一个基础的认识。Agent具备感知环境并作出反应的能力,它可以是简单的也可以是复杂的,依据设计的不同而执行不同的任务。在多Agent系统中,各个Agent通常...

    2019年大学生软件开发实习总结样本.doc

    9. 软件开发的基本原则:报告中提到了软件开发的基本原则,包括详细设计对一个项目开发有明确的指引作用,可以使开发人员对这个项目所要实现的功能在总体上有具体的认识,并能减少在开发过程中出现不必要的脱节。...

    2022年自考软件开发工具试题及答案.doc

    2. 软件开发工具与应用软件环境的关系:软件开发工具的环境要求通常依赖于它所支持的应用软件的环境规定,这意味着开发工具需要与目标应用软件兼容。 3. 软件开发工具的类型:TOOLBOOK是一种软件开发工具,COBOL是...

    软件开发工具复习资料(自考)汇编.pdf

    软件开发工具的功能可以分为两方面:一是定性功能,包括认识与描述客观系统,存储管理开发过程中的信息,代码的编写生成,文档的编制生成,软件项目的管理等;二是定量功能,包括表达能力或描述能力,保持信息一致性...

    软件开发重要概念

    ### 软件开发重要概念解析 #### 快速开发与交付的重要性 在现代经济生活中,预测计算机系统如何随时间发展变得越来越困难。市场条件快速变化、终端用户需求不断变化,以及新竞争威胁的出现往往令人措手不及。在很...

    Agile Software Development----敏捷软件开发----Draft version: 3b

    通过强调团队合作、快速反馈循环、用户参与等原则,敏捷方法论已经成为了现代软件开发领域不可或缺的一部分。无论是对于刚入门的新手还是经验丰富的专业人士来说,本书都是了解敏捷开发理念、掌握其实践技巧的宝贵...

    软件开发过程总结.ppt

    这个过程旨在解决软件开发中的“软件危机”,这是一种由软件的复杂性、频繁变化、高昂成本、质量问题以及维护难度所带来的挑战。软件危机的出现使得业界意识到传统的开发方式已无法满足日益增长的需求。 软件是复杂...

    软件开发文档标准模板

    综上所述,"软件开发文档标准模板"是一整套全面的文档框架,涵盖了软件开发的全过程,从需求收集到项目结束,每一步都有相应的文档支持。遵循这套模板,不仅可以提升软件开发的专业性,还能有效提高团队协作效率,...

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

    软件测试是软件开发过程中不可或缺的一部分,它对于保证软件质量、提升用户体验至关重要。通过不同的测试类型和技术,可以有效地识别并修复软件中的缺陷,确保软件产品的稳定性和可靠性。随着技术的发展和行业标准的...

    电信领域—敏捷软件开发思想

    ### 电信领域中的敏捷软件开发思想 ...综上所述,敏捷开发思想在电信领域的应用能够有效提升软件开发的质量和效率。通过灵活应对需求变化、加强团队协作以及持续改进等措施,电信企业可以更好地满足市场和客户的需求。

    软件开发工具复习资料(自考).pdf

    软件开发工具复习资料 软件开发工具是为提高软件开发的质量和效率,从规划、分析、设计、测试、成本和管理各方面,提供各种不同程度的帮助的一类广泛的软件。它应当为软件人员提供信息管理、信息存储一致性的保证和...

    软件开发最佳方案

    在软件开发过程中,找到最佳的人力资源计划方案至关重要,...综上所述,优化软件开发的最佳方案需综合考虑人力分配、团队建设、项目管理、沟通协作等多个方面,通过科学的方法和策略,确保软件开发过程的高效和优质。

    方策公司软件开发部绩效考核方案.pdf

    《方策公司软件开发部绩效考核方案》是一个针对软件开发团队的绩效管理文档,旨在通过科学的考核机制激发员工的工作积极性,提高工作效率和质量,确保项目按时、按量、按质完成。方案主要包括以下几个核心要点: 1....

    (完整word版)软件开发项目管理实施方案.pdf

    "软件开发项目管理实施方案" 本资源提供了一个软件开发项目管理实施方案,旨在帮助项目管理者成功地管理项目。该方案从三个方面入手,分别是项目管理者的目标、职责和工作内容。 首先,项目管理者的目标是明确的...

    面向云计算组件的软件开发研究.pdf

    在云计算平台中,软件开发人员还面临诸多挑战,其中包括如何在云平台上部署和运行大规模的SaaS(软件即服务)应用,以及如何进行数据迁移。通过分析Google App Engine云平台的实践,可以探索在云平台上开发软件所...

    网络安全视角下计算机安全软件开发研究.pdf

    在探讨网络安全视角下的计算机安全软件开发时,我们首先要认识到互联网技术飞速发展带来的便捷,同时也面临着网络安全问题的挑战。本文首先介绍互联网普及的背景及其带来的变化,接着重点分析计算机网络安全的重要性...

    软件开发的基本策略.doc

    在软件开发中,我们需要树立这样的正确认识:优化工作不是可有可无的事情,而是必须要做的事情。同时,我们也需要注意到折衷的重要性,避免过度追求某一方面的优化,而忽视了其他方面的质量。 其他重要策略 除了...

Global site tag (gtag.js) - Google Analytics