??xml version="1.0" encoding="utf-8" standalone="yes"?> jar包名U?/span> 所在位|?/span> 说明 antlr-2.7.6.jar hibernate/lib/required 解析HQL aspectjrt spring/lib/aspectj AOP aspectjweaver .. AOP cglib-nodep-2.1_3.jar spring/lib/cglib 代理Q二q制增强 common-annotations.jar spring/lib/j2ee @Resource commons-collections-3.1.jar hibernate/lib/required 集合框架 commons-fileupload-1.2.1.jar struts/lib struts commons-io-1.3.2 struts/lib struts commons-logging-1.1.1 单独下蝲最新版?/span> struts spring dom4j-1.6.1.jar hibernate/required 解析xml ejb3-persistence hibernate-annotation/lib @Entity freemarker-2.3.13 struts/lib struts hibernate3.jar hibernate hibernate-annotations hibernate-annotation/ hibernate-common-annotations hibernate-annotation/lib javassist-3.9.0.GA.jar hiberante/lib/required hibernate jta-1.1.jar .. hibernate transaction junit4.5 mysql- ognl-2.6.11.jar struts/lib slf4j-api-1.5.8.jar hibernate/lib/required hibernate-log slf4j-nop-1.5.8.jar hibernate/lib/required spring.jar spring/dist struts2-core-2.1.6.jar struts/lib xwork-2.1.2.jar struts/lib struts2 commons-dbcp spring/lib/jarkata-commons commons-pool.jar .. struts2-spring-plugin-2.1.6.jar struts/lib
]]>
试人员的首要职责是找bugQ但是最重要、最Ҏ的职责应该是在Y件品发布前保公司的Y件品满顾客的需求?/p>
试l采用RBT(Requirements-based testing)Q基于需求的试Ҏ会ɋ试更加有效Q因为它使测试专注于质量问题产生的根源?/p>
研究报告指出Q多q来Q大部分的Y仉目不能按计划完成Q不能有效控制成本。大部分目p|的首要原因是软g质量差,D大量的返工、重新设计和~码。其中Y件质量差的两大原因是QY仉求规D明书的错误、有问题的系l测试覆盖?/p>
需求规D明书中的错误
我们l常听到最l用h怨、不用我们的软gQ而这些Y件还通过了严格的试和QA。对于这Ҏ们不会感到惊Ӟ原因是我们知道需求从一开始就是错误的?/p>
一调?James Martin (“An Information Systems Manifesto,” Prentice Hall, 1984)表明56%的缺陷其实是在Y仉求阶D被引入的。而这其中?0%是由于需求文档编写有问题、不明确、不清晰、不正确D的。剩下的50%是由于需求的遗漏D的?/p>
有问题的试覆盖
要获得满意的试覆盖率是很难的。尤其现在的pȝ都比较复杂,功能场景很多Q逻辑分支很多Q要做到完全的覆盖几乎不可能?/p>
再者,需求的变更往往~Z控制Q需求与试用例之间往往~Z可跟t性?/p>
RBT三大最佛_?/p>
1?nbsp; Test early and often.早试Q频J地试
认需求的业务价倹{?/p>
各利益相x应该寚w求进行评审?/p>
通过用例查需求的完整?/p>
应用语言分析技?/strong>保需求文档清C_不会引v同一问题不同人有不同的解释?/p>
2?nbsp; Test with your head, not your gut.不要单凭l验试
不要依赖试人员的经验来设计试用例Q应该采用系l、严格的试用例设计ҎQ而不是依赖有l验的测试h员的技巧。通过q样的方式来增加试覆盖的有效性。格式化、结构化的需求文档有助于试人员评估需求的试覆盖率?/p>
通过试用例评审来检查测试用例存在的错误Qƈ且找出需求的不之处?/p>
3?nbsp; Test with measurement and improvement in mind.试q程中要保持度量
在用基于需求的试Ҏ的过E中Q保持对需求的可追t性非帔R要。保持需求与试用例及测试之间的可追t性有助于监视q度、度量覆盖率Q当然也有助于控刉求变更?/p>
我刚才说到哪里了Q对了,我要提徏议?/span>
毕业前练好写?/span>
如果不是Linus Torvalds不断地散布福韻I请问Linux操作pȝ会成功吗Q虽然他是一个非常聪明的计算机天才,但是Linux吸引来全世界一大批志愿者的真正原因却是Linus Torvalds的表达能力。他通过电子邮g和邮件列表用书面形式传播自己的想法,最l引起了所有h的注意?/span>
你听说过现在风靡一时的“极限~程[ ] ”Q?/span>Extreme ProgrammingQ吗Q我在这个地方不谈我Ҏ限编E的看法Q我只说如果你听q这个词Q那么原因就是它的倡导者都是一些非常有才华的作家和演说家?/span>
即我们~小范围Q将目光局限在M一个Y件开发团体中Q你也会发现该团体中最有权势和影响力的E序员正是那些表达能力强的程序员Q他们无论是做书面表达还是做口头表达Q都能够清晰、自如、具有说服力C达观炏V此外,长得高也有助于提升媄响力Q不q这个不取决于你?/span>
一个普通程序员与一个优UE序员的区别Q不在于他们懂得的编E语a谁多谁少Q也不在于他们喜Ƣ用Python语言q是喜欢?/span>Java语言Q而在于他们能否与他h交流思想。如果你能说服其他hQ你的力量就可以得到攑֤。如果你能写出清晰的注释和技术规D明书Q其他程序员p够理解你的代码,因此他们p在自q代码中用,而不必重写。如果你做不到这一点,你的代码对其他h没有h倹{如果你能ؓ最l用户写出清晰的使用手册Q其他hp明白你的代码是用来干什么的Q这是唯一让别人明白你的代码有何h值的Ҏ?/span>SourceForge[ ]上有许多优美的、有用的代码Q但是它们都像被埋葬了一PҎ没h来用Q原因就是它们的作者没有写好用说明(或者压根就没写Q。这样一来就没有人知道他们的成果Q他们杰出的代码p亡了?/span>
如果一个程序员不会用英语写作、没有良好的写作能力Q我׃会雇他。如果你能写Q不你d家公司工作,你很快就会发现写作技术文档的d会落C头上Q这意味着你已l开始在攑֤自己的媄响力了,理层正在注意到你?/span>
大学里有些课E被公认?span style="font-family: Times New Roman">“写作密集?/span>”Q?/span>writing intensiveQ课E,q就是说Z拿到学分Q你必须写作多得可怕的文字。一定要Mq样的课E!不要学U,只要q门课每周甚x天都要你写东西,你就M?/span>
你还可以动手写日记或者网志。你写得多Q写作就会变得越Ҏ。写h容易,你就会写得越多。这是一个良性@环?/span>
毕业前学?span style="font-family: Times New Roman">C语言
W二Ҏ要讲的是C语言。请注意Q我说的?/span>C语言Q而不?/span>C++。虽然在实际使用?/span>C语言已经来罕见,但是它仍然是当前E序员的共同语言?/span>C语言让程序员互相沟通,更重要的是,它比你在大学中学到的“C语言”Q比?/span>ML语言?/span>Java语言?/span>Python语言或者其它正在教授的行垃圾语言Q都更接q机器。你臛_需要花一个学期来了解机器原理Q否则你永远不可能在高语言的层ơ写出高效的代码。你也永q无法开发编译器和操作系l,而它们恰恰属于目前程序员能够得到的最佛_作之列。别Z永远不会攑ֿ大型项目的架构设计交给你。我不管你懂多少延箋Q?/span>continuationQ、闭包(closureQ、异常处理(exception handlingQ,只要你不能解释ؓ什?/span>while (*s++ = *t++)Q这句代码的作用是复制字W串Q或者不觉得q是世界上对你来说再自然不过的事情,那么你就是在盲目无知的情况下~程。在我看来,q就好像一个医生不懂得最基本的解剖学在开处方Q他看病的根据完全是因ؓ那些娃娃脸的医药厂商销售代表说q种药有用?/span>
毕业前学好微观经学
如果你没有上qQ何经学评Q那么我首先来做一个超短的评论Q经学是这L学科之一Q刚开始学的时候蘪轰烈烈,有许多有用的、言之有理的理论和可以在真实世界中得到证明的事实Q等{;但是Q再学下d每况愈下Q有用的东西׃多了。经学一开始那个有用的部分正是微观l济学,它是商业领域所有重要理论的基础。跟在微观经学后面的东西就不行了。你接下来学的是宏观l济学,如果你愿意,管跌去,也不会有什么损失。宏观经学开头的部分是利息理论,内容比方说是利率与失业之间的关系Q但是怎么说呢Q看上去q部分里面还没有被证实的东西多于已经被证实的东西。学完这部分Q后面的内容来糟p,许多l济学专业的学生实际上都变成在搞物理学,因ؓq样才能在华街上找到更好的工作。但是不怎样Q你一定要d微观l济学,因ؓ你必L懂供l和需求,你必L白竞争优势,你必ȝ解什么是净现|NPVQ,什么是贴现Q什么是辚w效用。只有这P你才会懂得ؓ什么生意是现在q种做法?/span>
Z么计机pȝ学生也应该学l济学?因ؓQ从l营一家公司的角度来看Q比起那些不懂的E序员,一个理解基本商业规则的E序员将会更有h倹{就是这么简单。我无法告诉你有多少ơ我是那样地充满挫折感,因ؓ我看C太多的提Z些疯狂的x的程序员Q这些想法在代码上也许可行,但在资本M世界中毫无意义。如果你懂得商业规则Q你是一个更有h值的E序员,你会因此得到回报的,但是前提是你要去学习微观l济学?/span>
不要因ؓ枯燥׃选修非计机专业的课E?/span>
x?span style="font-family: Times New Roman">GPAl点的一个好Ҏ是多选修非计机pȝ评。请千万不要低估你的GPA的重大意义。千千万万的Zl理和招聘h员在拿到一份简历的时候,W一眼就会去?/span>GPAQ包括我也是q样。我们不会ؓq种做法道歉。ؓ什么?因ؓGPA不反映单个的成WQ而是代表了许多个教授在一D很长的旉中,在不同的情况下,对你的表现的一个ȝ评估?/span>SAT成WN不够吗?哈,那只不过是一场几个小时的试|了?/span>GPA中包括了四年大学期间你的论文、期中考试和课堂表玎ͼL有几百次之多。当ӞGPA也有自己的问题,不是癑ֈ之百准确。比如,q些q来Q老师对学生的打分来宽松,学习成W有通货膨胀的趋ѝ再比如Q?/span>GPA无法反映评的难度,没h能够看出你的GPA是来自无名社区大学家政系的轻松课E还是来自加州理工学院针对研I生的量子力学课E。渐渐地Q我形成了一套自q做法Q首先我会过滤掉所有来自社区大学?/span>GPA低于2.5的简历,然后我会要求剩下的hl我寄成l单和推荐信。我再从中发现那些成l一贯优U的hQ而不是那些仅仅在计算机系评中得到高分的人?/span>
Z么我要关心某人的“Ƨ洲历史”评成W呢,毕竟作ؓ雇主我要扄应该是程序员啊?何况Q历史是那么枯燥Q不得高分很正常。哦Q这么说来,你的意思是我应该雇用你Q而不用考虑一旦工作变得枯燥你会不会努力工作?别忘了,在编E工作中也有很枯燥的东西。每一工作都有枯燥难耐的时刻。我不想雇用那些只想q有事情的人?/span>
选修有大量编E实늚评
我依然清楚记得我发誓l不ȝI生的那一刅R那是在一门叫?span style="font-family: Times New Roman">“动态逻辑”的课E上Q教师是zd十的耉大学教授Lenore ZuckQ她是计机p那些聪明的老师中最聪明的h之一?/span>
如今Q?nbsp;׃记忆力糟p, 我已l差不多把这门课的内容忘光了Q但是不怎么_在这里我q是惌对付着说一下。大致上QŞ式逻辑的意思是_如果条g成立Q你p证明l论也成立。比如,Ҏ形式逻辑Q已?span style="font-family: Times New Roman">“只要成W好,p被雇?/span>”Q然后假?/span>“Johnny的成l好”Q你可以得C个崭新的l论“Johnny会被雇用”。这完全是经典方法。但是,一个解构主义者(deconstructionistQ只需?/span>10U钟p破坏形式逻辑中所有有用的东西。这样一来,留给你的只是一些趣x,而不是实用性?/span>
现在再来说动态逻辑。它与Ş式逻辑其实是一回事Q但是必d多考虑旉因素。比如,“你打开灯之后,p看见自己的鞋?/span>”Q已?/span>“灯以前是亮的”Q那么这意味着“你看见了自己的鞋?/span>”?/span>
对于?span style="font-family: Times New Roman">Zuck教授那样聪明的理论家Q动态逻辑充满了吸引力Q因为它看上d有希望让你在形式上证明一些计机E序的相关理论问题。这样做说不定很有用。比如,你可以用它在形式上证明,火星漫游车的闪存卡不会发生溢出(overflowQ问题,不会因而整天一遍又一遍地重启Q耽误了它在那颗赤U色的星球上漫游L火星人马文(Marvin the MartianQ?/span>
在第一堂课上,Zuck博士写满了整整两面黑板,甚至黑板旁边的墙上都写上了很多证明步骤。需要证明的问题是,有一个控制灯泡的开养I现在灯没有亮,q时你打开了开养I误明灯泡将会点亮?/span>
整个证明q程复杂得不可思议Q处处都是陷阱,必须十分心。保证这个证明不出错太困难了Q还不如直接怿打开开关灯׃亮。真的,虽然证明q程写满了许多块黑板Q但是还是有许多中间步骤被省略了Q因为如果要从Ş式逻辑上完整证明所有步骤,那就琐碎得无法Ş容了。许多步骤是用各U经典的逻辑证明Ҏ推导得到的,包括归纳法、反证法{,甚至有些部分q是由旁听的研究生证明的?/span>
留给我们的课后作业是证明逆命题:如果灯原来是关着的,现在却亮了,那么误明开关的状态一定同原来相反?/span>
我动手开始证明,我真的去证明了?/span>
我在图书馆里待了很长旉?/span>
我对照着Zuck博士的原始证明想依样画葫芦。研I了几个时之后Q我在其中发C一个错误。可能我抄写的时候抄错了Q但是这使得我想通了一件事。如果花?/span>3个小Ӟ写满了一块又一块的黑板Q每一U钟都可能出错,最后能够证明的却只是一个很琐碎的结论,那么q种方式有多大的实用性呢Q在zȝ生、充满趣味的现实世界中,你永q都不会有机会用它?/span>
但是Q动态逻辑的理论家们对q一点不感兴。他们看上它不是因ؓ它有用,而是因ؓ它可以ؓ他们带来ln教职?/span>
我放弃了q门课,q且发誓l不会去读计机U学的研I生?/span>
q个故事告诉我们Q计机U学与Y件开发不是一回事。如果你真的非常q运Q你的学校可能会开讑־像样的Y件开发课E。但是另一U可能是Q你的学校根本不教你在现实中如何~程Q因为精英学校都觉得Q教授工作技能最好留l职业技术学校、犯人重q社会的培训目d。你到处都能学怎么写代码。别忘了Q我们是耉大学Q我们的使命是培L来的世界领袖。你交了16万美元的学费Q却在学循环语句的写法,q怎么可以Q你以ؓq是什么地方,N是机场沿途的酒店里时拼凑v来不靠谱?/span>Java语言培训班?哼哼?/span>
ȝ在于我们没有一U真正教授Y件开发的专门学校。你如果xZ个程序员Q你可能只能选择计算机科学专业。这是一个不错的专业Q但是它同Y件开发不是一回事。在那些400{的课E代号中Q去L名称中带?/span>“Practicum”q个词的评吧(~者注Q指供h实习的课E)。不要被q个拉丁语单词吓倒,q些都是有用的课E,之所以vq种名字Q只是ؓ了让那些文绉l、装腔作ѝ满嘴胡说八道的公司l理们觉得高p?/span>
别担心所有工作都被印度h抢走
我首先要说的是,如果你本w就已经在印度了Q或者你是印度人,那么你真的毫无必要去惌件事Q根本不用琢所有的工作Z是不是都跑到了印度。那些都是非常好的工作,好好Cn受吧Q祝你n体健店?/span>
但是Q我不断听说计算机系的入学hC降得很厉宻I已经C危险的程度。根据我听到的说法,其中的一个原因是“学生们不愿去学一个工作机会都向印度的专?/span>”。这U担心大错特错,有很多理由可以反驟뀂首先,Ҏ一时性的商业潮流军_个h的职业选择Q这是愚蠢的。其ơ,即ɾ~程工作无一q存地都向了印度和中国Q但是学习编E本w依然是一U第一的素质训练Q可以ؓ各种有趣的工作打下基Q比如业务流E工E(business process engineeringQ。再ơ,不管是在国q是在印度,真正优秀的程序员依然是非帔R常短~的Q这一点请怿我。不错,实有相当一批失业的IT从业者在那里鼓噪Q抱怨他们长旉找不到工作,但是你知道吗Q即使冒着触怒这些h的风险,我还是要_真正优秀的程序员Ҏ不会׃。最后,你还能找到更好的专业吗?你觉得什么专业好Q主修历史学Q如果那P你毕业的时候就会发玎ͼҎ没有其他选择Q只能去法学院。不q我倒是知道一件事Q?/span>99%的律师都痛恨他们的工作,痛恨他们当律师的每一分钟。可是,律师每周的工作时间偏偏长?/span>90时。就像我前面说过的:如果你喜Ƣ编E,那么你真是受C上天的眷。你是非常幸q的数Z一Q能够以自己喜欢的事谋生?/span>
不过说实话,我不觉得学生们真的有上面的想法。近q来Q计机pd学h数的下降只是回到了历史上的正常水qI因ؓ前些q的互联|狂热得入学h数出C大沫,抬高了基数。由于这U沫,许多q不真的喜欢~程的h也来读计机pR他们心里想的是Q只要进了计机p,来p扑ֈ׃h的高薪工作,p获得24岁当?/span>CEO、进?/span>IPO的机会。谢天谢圎ͼq些人现在都计机p远q的了?/span>
找一份好的暑期实习工?/span>
_明的招聘负责h都知道,喜欢~程的h高中时就牙ȝ信息输入了数据库Q进入大学前去q三ơ电脑夏令营Qؓ校报做过内容理pȝQ有qY件公司的夏季实习l历。招聘负责h是要在你的历上找这些东ѝ?/span>
如果你喜Ƣ编E, ׃要随便什么工作都{应Q否则你会犯下最大的错误。不是暑期工作Q还是兼职或者其他性质的工作,只要与编E无养I׃要轻易接受。我知道Q其?span style="font-family: Times New Roman">19岁的孩子都想去购物中心里打工Q在那里折叠衬衫。但是你与他们不同,?/span>19岁时已l掌握了一门非常有价值的技能。将旉费在折叠衬衫上是很愚蠢的,{到毕业的时候,你的历上本应该写满了一大堆与编E相关的l历。就让那些胦l类的毕业生ȝ车公?/span>“帮助Z满他们UR的需?/span>”吧,你要q的是别的事Q在电视中扮演超人的Tom Welling?/span>1除外Q?/span>
Z让你的生zd得更Ҏ一些,也ؓ了强调这整篇文章完全是ؓ了满x的个人目的,我要告诉你,我的公司——Fog Creek软g公司—?/span>提供软g开发方面的暑期实习Z。我们非常看重简历?/span>“比v其他公司的实习工作,你在Fog Creek最有可能学到更多的~写代码、Y件开发、商业运作方面的知识?/span>”q是d夏天我们的一个实习生Ben说的。他会这栯Qƈ不完全是因ؓ我派了hC的宿舍让他这栯。我们接受实习申L截止日期?/span>2?/span>1日。一h吧?/span>
如果你听从了我的Q你q是有可能落得一个悲惨的下场Q比如很早就卖掉了微软公司的股票Q再比如拒绝了谷歌公司的工作ZQ原因是你想要一间自q可以关上门的独立办公室,或者做Z其他生命中愚蠢的军_。但是,q些可不是我的错。我一开始就告诉q你Q不要听我的话?/span>
Q注1 Q?T o m W e l l i n g是一个美国演员, 在电视剧《超人前传》(SmallvilleQ中扮演h。该电视剧讲q还没有成长为后来超人的克拉?/span>·肯特年时代的故事。)
作者简介:
Joel SpolskyQ世界最具媄响的E序员网?/span>Joel on Software的主人,软g业一位旗帜鲜明的思想者,一位传lY件管理理늚挑战者。他创办的这个网站被E序员誉?/span>“反呆伯特宣言?/span>”Qƈ被翻译ؓ三十多种语言?/span>Joel毕业于耉大学Q随后即q入微Y公司工作Q曾d软公?/span>E x c e l 开发小l项目经理。现在他在自己创办的Fog Creek软g公司?/span>CEO。此外,他与人合办的Stack Overflow已经成ؓ如今最热门的技术网站?/span>