首页
学习
活动
专区
工具
TVP
发布

《软件开发201个原则》—— 一般原则、需求原则、设计原则、编码原则、测试原则、管理原则、产品原则、演变原则

第一章 引言 本书包含一系列软件工程原则。这些原则代表了我们所认为软件开发过程中最先进、最正确理念。...软件行业已经有大量讨论技术、语言和工具图书,但很少有图书试图去编制基本原则清单。如图1-1所示,原则(Principle)是工作准则; 原则代表了许多人从经验中总结出来集体智慧。...现存原则会发生改变,新原则会被加进来,旧原则将不再适用。实践和从实践中获得经验,促使我们发展了那些原则。...当然,这与原则7(尽早把产品交给客户)、原则14(渐进地扩展系统) 、原则185(软件会持续变化)以及原则201(系统存在促进了演变)互相支持。但更重要是,你必须为不可避免情况做好准备。...根据Boehm说法,它们是: ■人员短缺(见原则131)。 ■不切实际排期(见原则148) 。 ■不理解需求(见原则40)。 ■开发糟糕用户界面(见原则42)。

51720

23条阿西洛马人工智能原则

人工智能发展引人注目,看到波士顿动力公司机器人视频,也会增加人们对于人工智能发展危机感。所以必须有规则限制人工智能发展方向,不可以使其危害人类,所以制定了阿西洛马人工智能原则。...2017年1月,在加利福尼亚州阿西洛马举行Beneficial AI会议上,近干名人工智能和机器人领域专家,联合签署了阿西洛马人工智能23条原则,呼吁全世界在发展人工智能同时严格遵守这些原则,共同保障人类未来伦理...阿西洛马人工智能原则(Asilomar AI Principles)是著名阿西莫夫机器人三大法则扩展版本。...这个组织专注于由新技术和问题构成潜在威胁,如人工智能、生物技术、核武器和气候变化等。 目前为止,已经有多达1273名人工智能 /机器人研究人员和其他领域2541人签署支持这些原则。...原则目前共23项,分为三大类,分别为:科研问题(Research Issues)、伦理和价值(Ethics and values)、更长期问题(Longer-term Issues)。

1.6K20
您找到你想要的搜索结果了吗?
是的
没有找到

人工智能发展,需要遵守四个AI伦理原则

人们享受着AI智能生活同时也开始对此感到担心。人们开始担心人工智能是不是一种仿生学,它会不会最终威胁到人类安全。...人工智能发展,需要遵守四个AI伦理原则: 第一个原则是安全可控是最高原则; 第二个是促进人类平等地获得技术和能力是创新愿景; 第三个则是人工智能存在价值不是超越人、代替人,而是教人学习和成长; 第四个是人工智能终极理想应该是带给我们更多自由和可能...世界上不只有大公司需要AI技术和能力,几千万组织都需要。防止技术不平等,导致人们在生活、工作上不平等,这是我们需要思考。...AI技术使命,就是要通过学习人、从而去忠诚服务于人,让人类生活得更美好,但AI技术发展也需要价值观指引,在AI伦理价值新“红绿灯”指引下,才能迎来“一个更美好AI时代”。

37320

面向对象设计原则-开闭原则

