Agile Software Development

Reference to: http://agilemanifesto.org/iso/en/

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Twelve Principles of Agile Software

We follow these principles:

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development.Agile processes harness change for the customer's competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals.Give them the environment and support they need,and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development.The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity--the art of maximizing the amount of work not done--is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.

Methodology

The first five principles are principles of class design. They are:

  • SRP:The Single Responsibility Principle.     A class should have one, and only one, reason to change.
  • OCP:The Open Closed Principle.     You should be able to extend a classes behavior, without modifying it.
  • LSP:The Liskov Substitution Principle.     Derived classes must be substitutable for their base classes.
  • ISP: The Interface Segregation Principle.     Make fine grained interfaces that are client specific.
  • DIP: The Dependency Inversion Principle.     Depend on abstractions, not on concretions.

The next six principles are about packages. In this context a package is a binary deliverable like a .jar file, or a dll as opposed to a namespace like a java package or a C++ namespace.

The first three package principles are about package cohesion, they tell us what to put inside packages:

  • REP:The Release Reuse Equivalency Principle.     The granule of reuse is the granule of release.
  • CCP:The Common Closure Principle.     Classes that change together are packaged together.
  • CRP:The Common Reuse Principle.     Classes that are used together are packaged together.

The last three principles are about the couplings between packages, and talk about metrics that evaluate the package structure of a system.

  • ADP:The Acyclic Dependencies Principle.     The dependency graph of packages must have no cycles.
  • SDP:The Stable Dependencies Principle.     Depend in the direction of stability.
  • SAP:The Stable Abstractions Principle.     Abstractness increases with stability.
  1. 单一职责原则(SRP):就一个类而言,应该仅有一个引起它变化的原因。
  2. 开放-封闭原则(OCP):软件实体应该是可以扩展的,但是不可修改。
  3. Liskov替换原则(LSP):子类型必须能够替换掉它们的基类型。
  4. 依赖倒置原则(DIP):抽象不应该依赖于细节。细节应该依赖于抽象。
  5. 接口隔离原则(ISP):不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
  6. 重用发布等价原则(REP):重用的粒度就是发布的粒度。
  7. 共同封闭原则(CCP):包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
  8. 共同重用原则(CRP):一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  9. 无环依赖原则(ADP):在包的依赖关系图中不允许存在环。
  10. 稳定依赖原则(SDP):朝着稳定的方向进行依赖。
  11. 稳定抽象原则(SAP):包的抽象程度应该和其稳定程度一致。
原文地址:https://www.cnblogs.com/iiiDragon/p/3237844.html