任务分解

对于一个程序媛来说,如何提高自己的开发效率,这一直都是我追寻的方法。直到最近才get到一个可以有所帮助的技能。

任务分解,列Task

当我们拿到一个任务卡片时,经常干的一件事,就是明确卡片中的要求和明细,然后就直接开始码代码了。因为写的代码是可见的,运行成功会有极大成就感,然而其实这并不是一个好的方式。

在我们写代码之前应该根据卡片内容,从开发的角度把一个大卡分解成各个小任务,然后针对每个小任务进行开发才是可取的。其实这种方法得到的成就感并不亚于前者。

Task 是什么,如何列

很多人会和我一样困惑,要列Task,但是什么是Task呢?一般来说,一个function(函数),一个Process或者一个Code Block(代码块)都可以是一个Task。
每一个Task都有相应的输入和输出。输入的可以是函数的参数,全局变量,局部变量(对于代码块来说)。输出可以是返回值,变量等。

每个Task的输入都是可穷尽的,在列Task的时候要列出所有用到的Task。
列Task的时候的命名要精确,每一个名字在不同的地方有不同的意思。

列Task,一般会画一个包含Data和Process的图。类似一个有架构的数据流向图。Data(数据)一般有数组、队列、栈、树、对象、类、有循环的对象等,Process(过程)一般有顺序的、选择的(if/switch)、循环(for/while)等。

参考
编程的精进之法

PDCA 戴明环

PDCA指的是Plan-Do-Check-Action,而列Task属于Plan的内容。

如何定义Done?
1.code Done
2.test pass
3.Integration env
4.showcase
5.production env
6.ux(用户使用)

单个任务的开发流程:0)Spike即调研;1)写测试;2)写实现;3)测试通过

例子一,打印学生成绩单

背景:

https://www.zybuluo.com/jtong/note/471501 中的课后作业
打印所有人的成绩单,包括平均分和总分。
打印全班级的总分平均分和中位数。

列Task

1) 转换ViewModel

输入:

studentScoresArray:[[String]]

输出:

studentScoresSheet:[{
    name:String,
    chinese:double,
    english:double,
    math:double,
    programming:double
    },
    {
    ...
    }]
2) 得到学生成绩

输入:

studentScoresSheet

输出:

studentScoresSheetWithSummary:[{
    name:String,
    chinese:double,
    english:double,
    math:double,
    programming:double,
    average:double,
    total:double
    },
    {
     ...
    }]
3) 计算总计

输入:

studentScoresSheetWithSummary

输出:

summary:{
    totalAverage:double,
    totalMidden:double
    }
4) 打印成绩单

输入:

studentScoresSheetWithSummary
summary

输出:

Result:String

Github代码

例子二,猜数字游戏

具体游戏内容
这个游戏有几个需要注意点:
1)Compare(两个数字对比的前提假设:符合要求的、合法的值)
2)生成随机数(生成的数是数字、四位、每位都不一样)
3)游戏流程(进入游戏–第一次成功/中间成功/最后一次成功/游戏失败)

PS:不能放过任何一个逻辑冲突;等加类划分可以使用正交分解法;还要考虑系统状态怎么保持
正交分解法:

 \ 位   |         |         | 
  \ 置  |         |         |
数 \    | 全都一样 | 全不一样 | 部分一样
字  \   |         |         |
--------------------------------------
全都一样 | 4A0B    | 0A4B    | 2A4B
全不一样 | 不可能   | 0A0B    | 不可能
部分一样 | 不可能   | 0A2B    | 2A2B

分解后的图如下:
1)应用启动

2)界面1(按1启动游戏)

main是解决输入输出的。
Router通过输入输出解析找到具体的Command。
Command处理各种具体的用户输入,对Core层返回的结果翻译成友好的输出。
Core层函数生成计算结果。

3)退出(按2退出游戏)

例子三,邮编和条码的转化

例子四,一对多web基础应用

例子五,多对多web基础应用

本站总访问量 次, 访客数 人次, 本文总阅读量
靡不有初,

鲜克有终。

不断努力,一步一步往前走,做最好的自己