Open-Closed Principle,"开闭原则"百科上是这么说:一个软件实体(如类、模块、函数)应该对扩展开放,对修改关闭。 为什么?...开闭原则是面向对象设计原则中最基础原则,可称之为原则原则,也可以说是原则指导思想,它强调是既稳定又灵活,在不修改源代码情况下又增加了新功能,核心思想是面向抽象编程。..."开闭原则是抽象类,其他五大原则是具体实现类。"对测试影响,可以提高复用性,提高可维护性,面向对象开发要求。 怎么用?...(来说说抽象,抽象是对一组事物通用描述,它没有具体实现,也就表示它有很多可能性,在程序语言中抽象表现为在接口或抽象类定义一些可变行为,并且能够实现对扩展开放,其包含三层含义: 第一,通过接口或抽象类约束扩展...最后再说说封装变化,包含两层含义: 将相同变化封装到一个接口或抽象类中; 将不同变化封装到不同接口或抽象类中;

47140

面向对象设计原则-依赖倒置原则

Dependence Inversion Principle,DIP"依赖倒置原则",依赖倒置原始定义是: Hign level modules should not depend...; 高层模块依赖抽象层:高层模块基于抽象层编程; 低层模块依赖抽象层:低层模块继承或者实现抽象层; 细节:实现接口或者继承抽象类而产生类; 模块间依赖通过抽象发生...,实现类之间不发生直接依赖关系,其依赖关系是通过接口或者抽象类产生;接口或者抽象类不依赖于实现类;实现类依赖接口或者抽象类,核心思想是面向接口编程; 采用依赖倒置原则可以减少类之间耦合性,...提高系统稳定性; 举个例子: ?...最佳实践 依赖倒置原则本质就是通过抽象(接口或抽象类)使各个类或模块彼此独立,不互相影响,实现模块间松耦合,我们在项目中应该尽量做到: 1.每个类尽量都有接口或者抽象类,或者抽象类和接口两者都具备

65010

面向对象设计原则-里氏替换原则

"里氏替换原则"是类设计原则之一,我们使用"3H"学习法对其进行拆解; why(目的):为什么要学习"里式替换原则",我们都知道面向对象三大特性:封装、继承、多态,该原则就是对良好"继承关系...接下来我们开始进行具体学习; 概念:LSP,"里式替换原则",凡是在父类出现场景中,将父类替换为子类,程序逻辑不变,反之则未必可以。...1.子类需要实现父类抽象方法 2.子类尽量不要重写或覆盖父类中已经实现方法 3.子类重载父类方法时,子类输入参数>=父类输入参数&子类输出参数<=父类输出参数 4.子类可以添加自己特有的新方法,原则上不建议...LSP经典例子:正方形和长方形不符合里式替换,设置宽、高后,长方形体积=宽*高,正方形体积=高*高,子类无法替换父类,不符合里氏替换原则; 在策略模式中,客户端类依赖抽象父类,场景类使用时传入具体策略子类...,子类都实现了父类抽象接口,可以互换,这就符合里式替换原则

82630

pdca原则 & smart 原则

每一项工作,都是一个pdca循环,都需要计划、实施、检查结果,并进一步进行改进,同时进入下一个循环,只有在日积月累渐进改善中,才可能会有质飞跃,才可能取得完善每一项工作,完善自己的人生。...Plan:制定目标与计划 Do:任务展开,组织实施 Check:对过程中关键点和最终结果进行检查 Action:纠正偏差,对成果进行标准化,并确定新目标,制定下一轮计划 smart 原则 人们在制定工作目标或者任务目标时...,考虑一下目标与计划是不是SMART化。...只有具备SMART化计划才是具有良好可实施性,也才能指导保证计划得以实现。...Specific 具体 Measurable 可测量 Attainable 可达到 Relevant 相关 Time based 时间

90510

JAVA 编程中SOLID设计原则:SRP,单一职责原则 OCP,开闭原则 LSP,里氏替换原则 ISP,接口隔离原则 DIP,依赖倒置原则

而一个遵循着好开发规范以及拥有着良好设计原则系统,往往可以节约大量后期维护升级成本。说起设计,往往大家第一反应是设计模式,殊不知,二十几种设计其实都遵循着一些基本设计原则。...S.O.L.I.D,是事实证明良好设计原则。...如果不遵循该原则,直接大刀阔斧地修改了某对象行为,而恰巧该对象被系统其他部分依赖怎么办?...值得说明一点是,该原则接口并不特指 Java 中 interface ,而是类似于 API 中 I一样泛义接口,抽象类甚至具体实现类都可能包含在这个概念中。...遵循良好设计原则,有利于我们平常在开发中写出更可维护代码,便于团队协作也有利于后来者。道理上讲,设计模式、设计原则等等,也理应成为OOP程序员之间常用术语,这样一来,才能显得更具专业性。

7210

面向对象设计原则-单一职责原则

Single Responsibility Principle SRP,"单一职责原则":一个类只负责一组相关事情,对应到代码中就是:一个类有多个方法,这些方法时相关。...对于接口一定要做到单一职责原则: ? ? ? ? 对于类来说,尽量做到单一职责原则,一个多职责类可以通过拆分、抽象、组合来实现单一职责原则。 ? ? ? ? ? ?...单一职责原则只适合那些基础类,而不适合基于基础类构件复杂聚合类,在"办公一体机"中,"打印机"、"复印机"、"扫描仪"、"传真机"都是基础类,每个类承担一个职责,而办公一体机是"聚合类",同事具备四种功能...单一职责原则优点: 1.职责减少,类复杂性降低,职责明确; 2.可读性提高,复杂性降低; 3.可维护性提高; 4.一个接口修改只对相应实现类有影响,对其他接口无影响; 原则虽好,但是还要掌握一个度吧...,不要过渡设计,原则帮助我们写出更优雅、更具有扩展性、松耦合代码设计,根据具体情况而定,要灵活运用;

66810

设计原则之开闭原则

所谓对扩展开放,对修改关闭,其实是设计模式里面所重点提倡,后续所有涉及模式介绍其实都是为了程序能够更好扩展,提倡设计模式本质就是为了减少 增加一点功能而修改系统主要逻辑!...尽量通过扩展类操作来实现行为变化,而不是通过修改已有代码来实现修改 错误示范 下面还是老规矩,我们先看一段错误代码!...StringFormatUtil.stringFormat(MSG)); } } 程序必须首先让人类理解,然后顺便让机器能执行^_^xxxx Process finished with exit code 0 总结 通过上述代码可以知道,开闭原则是是为了避免过多修改原有的代码逻辑...,用扩展代替修改而衍生一个原则,不可否认,他也是所有的设计模式都想表达一个结果,高扩展性。...对拓展开放是为了应对变化(需求),对修改关闭是为了保证已有代码稳定性;最终结果是为了让系统更有弹性! 开闭原则也并不是免费。有些情况下,代码扩展性会跟可读性相冲突。

