质量属性之可修改性

可修改性的定义:

  可修改性战术的目标是控制实现、测试和部署变更的时间和成本,系统或软件的能够快速地以较高的性价比对系统进行变更。

  

可修改性分为三类,分别是:

  局部化修改——目标是减少由某个变更直接影响的模块的数量;

  防止连锁反应——目标是限制对局部化的模块的修改,以防止对某个模块的修改间接地影响到其他模块;

  延迟绑定时间——目标是控制部署时间并允许非开发人员进行修改。

  

举例说明:

  局部化变更包括语义一致性,模块化处理等。这一部分可以借用设计模式的单一原则:一个类只负责一项职责,尽量做到类的只有一个行为原因引起变化.

  用mvc的例子来说,setFamilyName类定义名字,setFamilyWork类定义工作,setFamilyPing定义评价。一个模块只负责一件事情,且不重复不重名,不影响到其它模块,这就是局部化变更的表现,分工明确也会使得代码变得简洁易读。

public void setFamilyName(String name){
      model.setName(name);    
   }
 
   public String getFamilyName(){
      return model.getName();    
   }
   
   public void setFamilyWork(String work){
       model.setWork(work);    
    }
   
   public String getFamilyWork(){
       return model.getWork();     
    }
   
   public void setFamilyPing(String ping){
      model.setPing(ping);      
   }
 
   public String getFamilyPing(){
       return model.getPing();    
   }

  防止连锁反应包括隐藏信息,接口隔离等,这一部分使用了接口隔离原则,即建立单一接口。

  在这个例子里,就体现了接口隔离原则,建立了单一的接口,每一个类与类分离,每一个接口和接口分离,避免了数据的错误流动,也隐藏了信息,只传输数据。

public class Mainframe {
    private CPU cpu;
    private Memory memory;
    private HardDisk harddisk;
    private OS os;
    
    public Mainframe() {
        cpu=new CPU();
        memory=new Memory();
        harddisk=new HardDisk();
        os=new OS(); 
    }
    public void on() {
        cpu.run();
        memory.check();
        harddisk.read();
        os.load();
    }
    public void off() {
        cpu.off();
        memory.off();
        harddisk.off();
        os.off();
    }
}

  延迟绑定时间是给数据类足够的反应时间,创建缓冲层,在类与类间加入第三方类作为沟通,这样也会降低模块间的相互依赖。

  这是一个创建缓冲区的例子,wrap方法可以利用已经存在的数据来创建缓冲区

byte[] myByte = new byte[] { 1, 2, 3 };

int[] myInt = new int[] { 1, 2, 3, 4 };

ByteBuffer byteBuffer = ByteBuffer.wrap(myByte);

IntBuffer intBuffer = IntBuffer.wrap(myInt, 1, 2);

通过这样设计可以有效的避免一些bug,例如显示错误,显示的功能不全等。通过上述的战术,也可以用最少的代码量达成目的,在用户的使用上很方便简洁。因为已经隐藏了不需要显示的信息。对于后期的测试维护和更新也有着很大的帮助。代码的一致性使得测试人员对功能模块一目了然,维护人员则能很快找出问题的出生点,更新也提供了相应的接口,不用再一步步的阅读代码了解功能详细。

原文地址:https://www.cnblogs.com/Excusezuo/p/12398641.html