页面驱动开发(Page Driven) —— 一种大多数人还不认同的技术
----------
前言
----------
极限编程为什么不极限?我们已经按照教科书、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点正是本文新颖之处。由于上文提到的页面开发特点,文档和代码非常容易对应,因此为反向极限提供了可能。请看一下代码:
代码
protected void button_commit_Click(object sender, EventArgs arg)
{
DataTable itemtable = GetItemTable();
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) —— 一种大多数人还不认同的技术相关推荐
- 页面驱动page object model
页面驱动(Page Object Model) 页面对象(Page Object) 属性:所有在该页面的测试操作中所会用到的元素对象.比如在登录测试操作中,我们会用到用户名.密码.验证码以及登录按钮这 ...
- 敏捷开发系列之旅 第三站(认识FDD特征驱动开发)
上篇文章中,我们探讨了什么是XP极限编程,以及极限编程的管理思想.核心价值观等等.在敏捷开发之旅的第三站,我想要和大家一起分享FDD特征驱动开发方法. 特征驱动开发--Feature Driven D ...
- 优美的测试代码 - 行为驱动开发(BDD)
可理解的代码非常重要,测试代码也是如此.在我看来,优秀的测试代码,必须做到一个重要的事情就是保持测试逻辑的清晰.一个完整的测试案例通常包括三个部分: 1. SetUp 2. Exercise 3. V ...
- 测试驱动开发_DevOps之浅谈测试驱动开发
"测试驱动开发(Test-Driven Development, TDD),以测试作为开发过程的中心,它要求在编写任何产品代码之前,先编写用于定义产品代码行为的测试,而编写的产品代码又要以使 ...
- Linux学习笔记 驱动开发篇
ARM Linux 驱动开发篇 本篇我们将会详细讲解 Linux 中的三大类驱动:字符设备驱动.块设备驱动和网络设备驱动. 字符设备最多,从最简单的点灯到 I2C.SPI.音频等都属于字符设备驱动的类 ...
- 区块链用哪种语言 Java_区块链开发最适合用哪种语言?
原标题:区块链开发最适合用哪种语言? 如今区块链技术的火热程度可谓是到了疯狂的地步,各大行业巨头也在加紧布局区块链,势必要上演一场"群雄逐鹿"的商业大战.那这场好戏什么时候上演?有 ...
- Linux驱动开发中与设备树相关的6种debug方法
整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...
- 驱动开发的几种编译环境配置法----PS:我孤陋寡闻了。。。。反省啊。。。。
驱动开发与Win32下的程序开发不同,没有一套智能的IDE环境,点点鼠标框架代码IDE就帮你生成好了.Windows下的开发为什么那么容易上手,Visual studio功不可莫.一帮懒人在MS的&q ...
- I.MX6ULL裸机驱动开发四种方式总结
学习裸机驱动开发也有一阵子,终于是把几种裸机驱动方法学完了,总体来说难度并不大.因为毕竟有基础在,能大概看懂数据手册和知道如何是控制寄存器. 驱动方法目前所学共有四种: 1.纯汇编驱动 2.汇编驱动头 ...
最新文章
- v3s 全志_基于全志V3s的开源开发板,提供pcb和系统源码和资料
- java堆和客栈_java中堆和栈的区别分析
- 马尔科夫随机场之图像去燥【Matlab实现,PRML例子】
- 异步爬虫模块aiohttp实战之infoq
- 复变函数(第五版)课后答案 余家荣 版 课后习题答案 高等教育出版社 第一章 课后题答案与解析
- DynamipsGUI使用注意
- 水题 ZOJ 3880 Demacia of the Ancients
- 3.5mm接头(耳机头)到RCA接头(莲花头)转接线制作
- 搭建本地以图搜图服务
- Linux (中标麒麟)离线安装 Python
- 旋度的散度恒为0(公式推导)
- 伦敦 quant_伦敦统一用户组7
- exadata的infiniband交换机的ilom
- 小白菜 docker 高级命令整理
- K_A07_003 基于 STM32等单片机驱动DRV8825模块按键控制步进电机正反转
- pdf2swf用法和一些不能解决问题
- iar使用:创建工程
- SAP MM 执行事务代码VL10B 报错-4501378483 000010 Only 0 CS of material ### available-
- 我是如何一步步把客户的两台服务器给弄崩的
- Ubuntu22.04.1 LTS系统上实现KVM虚拟机显卡直通(AMD/NVIDIA+板载显卡)