61630

面向对象设计原则-迪米特原则

Least Knowledge Principle LKP,"迪米特原则":一个对象应该对其他对象有最少了解。...通俗说就是,一个类应该对自己需要耦合或调用类知道最少,你(被耦合或调用类)内部是如何复杂和我没关系,我就知道你提供这么多public方法,我就调用这么多方法,其他我一概不关心。...迪米特原则核心就是解耦合,它对类低耦合提出一些要求: 只和朋友交流。 朋友定义:出现在成员变量、方法输入输出中类称为朋友类,而出现在方法体内部类不属于朋友类。 ? ? ? ?...以上代码中,Teacher类与入参GroupLeader为朋友关系,但是与方法中Girl也有了交流,破坏了Teacher类健壮性,方法时类一个行为,类竟然不知道自己行为与其他类产生关联,违反了迪米特原则...2.朋友间是有距离

36010

【组合数学】基本计数原则 ( 加法原则 | 乘法原则 )

加法原则 ( 1 ) 加法原则 ( 不能叠加 事件才能用 加法原则 | 适用于 分类选取 ) ( 2 ) 乘法法则 ( 相互独立 事件 才能用 乘法法则 | 适用于 分步选择 ) 2....习题解析 ( 1 ) 习题 1 ( 加法原理 ) ( 2 ) 习题 2 ( 加法原则 乘法原则 综合运用 ) ( 3 ) 习题 3 ( 乘法原则 ) 1....加法原则 ( 1 ) 加法原则 ( 不能叠加 事件才能用 加法原则 | 适用于 分类选取 ) 加法原则 : 1.加法法则描述 : 事件 A 有 m 种 产生方式 , 事件 B 有 n...解 : 加法原则 : ① 直接从 A 到 C 与 ② 从 A 先到 B 再到 C 是 不能重叠 , 方案 ① 与 方案 ② 需要 用家法原则 , 乘法原则 : 方案 ② 内部需要使用...2 + 4 = 10 ; ---- ( 3 ) 习题 3 ( 乘法原则 ) 题目 : 从 1000 到 9999 整数 中 : ① 含有5数有多少个 ; ② 含有多少个 百位 和 十位数

