----------

前言

----------

极限编程为什么不极限?我们已经按照教科书、Jcobson、MatinFowler的做了,用了测试驱动,用了小卡片,用了standmeeting,可是结果只是一个人干多个人的工作,让大公司变成小作坊,小作坊变成单兵作战。

传统的软件开发,从用例、需求文档、代码设计、代码开发、测试。这个流程非常的顺利,技术也比较成熟。可是问题出现在了开发开发完成后,实际代码和文档有很大的出入(如果没有出入,我估计八成是强迫了顾客接受之前确定的需求文档。)

所以,传统的XP,实际上和soho一族差不多,就是让大公司的编程变得灵活,但是问题就是过程没有经典的瀑布模式产生规范的文档。

因此极限完毕了,就需要花相同的时间去重新写用例、需求文档。这个过程似乎还没有成熟的技术。就是一种reverse engineering,反向编程,我称为反向极限——Reverse eXtreme Programme——RXP。

本文就谈谈基于页面驱动(Page Driven)的反向极限的开发想法。

----------

正文

----------

软件开发过程,我分为四类:

1. 基本类库开发 Base.X

例如字符串处理、加密解密等。特点是不针对特定的业务、领域。大量复用。

2. 框架类库 Framework.X

针对某一功能点,不针对特定的领域。例如配置文件、数据库持久层、ORM等。基本复用。

3. 服务类库 Services.X

针对某一功能点,针对特定的领域。一般结合了第三方的库,例如yahoo查询天气、飞信操作等,或者自己开发的应用。针对特定领域复用。

4. 应用开发 Applications.X

针对特定功能点、特定领域。例如ERP系统、缺陷跟踪等。不可复用。

前三者,和传统的组件类似,内部的代码结构经过了精细优化,使用了大量设计模式,较难使用极限编程技术;但是有个特点是:用户并不关心他们的内部构造,他们只需要知道如何调用、调用返回值。

所以,只要开发完成,用API文档记录即可。日后基本上不需要维护。

------------------

应用开发的极限——页面驱动(Page Driven)

------------------

应用开发是最赚钱的,也是属于产品级别的开发。例如短信系统、财务系统、进销存系统等。

这种开发的特点是:代码就是文档。

比如一个销售过程,无论用什么语言去描述客户需求,还不如我们用代码描述直接。而且文档存在了细节上的遗漏,将来维护,看文档还不如看代码。

针对这个特点,在应用级别的开发,我个人主张以下几点:

1. 代码采用平铺直叙,不使用任何的设计模式,不使用任何重构技术。

2. 一个页面针对一个需求。

这样,一种开发驱动模式就出现了,就是页面驱动开发,Page Driven。 目前网上我仅能搜索到几篇论文,但是将来这种模式一定会“横行霸道”的。

一个典型的页面驱动开发过程:

1. 写用例、需求文档

2. 设计项目界面,制作原型系统

3. 根据原型系统,制作实际系统

4. 测试

5. 代码反向修正用例、需求文档。

前4点已经是陈词滥调,而第5点正是本文新颖之处。由于上文提到的页面开发特点,文档和代码非常容易对应,因此为反向极限提供了可能。请看一下代码:

代码

    [PageDriven()]
    protected void button_commit_Click(object sender, EventArgs arg)
    {
         DataTable itemtable = GetItemTable();
         
         CreateItem(itemtable);
 
         CreateItemPrice(itemtable);
         
         CreateItemInventory(itemtable);
 
         UpdateUserProfile(itemtable);
    }

这是个创建商品的页面 manager_create_item.aspx,当用户点击了button_commit之后,创建商品数据、商品价格数据、商品库存数据、更新个人信息表。这个就是一个Use Case,需求用例。

我只要使用了反射,非常容易得到以下文档:

Use Case Template

Use Case ID:

xxxxxxxxxxxx

Use Case Name:

