MyException - 我的异常网
当前位置:我的异常网» Java相关 » 麻雀虽小,五脏俱全:从一个小功能看软件开发过程,

麻雀虽小,五脏俱全:从一个小功能看软件开发过程,该如何处理

www.myexceptions.net  网友分享于:2013-03-07  浏览:17次
麻雀虽小,五脏俱全:从一个小功能看软件开发过程
周一到周三,我的领导亲自操刀,完成了一项小小的功能。
功能虽小,但从构思到实现,再到稳定运行,几乎包含了软件开发的全过程。
这个过程完美的展示了 编写一段优秀的代码 需要考虑多少东西,我记下来给大家分享一下。
 

需求很简单
分析各类日志文件(如:Oracle的错误日志)的内容,并将其中符合条件的行转发到Syslog。
 

需求分析
读取日志并过滤内容比较简单,这个需求的关键点在于:必须考虑时效性和性能。

通常日志是不断增长的,
时效性,要求程序尽快分析新增日志。
性能,要求程序能够对日志做增量分析,以免去不必要的I/O开销。

 
制定方案
根据需求分析得到的功能需求和非功能需求,我们一致认为,需要一种手段来实时获取文件中的新增内容。
在Unix/Linux上,tail指令可以实现这种功能。 

我们调查tail指令后发现一个严重的问题:
tail无法处理日志的切换。

这一问题否决了我们使用unix已有指令写shell的想法,于是决定自己编写一个类似tail的小工具。
在实现方案上,可以采用C或者Java两种方式,基于如下考虑:
1、日志在Unix/Linux上的情况占80%以上
2、目标主机上不一定具备java环境
3、要求对目标主机的资源消耗尽量小 

因此,决定采用C来做实现,由于项目组人员以JAVA为主,所以领导亲自上阵了。
 

技术预演
技术预演是为了验证方案的可行性,如果方案的设想因为技术原因无法实现,则需要修改方案。 

这个小功能的技术预演主要包括:
1、分析tail源码,了解tail实时获取文件增量的原理。
2、调查C中如何发送Syslog
 

实现: 

基本功能
领导最初认为这个功能很简单,不会超过30行代码,而基本功能也确实很简单。 

功能增强
支持打开多个文件,
支持日志切换,
支持使用正则表达式对行进行过滤,
支持通过命令行参数制定Syslog输出的Severity和Facility

 
测试
将程序编译后挂到实际环境中测试,很快发现一些问题,
比如:
对参数的异常情况考虑不足
文件切换有两种模式,需要兼容(一种inode变,一种不变)
需要检查目标文件是否存在、是否为普通文本文件(二进制文件无法处理、目录也可以当做文件打开)
 

程序修正
解决测试中遇到的问题,
增加文件类型判断、兼容文件切换模式、参数错误时输出Usage等 

除此之外,程序还进一步考虑了异常情况下(如:进程被kill)对资源的释放等。
 

再测试
在HP-UX平台上,功能测试基本没发现问题,
但迁移到Linux平台上发现正则表达式解析有问题,不能过滤掉无用的行。
 

再次修正
这次修正主要解决跨平台兼容性问题。
最终程序超过300行,超过最初预期10倍。
 

验收测试和稳定性测试

在个平台上部署,并长时间运行。
 

打包发布
预编译出常见平台的二进制代码,
编写相关安装和使用说明。 

----
 

软件开发,无论功能大小,其实都需要这些过程,
只是对于小功能,每个阶段的切换很快(有时候只是脑海里的想法而已),
但心里要清楚:
有时候想省事儿,可能反而会更加费事儿,比如需求分析的时候搞不清楚就开始做,只会引起很多的返工。
而另外一些时候,卡在一个地方太久,想不清楚,可能需要先试着向前推进,很多问题就会“迎刃而解”。

 

山穷水复疑无路,柳暗花明又一村,

这是在软件开发过程中经常能够体会到得心路历程。

------解决方案--------------------
预计的任务复杂程度有时候超出我们自己的想象。
经楼主提示,以后改改linux的某些命令。
赞一个
------解决方案--------------------
基本上是一个完整的大项目开发的步骤,但是大项目在调研阶段其实是很费时间和精力的!!
------解决方案--------------------
jf.
软件开发就是这样,哪怕一个小小的菜单、一个小小的按钮,
都可能蕴藏着很多的代码,比如菜单自绘、多线程等等,远远不止用户所看到的那些,
我是深有体会
------解决方案--------------------
要是每台电脑上都装有jdk,java早就普及了
------解决方案--------------------
探讨
要是每台电脑上都装有jdk,java早就普及了

------解决方案--------------------
tail无法处理日志的切换。?????

tail -F?
------解决方案--------------------
我用的是快速开发模式。
即要做什么马上就写,然后使用过程中修改。
还没有做就考虑个半天,弄不好完不成。

当然快速修改,要有比较好的框架,最主要的特点的方便升级和修改。
突然要加个功能,或修改个功能,是要马上就能改掉的,而不是加个属性就要改个半天的那种。
------解决方案--------------------
学习了,走IT这一行或不走这一行,这种从小处看到大处的能力都是十分有魅力的

文章评论

做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
程序员的鄙视链
程序员的鄙视链
10个调试和排错的小建议
10个调试和排错的小建议
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
 程序员的样子
程序员的样子
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
如何成为一名黑客
如何成为一名黑客
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我的丈夫是个程序员
我的丈夫是个程序员
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
代码女神横空出世
代码女神横空出世
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
一个程序员的时间管理
一个程序员的时间管理
每天工作4小时的程序员
每天工作4小时的程序员
老程序员的下场
老程序员的下场
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我是如何打败拖延症的
我是如何打败拖延症的
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
旅行,写作,编程
旅行,写作,编程
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
鲜为人知的编程真相
鲜为人知的编程真相
程序员都该阅读的书
程序员都该阅读的书
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
程序员和编码员之间的区别
程序员和编码员之间的区别
中美印日四国程序员比较
中美印日四国程序员比较
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
漫画:程序员的工作
漫画:程序员的工作
为什么程序员都是夜猫子
为什么程序员都是夜猫子
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有