84640

设计原则(1)| 开闭原则

开闭原则是指一个软件实体(模块、类、方法等)应该对扩展开放,对修改关闭 我举一个例子,陀螺是个程序喵,创办了一个生产猫粮公司——跑码场,手下有个小徒弟叫招财,写了一个下单逻辑。...这些操作都是通过「修改」来实现新功能,不符合「开闭原则」。 如果我们要遵循「开闭原则」,必须对修改关闭,对扩展开放。...对于count属性添加而言,在模块或类粒度下,可以被认为是修改,但是在方法粒度下,我们并没有修改之前存在方法和属性,因此可以被认为是扩展。 实际编码过程中怎么遵守开闭原则?...我理解是不需要刻意遵守。 你只需要头脑中有这个印象就行了,你需要知道就是你代码需要具有一定扩展性。所有的设计原则都只有一个最终归宿——不破坏原有代码正常运行,方便扩展。...还是那句话,设计原则和设计模式不是金科玉律,只要适合当前需求,并具备一定弹性设计就是好设计。要平衡代码扩展性和可读性,切勿滥用设计原则和设计模式,牺牲代码可读性。

56020

软件交付原则

摘自Jez Humble David Farley《持续交付:发布可靠软件系统方法》 为软件发布创建一个可重复且可靠过程 这个原则是我们写这本书一个目标:让软件发布成为一件非常容易事情。...事实上,它的确应该是件很容易事,因为在发布之前,对发布流程中每一个环节,你都已经测试过数百次了。它就应该像单击一个按钮那么容易。...这种可重复性和可靠性来自于以下两个原则: 几乎将所有事情自动化; 将构建、部署、测试和发布软件所需东西全部纳入到版本控制管理之中。...归根结底,软件部署包括三件事: 提供并管理你软件所需要运行环境,这包括硬件配置、所依赖软件、基础设施以及所需外部服务; 将你应用程序正确版本安装在其之上; 配置你应用程序,包括它所需要任何数据以及状态...将几乎所有事情自动化 把所有的东西都纳入版本控制 提前并频繁地做让你感到痛苦事 内建质量 “DONE”意味着“已发布” 交付过程是每个成员责任 持续改进

57120

Linkerd设计原则

作者:William Morgan tl;dr:服务网格需要设计原则吗?我们是这样认为。我们围绕三个核心原则构建了Linkerd 2.0,这些原则旨在降低运行服务网格操作成本,尤其是对人类而言。...从JVM到Rust迁移是Linkerd 2.0成功一个重要部分,但是同样重要是,我们决定为2.0编写一组核心产品设计原则。...这些代价是配置、理解、调优和操作Linkerd 1.x所花费时间。 为了解决这个问题,我们2.0设计过程从写下一组设计原则开始,这些原则将确保我们面向用户做对事。这些原则很简单: 保持简单。...无论它是通过计算资源来度量,还是更重要,在人类花费时间中度量,这些原则都要求Linkerd忠实于保持服务网格运行成本尽可能低目标。...有关这些原则更多细节和一些实际应用示例,请参阅Linkerd设计原则文档。

33430

购买域名原则

购买域名是WordPress建站关键步骤之一。你需要明智地选择和购买域名,因为它将成为你唯一网址,直接影响着网站品牌、可用性和SEO等方面。在购买域名时,有一些重要原则和注意事项需要考虑。...以下是一些选择独特易拼写域名原则:避免特殊字符:尽量不要在域名中使用特殊字符或连字符,因为它们容易混淆。避免数字和连字符还可以使你域名在移动设备上更加友好。...以下是一些选择TLD原则:首选“.com”域名:如果可能的话,选择“.com”域名,因为它具有更广泛认知度和接受度。...以下是确保域名可用性和合法性原则:使用域名注册商搜索工具:使用域名注册商提供搜索工具来检查域名是否可用。...写在最后在选择和购买域名时,请综合考虑与网站主题相关、独特易拼写、有利于SEO、合法性以及域名长远发展等原则