Manager Create Item (页面manager_create_item词法解析

Created By:

Pixysoft

Last Updated By:

Pixysoft

Date Created:

2010-04-04

Date Last Updated:

2010-04-04

Actors:

省略

Description:

省略

Trigger:

User Commit (根据控件方法获取)

Preconditions:

省略

Postconditions:

省略

Normal Flow:

1. Get Item Table

2. Create Item Information

3. Create Item Price Information

4. Create Item Inventory Information

5. Update User Information.

(这些数据可以反射代码从调用方法获取)

Alternative Flows:

省略

Exceptions:

省略

Includes:

省略

Priority:

省略

Frequency of Use:

省略

Business Rules:

省略

Special Requirements:

省略

Assumptions:

省略

Notes and Issues:

省略

基本上,从代码可以直接对应回需求文档。这样将来的开发,只要从需求文档生成代码模板;之后再反向更新需求文档,即可实现了反向极限,达到真正极限的目标。

------------

后记

------------

未来的极限开发,不是让代码越少越好、让文档越少越好;而是相反,代码、文档越来越正规化,正规到了可以大部分让机器去自动完成,我们工程师只需要在需要变动的地方手指头动动即可。

转载于:https://www.cnblogs.com/zc22/archive/2010/04/04/1704209.html

页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术相关推荐

  1. 页面驱动page object model

    页面驱动(Page Object Model) 页面对象(Page Object) 属性:所有在该页面的测试操作中所会用到的元素对象.比如在登录测试操作中,我们会用到用户名.密码.验证码以及登录按钮这 ...

  2. 敏捷开发系列之旅 第三站(认识FDD特征驱动开发)

    上篇文章中,我们探讨了什么是XP极限编程,以及极限编程的管理思想.核心价值观等等.在敏捷开发之旅的第三站,我想要和大家一起分享FDD特征驱动开发方法. 特征驱动开发--Feature Driven D ...

  3. 优美的测试代码 - 行为驱动开发(BDD)

    可理解的代码非常重要,测试代码也是如此.在我看来,优秀的测试代码,必须做到一个重要的事情就是保持测试逻辑的清晰.一个完整的测试案例通常包括三个部分: 1. SetUp 2. Exercise 3. V ...

  4. 测试驱动开发_DevOps之浅谈测试驱动开发

    "测试驱动开发(Test-Driven Development, TDD),以测试作为开发过程的中心,它要求在编写任何产品代码之前,先编写用于定义产品代码行为的测试,而编写的产品代码又要以使 ...

  5. Linux学习笔记 驱动开发篇

    ARM Linux 驱动开发篇 本篇我们将会详细讲解 Linux 中的三大类驱动:字符设备驱动.块设备驱动和网络设备驱动. 字符设备最多,从最简单的点灯到 I2C.SPI.音频等都属于字符设备驱动的类 ...

  6. 区块链用哪种语言 Java_区块链开发最适合用哪种语言?

    原标题:区块链开发最适合用哪种语言? 如今区块链技术的火热程度可谓是到了疯狂的地步,各大行业巨头也在加紧布局区块链,势必要上演一场"群雄逐鹿"的商业大战.那这场好戏什么时候上演?有 ...

  7. Linux驱动开发中与设备树相关的6种debug方法

    整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...

  8. 驱动开发的几种编译环境配置法----PS:我孤陋寡闻了。。。。反省啊。。。。

    驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了.Windows下的开发为什么那么容易上手,Visual studio功不可莫.一帮懒人在MS的&q ...

  9. I.MX6ULL裸机驱动开发四种方式总结

    学习裸机驱动开发也有一阵子,终于是把几种裸机驱动方法学完了,总体来说难度并不大.因为毕竟有基础在,能大概看懂数据手册和知道如何是控制寄存器. 驱动方法目前所学共有四种: 1.纯汇编驱动 2.汇编驱动头 ...

最新文章

  1. v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
  2. java堆和客栈_java中堆和栈的区别分析
  3. 马尔科夫随机场之图像去燥【Matlab实现,PRML例子】
  4. 异步爬虫模块aiohttp实战之infoq
  5. 复变函数(第五版)课后答案 余家荣 版 课后习题答案 高等教育出版社 第一章 课后题答案与解析
  6. DynamipsGUI使用注意
  7. 水题 ZOJ 3880 Demacia of the Ancients
  8. 3.5mm接头(耳机头)到RCA接头(莲花头)转接线制作
  9. 搭建本地以图搜图服务
  10. Linux (中标麒麟)离线安装 Python
  11. 旋度的散度恒为0(公式推导)
  12. 伦敦 quant_伦敦统一用户组7
  13. exadata的infiniband交换机的ilom
  14. 小白菜 docker 高级命令整理
  15. K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转
  16. pdf2swf用法和一些不能解决问题
  17. iar使用:创建工程
  18. SAP MM 执行事务代码VL10B 报错-4501378483 000010 Only 0 CS of material ### available-
  19. 我是如何一步步把客户的两台服务器给弄崩的
  20. Ubuntu22.04.1 LTS系统上实现KVM虚拟机显卡直通(AMD/NVIDIA+板载显卡)

热门文章

  1. unet医学肺部ct图分割简单记录
  2. 电脑上没有蓝牙图标找不到了?
  3. Pipeline 基础步骤
  4. vmware 虚拟机启动失败, Intel VT-x 处于禁用状态
  5. 在线png转换成jpg、jpg转png、各种转
  6. 计算机组成原理平均cpi怎么算_计算机组成原理计算题
  7. 解决4K屏电脑显示问题
  8. android 调出键盘表情_Android 显示输入法中的emoji表情以及String字符
  9. Python初学者:元组数据操作,输出元组内7的倍数以及个位是7的数
  10. 《power BI》 高级筛选器Filter 和Values人工造表 ALL 函数