周一到周三,我的领导亲自操刀,完成了一项小小的功能。
功能虽小,但从构思到实现,再到稳定运行,几乎包含了软件开发的全过程。
这个过程完美的展示了 编写一段优秀的代码 需要考虑多少东西,我记下来给大家分享一下。
需求很简单:
分析各类日志文件(如: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平台上发现正则表达式解析有问题,不能过滤掉无用的行。
再次修正:
这次修正主要解决跨平台兼容性问题。
验收测试和稳定性测试:
在个平台上部署,并长时间运行。
打包发布:
预编译出常见平台的二进制代码,
编写相关安装和使用说明。
----
软件开发,无论功能大小,其实都需要这些过程,
只是对于小功能,每个阶段的切换很快(有时候只是脑海里的想法而已),
但心里要清楚:
有时候想省事儿,可能反而会更加费事儿,比如需求分析的时候搞不清楚就开始做,只会引起很多的返工。
而另外一些时候,卡在一个地方太久,想不清楚,可能需要先试着向前推进,很多问题就会“迎刃而解”。
山穷水复疑无路,柳暗花明又一村,
这是在软件开发过程中经常能够体会到得心路历程。
分享到:
相关推荐
一个用Python开发的例子加测试的例子介绍软件开发的过程。麻雀虽小五脏俱全。。值得一看
C#运控框架 雷赛运动控制 DMC系列 运动控制项目 C#源码 1.别看它界面丑,里面的应有应该尽有; 2.麻雀虽小五脏俱全,很适合新手的一个学习项目,绝对推荐
管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: ...
秀气:简洁、美观,给您焕然一新的视觉体验,让你都不敢相信这是一个后端程序员设计和开发实现的 丰富:注册、登录、搜索、书架、书签、阅读偏好设置等功能齐全,麻雀虽小,五脏俱全 强大:微信官方小程序开发工具...
micro:bit是由英国BBC公司推出的面向青少年编程教育的微型计算机,别看它身材不大,但麻雀虽小五脏俱全,一块小板子上集成了加速度传感器,磁力传感器,两个可编程按钮,25个单色led,蓝牙等常用传感器设备,而尺寸...
采用Swing+SQLServer 2000实现了一个简单的进销存管理系统,正所谓麻雀虽小五脏俱全,对于初学者具有一定的参考价值,是不错的学习资源。 实现企业信息化管理是现代社会中小企业稳步发展的必要条件,它可以提高...
这是在软件测试课程里面开发的一个用来学习软件测试的小系统,麻雀虽小,但五脏俱全,提供给大家学习使用(agiltest文件夹为项目源代码) 项目名:火车订票系统 技术使用:后端Springboot + Mybatis + Maven包管理 ...
软件产业从诞生到如今的高速发展,不过经历几十年的时间,但是,麻雀虽小,五脏俱全。软件的开发过程经历了由浅及深、由简单到复杂的n多过程。包括由面条式编程到结构化编程再到后来的面向过程以及面向对象。 面条式...
本应用是用BeeGo框架进行的一个WEB应用快速开发,是一个在生产环境实际运行的商业软件。 适用数据库MySQL,详细配置请参阅conf\global\app.ini。本应用打包部署工具为Bee。 前端采用了amazeui制作工作台页面,标准的...
麻雀虽小五脏俱全,是一个很好的学习php项目开发的案例. 4: 代码完全开源,无任何加密,目的就是希望可以让更多的人来了解php ,学习php,使用php. 5: 源代码中重要功能部分已经加注详细注释说明,方便使用者和程序爱好者...
论文叙述了一个公司内部办公信息管理系统的概况。重点介绍了企业内部办公信息管理系统的实现过程:包括系统分析、 系统调查、 数据流程分析、功能设计、 数据库设计、 系统实现、 系统测试和调试。本系统主要...
北京:北京:北京:北京:北京:北京:北京:北京:北京:北京:北京:北京图书馆图书馆图书馆图书馆图书馆图书馆图书馆图书馆,北京得到方式实现,很难形成比较完整的一个功能逻辑,也很难从更全的角度去来展示某些...
麻雀虽小,五脏俱全,本软件功能强大,设计细微,是您电脑计时计费的不二之选。 2.0版采用Delphi工具开发,克服了1.0版使用C#开发,软件占用内存比较大,需要.NET Framework 3.5的支持,安装文件较大等缺点,使软件...
爱易浏览器(iie)是一款小巧简洁但功能完备的新型浏览器。他是基于IE内核,由爱易工作室耗时一年多开发完成的。 麻雀虽小但五脏俱全。爱易浏览器就是这样一只可爱的小麻雀。 多窗口打开页面,较小的系统...
Martin Fowler 如此评价 JUnit:在软件开发领域,从来就没有如此少的代码起到了如此重要的作用。它大大简化了开发人员执行单元测试的难度,特别是 JUnit 4 使用 Java 5 中的注解(annotation)使测试变得更加简单。 ...
Android 是一个专门针对移动设备的软件集,它包括一个操作系统,中间件和一些重要的应用程序。 Beta 版 的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 ...
就是一个电脑,只不过是微型的,麻雀虽小,五脏俱全:它内部也用和电脑功能类似的模块,比如CPU,内存,并行总线,还有和硬盘作用相同的存储器件,不同的是它的这些部件性能都相对我们的家用电脑弱很多,不过价钱也...
麻雀虽小,五脏俱全,本软件功能强大,设计细微,是您电脑计时计费的不二之选。 1.开机启动,自动最小化到系统托盘,不影响正常操作。 2.软件乃作者亲手封装,无任何垃圾插件,不向系统文件夹增加垃圾文件,可任意...
FastStone Image Viewer 中文版是由 FastStone 公司开发的一款免费且小巧的看图软件,它提供使用者方便的操作界面,让使用者可以通过它的操作界面来浏览图片,且还支持了连续播放的功能,让使用者能够轻松的浏览目录...
虽然体积很小,但是其功能却毫不含糊,该有的功能都有了,只所谓麻雀虽小五脏俱全。通过快捷键即可进行截图:区域截图(Print),窗口截图(Alt+Print)和全屏截图(Ctrl+Print)。如果是笔记本,截图快捷键貌似需要...