9710

混沌工程原则

即使分布式系统中所有单个服务都正常运行, 这些服务之间交互也会导致不可预知结果。 这些不可预知结果, 由影响生产环境罕见但破坏性真实事件复合而成,令这些分布式系统存在内在混沌。...系统弱点包括以下形式: 当服务不可用时不正确回退设置;不当超时设置导致重试风暴;由于下游依赖项流量过载导致服务中断;单点故障时级联失败等。...高级原则 以下原则描述了应用混沌工程理想方式,这些原则基于上述实验过程。 对这些原则匹配程度能够增强我们在大规模分布式系统信心。...建立一个围绕稳定状态行为假说 要关注系统可测量输出, 而不是系统属性。 对这些输出在短时间内度量构成了系统稳定状态一个代理。...混沌工程原则为我们大规模创新和给予客户他们应得高质量体验提供了信心。 欢迎加入混沌社区 Google 讨论组和我们一起讨论这些原则应用。

1.7K30

设计模式原则:开放封闭原则

开放封闭原则 开放封闭原则表示一个软件实体(如类、模块、函数等)应该对扩展开放,对修改封闭。也就是说,一个软件实体应该在不修改原有代码前提下,可以扩展新功能。...开放封闭原则是设计模式核心原则,它体现了软件灵活性和稳定性。如果一个软件能够满足开放封闭原则,那么它就具有以下两个优点: 能够扩展已有的功能,满足新需求,具有很强适应性和灵活性。...不需要修改已有的代码,保证了原有功能稳定性和可靠性。 举个例子,假设我们有一个计算器类 Calculator,它可以根据用户输入表达式进行计算。...为了遵循开放封闭原则,我们应该将 Calculator 类设计成一个抽象类,并定义一个抽象方法 calculate()。...这样,如果我们想要增加新运算符,只需要增加一个新子类即可,不需要修改原有的代码。

13140

软件测试原则

今天是日更 78/365 天(用时22分钟) 话不多说,直接上干货,从事软件测试工作,需要遵循这七大原则: 测试显示缺陷存在 测试有效性(杀虫剂悖论) 测试尽早介入 缺陷集群性(2/8原则) 测试活动依赖于测试内容...不存在缺陷谬论 穷尽测试是不可能 一、测试显示缺陷存在 测试可以显示缺陷存在,但不能证明系统不存在缺陷。...在测试中,同样测试用例被一遍一遍反复使用时,发现缺陷能力就会越来越差。 三、测试尽早介入 IBM一份研究结果表明,缺陷存在放大趋势。...四、缺陷集群性(2/8原则) 1、从功能上来说,一个软件如果有20 %为主要功能,那就需要花费软件测试人员80%时间。...2、再从bug上分析,一个功能模块发现bug越高,那存在未被发现bug也越高,所以发现bug与未发现bug是成正比。“80%错误集中在20%程序模块中”。

32050

Material布局原则

原则 Material Design 指南通过源自印刷领域设计元素 – 例如排版、网格、空白、缩放、颜色,和图像 – 来建立层次结构和传达所要表达含义,并专注于带给用户沉浸式体验。...应用背景类似于一张平坦、不透明质地纸片,应用行为也模仿纸片,可以改变大小、拖动及把多个纸片粘合在一起。 在本规范中,构成应用表面被成为材料或材料片。...应用之外元素,例如系统状态栏,和应用内容是分开,不会被视为材料。 更多关于材料细节,详见材料属性。 接缝 两片材料公共边缘被成为接缝。当通过接缝连接时,它们会一起移动。...两片材料接缝 阶层 两个 Z 轴位置不同材料片重叠时,会形成阶层。这两个材料会相互独立移动。 两片重叠材料构成阶层 浮动操作按钮 浮动操作按钮 浮动操作按钮是和工具栏分离圆形纸片。...它表示单个被提升操作。 如果它和阶层中内容创建有关,则可以跨越一个阶层。 跨阶层浮动操作按钮 如果浮动操作按钮与两个材料内容都有关,则可以跨越接缝。

1K40
领券