构建一个项目,是一件极其复杂的事情。尤其是那种非常复杂的工程。
拿Java来说,构建一个项目的问题有一下这么几个:
现在,有一些人还是在使用IDE来进行项目的配置管理的,它的缺点是什么呢?
现在,大多数的Java开发人员都采取了使用Ant脚本进行构建的方式。因为Ant脚本:
但是,Ant脚本也不是一点儿问题也没有。首先,Ant脚本的重用性不好。一般意义上的Ant脚本重用,就是Copy&Paste。Ant对此没有什么封装。其次,Ant使用起来也比较困难,XML格式的脚本不是十分的好写(有了Eclipse支持以后,强了很多),作为脚本语言,Ant非常的不完善(连字符串处理的功能都非常弱,这一点Ant-Contrib提供了一些好一点儿的支持)。Ant的扩展机制完全基于Java,不能做到即时修改。
除了Ant,在Java中,还可以采用Maven进行项目的构建。Maven项目是一个非常出色的项目。首先,它体现了Apache资深开发人员的项目组织和管理智慧。另外,它以统一有效的方式实现了项目的整个构建生命周期。Maven的黑盒化操作也给项目的配置管理减轻了负担。如果采用了Maven的话,项目的组织方式、项目的构建方式、项目的发布控制全部迎刃而解。而且你所作的扩展,也是以插件的方式来透明化的起作用的。重用性比Ant高很多。使用起来也非常简便。
但是,Maven也并不是没有缺点。首先,Maven的项目组织方式是固定的,虽然这种固定的方式确实非常有道理。但是,如果与现有项目不兼容或者与IDE的项目组织方式不兼容的话,那么就完全不起作用了。比如Eclipse的Plugin项目,PDE的项目组织格式就与Maven2的项目格式完全不兼容。而且,Maven2自身的Manifest文件生成功能比较弱,对于OSGI项目而言,根本没有可用性(因为要造成重复工作)。由于Maven采用的是黑盒操作方式。操作不透明。你如果想作一些简单的自定义操作,也必须写一个Maven的插件。插件的测试、调试和修改都要比Ant困难得多。
那么有什么好办法呢?我推荐采用Ruby。
首先,Ruby是一种脚本语言,支持的环境有很多,而且还可以采用JRuby来运行。而且,Ruby支持一个类似Make语法的脚本语言,那就是Rake。
Rake脚本其实就是标准的Ruby脚本,拥有所有Ruby拥有的特性(面向对象等)。而Ruby也有非常好的依赖控制系统Gem(我个人认为比目前的Maven的依赖控制系统要好)。由于Ruby是标准的解释型语言,所以操作都是非常透明的,也可以做到即时修改的效果。所以,用来作构建脚本是非常合适的。
Raven除了提供一些处理Java的RakeTask之外,它还提供了对MavenRepository的Gem封装,这样,你就可以采用Gem的方式来获取Java的项目依赖了。
Rake是我所看到的第一个用面向对象语言来写构建脚本的。但是,它也并不是完全没有缺点的,对Java的支持太少,就是一个很讨厌的缺点。
如果想要采用Rake,而且还要做到象Maven那样好,那么至少要有以下几个功能(除去Raven已经提供的功能):
目前我能想到的办法只有一个,就是自己写(呵呵)。大家有什么高见?
中等收入家庭该如何理财?
作者:陈婷
张平是某建筑企业的生产管理人员,月收入3000元。妻子是一名普通的公司职员,月收入2000元。两人有一个活泼可爱的孩子,还未满周岁。一家三口每个月的基本生活开销为1500元。另一笔大开销是交通费,由于张平的工作地点经常都在郊外,也没有班车可以搭乘,所以他的交通费用每月将近800元。两人均为28岁,年轻力壮很少生病,没有什么医疗费支出,只是小宝宝需要平均每月200元左右的医疗保健费用。这样算下来,他们每个月可以结余2500元。
此外,两人的年终奖励合计有8000元左右,存款和债券利息有5000元,股利、股息有1000元左右,年度性收入在14000元左右。年度性支出方面,则主要有一些人情往来,大约在1000元左右。另外还要孝顺给父母1000元左右。
家庭资产多为存款
细观他们的家庭资产,"最大头"的比例就是存款了。其中现金和活期存款在5000元左右,定期存款则有20万元之多,股票上投资了25000元,去年还买进了10000元的基金。加上35万元的自住房,房子面积48平方米。目前,他们的家庭总资产为59万元左右。由于他们是在结婚前花了3.5万元"成本价"从父母处购得的售后公房,所以目前也没有什么债务。
5年后换购大房子
张平和妻子短期内没有什么特别大的计划,倒是希望5年内可以再买一套房子,或者以现有房产换购一套面积较大的房子。因为随着孩子的逐渐长大,一家三口需要的生活空间肯定要增大,而且对居住环境的要求可能会越来越高。
未雨绸缪累积教育金
今年最让张平和妻子开心的事情,莫过于两人在去年有了个爱情的结晶。小孩现在还未满周岁,要把孩子培养到大学毕业,还需要不少钱。正所谓"可怜天下父母心",张平和妻子甚至还希望在小孩成家时,至少能给孩子20万元。这"教育金"和"子女婚嫁基金"可是不小的费用,还需要努力积累。
考虑增加一定的保障
张平夫妻两人的单位都有社保和医疗保险,父母均健在,也有社保。但父母现在健康不代表未来没事,考虑到社保的保障力度不够,还是有些担心他们以后的养老和医疗支出。小夫妻本身的健康医疗及养老储备也是张平考虑的一个重点问题。张平目前的想法是,他希望自己和妻子退休后每年能有相当于现在2-3万元的生活费用。
期待专家的分析和建议
此外,张平认为自己家的财务管理过于松散,为了顺利解决孩子的教育费用、自己的买房费用、夫妻俩和父母的医疗和养老费用,希望专家能帮他给出一定的分析和建议,以便他们能更加轻松地完成家庭的各项理财计划。
专家建议一:资产配置分析
一、财务状况分析
1.收支分析:张平夫妇目前家庭年度总收入为74000元。家庭总支出为32000元。结余比例为57%。可以看出该家庭是相当节省的。而且该家庭的收入也比较稳定,主动性收入(68000元)占总收入的92%。但应当看到,随着家庭新成员的到来和不断成长(目前还没有教育性支出),该家庭的日常开支将会慢慢提高。而且该家庭目前没有安排任何商业保险,在这个方面显然也需要有一些安排。所以该家庭未来的支出预期将会上升。
2.资产分析:张平夫妇目前家庭净资产已经有59万元。其中金融资产为24万元,房产资产为35万元,金融资产比重为40.7%,还算基本合适。该家庭没有任何负债,财务稳健。家庭资产配置的主要问题是现金存款部分太高,占所有金融资产的83.3%,需要调整。
3.保障分析:尽管张平夫妇和他们的父母都有社保。但保障程度显然不足,需要通过商业保险做一定的补充。特别在他们的孩子出生以后,这对小夫妻就更加需要保障了。
二、理财阶段、理财重点和理财目标分析
张平夫妇目前才28岁,孩子也刚刚出生。此时正是家庭建设和事业发展的重要阶段。在该阶段理财的重点应当是安排好家庭生活,同时应当集中精力到各自事业的发展方面,因此投资的安排不宜过于复杂,应当以简单易操作为主要考虑原则。
张平夫妇对未来有很多设想和安排。他们提出的理财目标主要有:
1.五年后再买一套房产或换购一套大房子,用于改善居住条件。
2.孩子未来直到大学毕业的教育费用。
3.孩子未来的婚嫁基金:20万元。
4.夫妻两退休后每年能有相当于现在2-3万元的生活费用。
其实,目前张平夫妇孩子刚刚出生,自己也很年轻,此时谈论30年以后的孩子婚嫁或自己的退休都尚显太早。目前阶段理财的目标应当是将家庭现有的财务和孩子出生以后的家庭保障等方面要安排好。
三、当前财务安排建议
1.增加房产投资:孩子出生以后的确需要更大的生活空间,目前48平方米三人居住显得太拥挤。同时考虑到他们实际的资产状况和未来月供能力,我们建议目前就通过出售现有住房、然后支出现有存款10万元左右,再负债15万元来购买一套70万元左右的房产,使得总居住面积达到75平方米以上。而完全不必等到5年后再买。那时的房价和现在绝不是一个概念。而且该家庭目前资金充裕,又没有任何负债,换购一套房产在财务的安排上没有任何问题。
2.安排适当保险:孩子出生以后家庭保障就显得格外重要了,应当安排好充足的保障。具体来说,张平夫妇的寿险、大病和意外保险都需要。孩子也需要安排一定的医疗保险。保险的支出额度应当安排在一个月左右的家庭收入为宜。主要应当安排家庭保障类的保险,储蓄理财类的保险暂缓。
3.构建基金组合:因为张平夫妇还很年轻,应当争取在事业上更上层楼。所以在投资上应当尽量简单。因此,我们建议张平夫妇的金融资产除保留一部分存款外应当主要通过购买基金来安排,构建一个基金组合,长期投资,让专家来帮助理财,省心省力。目前的股市投资可暂时保留,但今后也应当择机退出,全部通过基金来投资。而且今后每月收入的结余也应当采用定期定量的方式投入到家庭的基金组合中。
——本刊首席理财师徐建明
专家建议二:投资建议
对于张平先生的理财需要,我们提出以下几点建议,希望能够对他有所帮助。
1.对于孩子的“教育和婚嫁基金”
我们建议做个"傻瓜型"的计划。那就是在与理财专家沟通后,做一个基金的“一篮子”方案,即将货币基金、债券基金、股票基金按1:2:7的比例进行定期定额的投资。由于张平夫妇年纪较轻,承担风险的能力较强,所以我们的建议中适当增强了股票基金的投资比例。同时,我们也提醒张平先生要在家庭情况发生巨大变化时,对投资比例进行适时的调整。长期性定期的投入会更好地增加收益,控制风险也无须花费太多精力。
2.对于夫妻俩的购房需求
张平夫妇的购房是为了自住需要,因此我们建议可以每年投入一定比例的资金进入保本增值市场,来进行购房基金的积累。如保本基金、货币市场基金、记账式国债、以及最新发行的储蓄国债等。这样既可保持其灵活性,又可以在5年之内寻求适当的时机以按揭贷款形式购入新房。
至于未来是卖了现有房产换购新房,还是增大负债比例购置新房保留现有住房,则要看未来的家庭资产总量和月收入能力。若未来能力足够,当然也可以保留现有老房子用于出租,用租金来缓解部分月供能力。若未来家庭积累的资金量不够,则可以选择出售后换购大房子,负债额度可以由当时的月收入能力来计算。
虽然理论上认为月供额度只要不超过月收入的50%就是安全的了,但我们建议月供最好不要超过月收入的1/3,否则对一家三口的基本生活将会产生不小的压力,甚至沦为“房奴”一族。
3.在张平先生的家庭情况中我们注意到,其本人是建筑企业的生产管理人员,建筑行业是一个受经济波动影响较大的行业。这对他家庭收入长期的稳定性有不利的因素存在。因为夫妇二人均只有28岁,所以我们建议张平夫妇现在每年也为自己准备一笔“教育基金”。进一步的“充充电”,学习一些新的知识和技能来提高自己。在我们看来理财不仅仅是对金钱进行投资规划,也可以是对自身进行投资规划,而且或许收益回报会更高,也能更好、更快地实现家庭理财计划。
——建行上海市分行卢湾支行马钧洁
专家建议三:保险建议
家庭所面临的风险不外乎人身损失风险、财产损失风险和责任损失风险。从表面上来说张平一家的财务状况基本稳定,没有什么债可“负”,但是一旦碰到重疾或者意外等不确定因素的发生,不仅会严重影响家人的心理状态,而且会对家庭的财务状况造成不同程度的冲击,所以绝对是可不言、但不可不理的。况且,他们未来还打算购买大面积的房子,估计需要增加债务负担。
风险的分析应该从两个角度入手:损失发生的可能性和损失发生后的严重程度。正值盛年的张平夫妇的身故可能性很低,但是发生意外事故的风险不容忽视,尤其是张平本人从事的是建筑企业的生产管理工作。万一有一方发生不测,家庭收入就会减少一半以上。
解决这个问题的最佳途径之一莫过于人身意外伤害保险,它的最大优势就是在引起损失的事故发生时提供一笔收入,从而可以弥补损失,缓解生者面临的财务压力。
将来购买新房有了负债之后,还应该增加一定的寿险保障。
根据张平的需求,他想为自己和妻子购买养老和医疗方面的保障,以及为儿子选择教育金之类的险种。但按照他的家庭收入能力,我们建议他暂缓夫妻俩人的养老保险计划,等到十年以后,也就是37岁、38岁以后再考虑养老保障。
夫妻俩人的医疗保障,则应该从现在开始做起,毕竟他们也是"奔三"的人了,虽然现在年富力强甚至没有什么医疗费用指出,但再过两三年肯定会明显感觉到身体的亚健康状态来临。而且,随着抚育幼儿所付出的超额体力和精力,张太太的身体状况可能面临直线下滑的趋势。为此,张平可以先为自己和太太选择一定的医疗补贴保险和大病保险。孩子方面,如果体质较弱,夫妻双方的单位又不能负担任何医疗费用,那么也可以为孩子选择一份儿童医疗保险,向保险公司转移家庭的医疗负担风险。
——上海合泰保险超市高逢洁
项目开发过程模型就是对于项目开发过程的概念建模,从而能够实现在理论上对于软件项目开发过程进行量化分析。
软件开发过程模型以RationalUnifiedProcess(简称RUP)为代表,如下图
图1、RationalUnifiedProcess
但是也并不是只有RUP一种,比如AgileUnifiedProcess(简称AUP)
图2、AgileUnifiedProcess
总体来说,RUP是最细化的项目开发过程模型,不管你采用什么样的开发方式,整个开发过程的每一个过程你都是无法逃掉的(我们后面会讨论这个),因为这代表了整个软件开发实践的客观规律,只是在定义上有所不同,侧重点上有所不同,对于迭代的看法有所不同罢了。
如同它的概念所示,软件项目开发过程就是对软件项目开发过程的概念建模,从而能够实现在理论上对于软件项目开发过程进行量化分析。
那么,这种量化的分析到底有能有什么好处呢?
我们在引子里说过:任何的软件项目都有它存在的目的,都是为了解决一些现实中的问题。可以把这个成为这个项目的目的,可以把需要解决的问题的需求称作这个项目的需求。
而对于商用(尤其是企业级应用)软件项目开发而言,最基本也是最重要的目的就是以最小的成本,在项目交付的期限内,提供稳定的、可靠的软件,用以解决用户提交的所需要解决的问题,并且如有可能,必须为现实生活中问题的变更引起的用户需要解决的问题的变更从而要求的软件功能的变更做好准备。
l为了能够把客户的问题描述清楚,必须进行业务建模和需求收集;
l为了能够把收集完的问题需求转变成为可以信息化解决的问题并且解决,必须对其进行软件化设计并进行实现;
l为了保证软件产品的质量,必须进行足够多的测试(看看硬件厂商是怎么测试的?);
l为了能够让软件产品正常运转,必须进行软件的部署;
l而在软件开发的过程当中,对于项目的管理、代码的管理、还有资源的管理,在哪一个软件项目开发中能缺少?
综上,对这些过程的建模和定量的分析,并且确定在整个开发过程中各个阶段所占的份额和所拥有的重要性,对于保证项目(尤其是大项目)的平稳开发和增强项目开发管理有着重要的作用。
并且,确定了项目开发过程模型,对于确定项目管理方式和提供技术、工具支持有着非常重要的作用。
既然我们已经有了一个明确的定义,并且能够把它分解成为几个部分(当然,我们将会看到,这些部分本身也是十分复杂的)。那么,看上去下一步,我们的任务就是一步一步的分析每一个部分。
但是,且慢,这些部分有些是没法讨论的(比如业务建模,它与用户的域专家有关,或者跟一些国家、国际标准有关,跟计算机软件开发没太多的关系——除非是IDE之类的),有些是仁者见仁、智者见智的部分(比如设计和实现),有一些可以不必花太多口舌去讨论(比如软件项目的部署和资源管理),这一点AUP给我们开了个好头,我们现在需要讨论的就是:
l需求分析
l测试
l配置管理
l项目管理
但就是这么几个,就足够我们讨论的。事实上,如果能够对这些问题都全面的分析并且提出自己的见解和解决方案的话,分量足够一个博士论文(起码重量上差不多),也许那样我可以出本书,呵呵,玩笑。
我只能尽力的往下分析,但是,我更希望的是大家能够有所反馈。因为,在软件设计中很多问题都是隐藏的(像地雷一样),直到你踩上它为止,你都不会发现它。
我很希望能够有反馈使我避免低级的错误。
任何的软件项目的开发都必然离不开了解需求、根据需求进行设计、根据设计进行实现这些过程。不管是多大的项目,也不管是采用何种开发方式。
但是,设计的方式却有多种,没有谁会规定,只有采用UML图进行建模才叫设计。也没有谁规定,只有“设计”好了的项目才能开始代码实现。
一个人几天就可以完成的项目和几个小组好几个月才能完成的项目相比,它们面临的实际中的开发问题,和开发结束后面临的维护问题都是不可同日而语的。
而且,技术的角度上看,适合大的项目的开发方式也未必一定适合小的项目。
好了,说了这么多,我只是想说:
综上所述,软件开发过程是一个非常复杂的问题,对于做技术的人来说(尤其是做计算机软件技术的人),解决问题的方式只有一种,分析问题、根据问题设计解决方案、然后实现解决方案来解决问题(解决方案未必一定是软件)。