精华内容
下载资源
问答
  • java网络视频对话软件

    2014-04-07 18:29:19
    可以进行实时网络视频软件,支持多人视频。可用于组群聊天
  • {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、...

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。","link1":"https://developer.aliyun.com/group/?spm=a2c6h.12883283.1377930.25.7287201c9RKTCi&groupType=other","link":"https://developer.aliyun.com/","icon":"https://img.alicdn.com/tfs/TB1TlXBEkT2gK0jSZPcXXcKkpXa-200-200.png","btn2":"开发者藏经阁","tip":"打通开发者成长路径,学习中心 。全线阿里云技术大牛公开课,立即查看","btn1":"技术与产品技术圈","link2":"https://developer.aliyun.com/topic/ebook?spm=a2c6h.12883283.1362932.15.7287201c9RKTCi","title":"阿里云开发者社区"}],"search":[{"txt":"学习中心","link":"https://developer.aliyun.com/learning?spm=a2c6h.13788135.1364563.41.299f5f24exe3IS"},{"txt":"技能测试中心 ","link":"https://developer.aliyun.com/exam?spm=a2c6h.13716002.1364563.42.6cac18a3JWCM5U"},{"txt":"开发者云 ","link":"https://developer.aliyun.com/adc/?spm=a2c6h.13716002.1364563.59.6b0818a3DV0vzN"},{"txt":"在线编程 ","link":"https://developer.aliyun.com/coding?spm=5176.13257455.1364563.57.701e7facHvqi5r"},{"txt":"学习中心 ","link":"https://developer.aliyun.com/learning?spm=a2c6h.12883283.1364563.41.5f1f201c5CLDCC"},{"txt":"高校计划 ","link":"https://developer.aliyun.com/adc/college/?spm=a2c6h.13716002.1364563.58.6cac18a3JWCM5U"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}}}

    {"$env":{"JSON":{}},"$page":{"env":"production"},"$context":{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台;社区覆盖了云计算、大数据、人工智能、IoT、云原生、数据库、微服务、安全、开发与运维9大技术领域。","link1":"https://developer.aliyun.com/group/?spm=a2c6h.12883283.1377930.25.7287201c9RKTCi&groupType=other","link":"https://developer.aliyun.com/","icon":"https://img.alicdn.com/tfs/TB1TlXBEkT2gK0jSZPcXXcKkpXa-200-200.png","btn2":"开发者藏经阁","tip":"打通开发者成长路径,学习中心 。全线阿里云技术大牛公开课,立即查看","btn1":"技术与产品技术圈","link2":"https://developer.aliyun.com/topic/ebook?spm=a2c6h.12883283.1362932.15.7287201c9RKTCi","title":"阿里云开发者社区"}],"search":[{"txt":"学习中心","link":"https://developer.aliyun.com/learning?spm=a2c6h.13788135.1364563.41.299f5f24exe3IS"},{"txt":"技能测试中心 ","link":"https://developer.aliyun.com/exam?spm=a2c6h.13716002.1364563.42.6cac18a3JWCM5U"},{"txt":"开发者云 ","link":"https://developer.aliyun.com/adc/?spm=a2c6h.13716002.1364563.59.6b0818a3DV0vzN"},{"txt":"在线编程 ","link":"https://developer.aliyun.com/coding?spm=5176.13257455.1364563.57.701e7facHvqi5r"},{"txt":"学习中心 ","link":"https://developer.aliyun.com/learning?spm=a2c6h.12883283.1364563.41.5f1f201c5CLDCC"},{"txt":"高校计划 ","link":"https://developer.aliyun.com/adc/college/?spm=a2c6h.13716002.1364563.58.6cac18a3JWCM5U"}],"countinfo":{"search":{"length_pc":0,"length":0},"card":{"length_pc":0,"length":0}}}}

    展开全文
  • 对话软件开发

    2008-01-14 16:50:00
    有三样东西是软件项目/产品开发必备的:1. bug management; 2. source control; 3. daily build。 32. 你们公司有没有积累一个项目风险列表? 答:要。Risk Inventory。否则,下个项目开始的时候,又只能拍脑袋分析...

    1 你们的项目组使用源代码管理工具了么?
    答:应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。

    2你们的项目组使用缺陷管理系统了么?
    答:应该用。ClearQuest太复杂,我的推荐是BugZilla。

    3你们的测试组还在用Word写测试用例么?不要用Word写测试用例(Test Case)。
    答:应该用一个专门的系统,可以是Test Manager,也可以是自己开发一个ASP।NET的小网站。主要目的是Track和Browse。

    4. 你们的项目组有没有建立一个门户网站?
    答:要有一个门户网站,用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal Server 2003来实现,15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。

    5. 你们的项目组用了你能买到最好的工具么?
    答:应该用尽量好的工具来工作。比如,应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费,所以说是“你能买到最好的”。

    6. 你们的程序员工作在安静的环境里么?
    答:需要安静环境。这点极端重要,而且要保证每个人的空间大于一定面积。

    7. 你们的员工每个人都有一部电话么?
    答:需要每人一部电话。而且电话最好是带留言功能的。当然,上这么一套带留言电话系统开销不小。不过至少每人一部电话要有,千万别搞得经常有人站起来喊:“某某某电话”。《人件》里面就强烈谴责这种做法。

    8. 你们每个人都知道出了问题应该找谁么?
    答:应该知道。任何一个Feature至少都应该有一个Owner,当然,Owner可以继续Dispatch给其他人。

    9. 你遇到过有人说“我以为…”么?
    答:要消灭“我以为”。Never assume anything。

    10. 你们的项目组中所有的人都坐在一起么?
    答:需要。我反对Virtual Team,也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起,好处多得不得了。

    11. 你们的进度表是否反映最新开发进展情况?
    答:应该反映。但是,应该用Baseline的方法来管理进度表:维护一份稳定的Schedule,再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。

    12. 你们的工作量是先由每个人自己估算的么?
    答:应该让每个人自己估算。要从下而上估算工作量,而不是从上往下分派。除非有其他原因,比如政治任务工期固定等。
    13. 你们的开发人员从项目一开始就加班么?
    答:不要这样。不要一开始就搞疲劳战。从项目一开始就加班,只能说明项目进度不合理。当然,一些对日软件外包必须天天加班,那属于剥削的范畴。

    14. 你们的项目计划中Buffer Time是加在每个小任务后面的么?
    答:不要。Buffer Time加在每个小任务后面,很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。

    15. 值得再多花一些时间,从95%做到100%好值?
    答:非常值得。尤其当项目后期人困马乏的时候,要坚持。这会给产品带来质的区别。

    16. 登记新缺陷时,是否写清了重现步骤?
    答:要。这属于Dev和Test之间的沟通手段。面对面沟通需要,详细填写Repro Steps也需要。

    17. 写新代码前会把已知缺陷解决么?
    答:要。每个人的缺陷不能超过10个或15个,否则必须先解决老的bug才能继续写新代码。

    18. 你们对缺陷的轻重缓急有事先的约定么?
    答:必须有定义。Severity要分1、2、3,约定好:蓝屏和Data Lost算Sev 1,Function Error算Sev 2,界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。

    19. 你们对意见不一的缺陷有三国会议么?
    答:必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。

    20. 所有的缺陷都是由登记的人最后关闭的么?
    答:Bug应该由Opener关闭。Dev不能私自关闭Bug。

    21. 你们的程序员厌恶修改老的代码么?
    答:厌恶是正常的。解决方法是组织Code Review,单独留出时间来。XP也是一个方法。

    22. 你们项目组有Team Morale Activity么?
    答:每个月都要搞一次,吃饭、唱歌、Outing、打球、开卡丁车等等,一定要有。不要剩这些钱。

    23. 你们项目组有自己的Logo么?
    答:要有自己的Logo。至少应该有自己的Codename。

    24. 你们的员工有印有公司Logo的T-Shirt么?
    答:要有。能增强归属感。当然,T-Shirt要做的好看一些,最好用80支的棉来做。别没穿几次就破破烂烂的。

    25. 总经理至少每月参加次项目组会议?
    答:要的。要让team member觉得高层关注这个项目。

    26. 你们是给每个Dev开一个分支么?
    答:反对。Branch的管理以及Merge的工作量太大,而且容易出错。

    27. 有人长期不Check-In代码么?
    答:不可以。对大部分项目来说,最多两三天就应该Check-In。

    28. 在Check-In代码时都填写注释了么?
    答:要写的,至少一两句话,比如“解决了Bug No.225”。如果往高处拔,这也算做“配置审计”的一部分。

    29. 有没有设定每天Check-In的最后期限?
    答:要的,要明确Check-In Deadline。否则会Build Break。

    30. 你们能把所有源码一下子编译成安装文件吗?
    答:要的。这是每日编译(Daily Build)的基础。而且必须要能够做成自动的。

    31. 你们的项目组做每日编译么?
    答:当然要做。有三样东西是软件项目/产品开发必备的:1. bug management; 2. source control; 3. daily build。

    32. 你们公司有没有积累一个项目风险列表?
    答:要。Risk Inventory。否则,下个项目开始的时候,又只能拍脑袋分析Risk了。

    33. 设计越简单越好越简单越好?
    答:设计时候多一句话,将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。

    34. 尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。
    答:BizTalk和Sharepoint就是最好的例子,有这两个作为基础,可以把起点提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML,而不是自己去Parse一个文本文件;尽量用RegExp,而不是自己从头操作字符串,等等等等。这就是“软件复用”的体现。

    35. 你们会隔一段时间就停下来夯实代码么?
    答:要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw,“夯”这个字念“hang”,第一声。

    36. 你们的项目组每个人都写Daily Report么?
    答:要写。五分钟就够了,写10句话左右,告诉自己小组的人今天我干了什么。一则为了沟通,二则鞭策自己(要是游手好闲一天,自己都会不好意思写的)。

    37. 你们的项目经理会发出Weekly Report么?
    答:要。也是为了沟通。内容包括目前进度,可能的风险,质量状况,各种工作的进展等。

    38. 你们项目组是否至少每周全体开会一次?
    答:要。一定要开会。程序员讨厌开会,但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。

    39. 你们项目组的会议、讨论都有记录么?
    答:会前发meeting request和agenda,会中有人负责主持和记录,会后有人负责发meeting minutes,这都是effective meeting的要点。而且,每个会议都要形成agreements和action items。

    40. 其他部门知道你们项目组在干什么么?
    答:要发一些Newsflash给整个大组织。Show your team’s value。否则,当你坐在电梯里面,其他部门的人问:“你们在干嘛”,你回答“ABC项目”的时候,别人全然不知,那种感觉不太好。

    41. 通过Email进行所有正式沟通?
    答:Email的好处是免得抵赖。但也要避免矫枉过正,最好的方法是先用电话和当面说,然后Email来确认。

    42. 为项目组建立多个Mailing Group如果在AD+Exchange里面,就建Distribution List?
    答:比如,我会建ABC Project Core Team,ABC Project Dev Team,ABC Project All Testers,ABC Project Extended Team等等。这样发起Email来方便,而且能让该收到email的人都收到、不该收到不被骚扰。

    43. 每个人都知道哪里可以找到全部的文档么?
    答:应该每个人都知道。这叫做知识管理(Knowledge Management)。最方便的就是把文档放在一个集中的File Share,更好的方法是用Sharepoint。

    44. 你做决定、做变化时,告诉大家原因了么?
    答:要告诉大家原因。Empower team member的手段之一是提供足够的information,这是MSF一开篇的几个原则之一。的确如此,tell me why是人之常情,tell me why了才能有understanding。中国人做事喜欢搞限制,限制信息,似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力,不在于是不是能access information/data,而在于是不是掌握资源。

    45. Stay agile and expect change?
    答:要这样。需求一定会变的,已经写好的代码一定会被要求修改的。做好心理准备,对change不要抗拒,而是expect change。

    46. 你们有没有专职的软件测试人员?
    答:要有专职测试。如果人手不够,可以peer test,交换了测试。千万别自己测试自己的。

    47. 你们的测试有一份总的计划来规定做什么和怎么做么?
    答:这就是Test Plan。要不要做性能测试?要不要做Usability测试?什么时候开始测试性能?测试通过的标准是什么?用什么手段,自动的还是手动的?这些问题需要用Test Plan来回答。

    48. 你是先写Test Case然后再测试的么?
    答:应该如此。应该先设计再编程、先test case再测试。当然,事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发,我不喜欢,因为不习惯,太麻烦,至于别人推荐,那试试看也无妨。

    49. 你是否会为各种输入组合创建测试用例?
    答:不要,不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合——但要想清楚,你是否有时间去运行那么多test case。

    50. 你们的程序员能看到测试用例么?
    答:要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的:提高质量。

    51. 你们是否随便抓一些人来做易用性测试?
    答:要这么做。自己看自己写的程序界面,怎么看都是顺眼的。这叫做审美疲劳——臭的看久了也就不臭了,不方便的永久了也就习惯了。

    52. 你对自动测试的期望正确么?
    答:别期望太高。依我看,除了性能测试以外,还是暂时先忘掉“自动测试”吧,忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说,只能“矫枉必须过正”了。

    53. 你们的性能测试是等所有功能都开发完才做的么?
    答:不能这样。性能测试不能被归到所谓的“系统测试”阶段。早测早改正,早死早升天。

    54. 你注意到测试中的杀虫剂效应了么?
    答:虫子有抗药性,Bug也有。发现的新Bug越来越少是正常的。这时候,最好大家交换一下测试的area,或者用用看其他工具和手法,就又会发现一些新bug了。

    55. 你们项目组中有人能说出产品的当前整体质量情况么?
    答:要有。当老板问起这个产品目前质量如何,Test Lead/Manager应该负责回答。

    56. 你们有单元测试么?
    答:单元测试要有的。不过没有单元测试也不是不可以,我做过没有单元测试的项目,也做成功了——可能是侥幸,可能是大家都是熟手的关系。还是那句话,软件工程是非常实践、非常工程、非常灵活的一套方法,某些方法在某些情况下会比另一些方法好,反之亦然。

    57. 你们的程序员是写完代码就扔过墙的么?
    答:大忌。写好一块程序以后,即便不做单元测试,也应该自己先跑一跑。虽然有了专门的测试人员,做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法,程序太烂的话,测试有权踢回去。

    58. 你们的程序中所有的函数都有输入检查么?
    答:不要。虽然说做输入检查是write secure code的要点,但不要做太多的输入检查,有些内部函数之间的参数传递就不必检查输入了,省点功夫。同样的道理,未必要给所有的函数都写注释。写一部分主要的就够了。

    59. 产品有统一的错误处理机制和报错界面么?
    答:要有。最好能有统一的error message,然后每个error message都带一个error number。这样,用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因,就像SQL Server的错误那样。同样,ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。

    60. 你们有统一的代码书写规范么?
    答:要有。Code Convention很多,搞一份来发给大家就可以了。当然,要是有FxCop这种工具来检查代码就更好了。

    61. 你们的每个人都了解项目的商业意义么?
    答:要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者,或者时不时的告诉team member,这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱,这样就有动力了。平凡的事情也是可以有个崇高的目标的。

    62. 产品各部分的界面和操作习惯一致么?
    答:要这样。要让用户觉得整个程序好像是一个人写出来的那样。

    63. 有可以作为宣传亮点的Cool Feature么?
    答:要。这是增强团队凝聚力、信心的。而且,“一俊遮百丑”,有亮点就可以掩盖一些问题。这样,对于客户来说,会感觉产品从质量角度来说还是acceptable的。或者说,cool feature或者说亮点可以作为质量问题的一个事后弥补措施。

    64. 尽可能缩短产品的启动时间?
    答:要这样。软件启动时间(Start-Up time)是客户对性能好坏的第一印象。

    65. 不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误:太看重性能、稳定性、存储效率,但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾,协调这些是PM的工作。

    66. 你们根据详细产品功能说明书做开发么?
    答:要这样。要有设计才能开发,这是必须的。设计文档,应该说清楚这个产品会怎么运行,应该采取一些讲故事的方法。设计的时候千万别钻细节,别钻到数据库、代码等具体实现里面去,那些是后面的事情,一步步来不能着急。

    67. 开始开发和测试之前每个人都仔细审阅功能设计么?
    答:要做。Function Spec review是用来统一思想的。而且,review过以后形成了一致意见,将来再也没有人可以说“你看,当初我就是反对这么设计的,现在吃苦头了吧”

    68. 所有人都始终想着The Whole Image么?
    答:要这样。项目里面每个人虽然都只是在制造一片叶子,但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领,反对过分的把软件制造看成流水线、车间。参见第61条。

    69. Dev工作的划分是单纯纵向或横向的么?
    答:不能单纯的根据功能模块分,或者单纯根据表现层、中间层、数据库层分。我推荐这么做:首先根据功能模块分,然后每个“层”都有一个Owner来Review所有人的设计和代码,保证consistency。

    70. 你们的程序员写程序设计说明文档么?
    答:要。不过我听说微软的程序员1999年以前也不写。所以说,写不写也不是绝对的,偷懒有时候也是可以的。参见第56条。

    71. 你在招人面试时让他写一段程序么?
    答:要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等,既不偏向过于考算法,也不偏向过于考特定的API。

    72. 你们有没有技术交流讲座?
    答:要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得,这笔花钱送到外面去培训划算。

    73. 你们的程序员都能专注于一件事情么?
    答:要让程序员专注一件事。例如说,一个部门有两个项目和10个人,一种方法是让10个人同时参加两个项目,每个项目上每个人都花50%时间;另一种方法是5个人去项目A,5个人去项目B,每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂,但很多领导实践起来就把属下当成可以任意拆分的资源了。

    74. 你们的程序员会夸大完成某项工作所需要的时间么?
    答:会的,这是常见的,尤其会在项目后期夸大做某个change所需要的时间,以次来抵制change。解决的方法是坐下来慢慢磨,磨掉程序员的逆反心理,一起分析,并把估算时间的颗粒度变小。

    75. 尽量不要用Virtual Heads最好不要用Virtual Heads。
    答:Virtual heads意味着resource is not secure,shared resource会降低resource的工作效率,容易增加出错的机会,会让一心二用的人没有太多时间去review spec、review design。一个dedicated的人,要强过两个只能投入50%时间和精力的人。我是吃过亏的:7个part time的tester,发现的Bug和干的活,加起来还不如两个full-time的。参见第73条。73条是针对程序员的,75条是针对Resource Manager的。
     

    感谢原作者的真知灼见。

    展开全文
  • 当开发者着手实施一个软件时,他首先需要做设计,然后再按照这个设计进行编 码实现软件,这就是我所说的计划型设计。计划型设计可能借助 UML;或者把整个系统分为若干子系统,定义这些子系统间的接口。在计划型设计...
    进化型设计

    本文Martin Fowler讨论了计划型设计和进化型设计的区别,揭示了着眼于解决表象问题可以使开发者发现本质问题,并主张好的设计工作不会降低工作效率。

    计划型设计和进化型设计

    Bill Venners:在你的论文《设计是否已死》(Is Design Dead)一文中,谈到了计划型设计。那么什么是计划型设计?

    Martin Fowler:我将设计区分为计划型设计和进化型设计。当开发者着手实施一个软件时,他首先需要做设计,然后再按照这个设计进行编 码实现软件,这就是我所说的计划型设计。计划型设计可能借助 UML;或者把整个系统分为若干子系统,定义这些子系统间的接口。在计划型设计中,在设计和代码实现这二者之间存在明确的切换。而这二者又往往由不同的人 来完成。架构师构思设计,开发者编码实现。做好的设计并不是说一点都不能改变,但基本上是固定的。你可能会说,设计做得越好,在编码的时候,就会越少对设 计做出改动。

    而在进化型设计中,开发者在编程实践的过程中逐渐完善设计。刚开始的时候并没有设计,而是先实现一些小的功能。随着实现的功能越来越多,设计才逐渐成型。

    我在《设计是否已死》一文中想要强调的是,很多人在尝试进化型设计时,往往是在一种无约束无原则的环境里,最终的设计必然很蹩脚。这是人们之所以倾向于计划型设计的原因之一。

    但是,在我看来,极限编程实践中,通过持续不断的集成、测试和重构,进化型设计能够做到比计划型设计更有效。计划型设计的弱点就是,要想做出一个好的设计非常难。

    Bill Venners:为什么?

    Martin Fowler:我解释不清楚。这就跟解释不清楚为什么谱一曲交响乐会如此困难一样。世界上能把这些工作做好的人可以说是凤毛麟角。我想,我认为预先设计(upfront design)就属于这类工作。要做好这类工作实在是太难了。

    有趣的是,很多进化型设计的倡导者,比如肯特·贝克和沃德·坎宁安,都是非常出色的设计师。但正是他们,最后认识到自己所做的预先设计往 往不够好。他们容易把一些事情过于工程化,在不需要灵活性的地方设计灵活性,而在需要灵活性的地方又未予以考虑。因此,他们最终采用了进化型设计,并通过 运用一套规则,保证了设计效果。其结果是,不但最终的设计更加出色,并且速度也加快了。拿我自己来说,80%左右的时间里,进化型设计会得到不错的结果。 而不客气地说一句,我认为我的设计水平要比一般人高。因此,我认为进化型设计应该可以适用于更广泛的人群。

    重构与预先设计

    Bill Venners:重构如何改变了预先设计的地位?

    Martin Fowler:人们之所以采用计划型设计,是因为他们认为改动代码是件很麻烦的事情。因为当你改变代码时,有可能破坏了一些东西并造成许多漏洞。可是,如果你既有单元测试,又有在测试基础上建立起来的有条理的重构技术,那么你就能十分快速有效地改动代码,并且不太会引起什么问题。

    Bill Venners:预先设计在重构和其他可行的实践中有什么作用?你现在还会做一些预先设计吗?

    Martin Fowler:我认为一些地方还是可以用到预先设计的,不过不会很多。一些人——像肯特·贝克和罗恩·杰弗里斯——认为预先设计已 经消亡了。从某种意义上来说,他们是对的,因为你可以借助进化型设计搭建更复杂的系统。但在某些情况下,预先设计可能让你的进度加快一些。比如说,我不赞 同在架设数据库之前就讨论数据库的进化问题。我可能会对数据库的存在有一个初步的判断,然后以此作为起点。当然,我仍会用进化的方式完成大部分设计。

    Bill Venners:构造良好的(well-factored)程序和设计良好的(well-designed)程序之间有区别吗?

    Martin Fowler:它们在本质上并没有什么区别,但侧重点有所不同。设计强调的是构造——将程序划分为若干分割清晰的部分。对我来说,“构造良好的”一词表达了更多对于设计的感觉,也即当你审视或使用这个设计时的感觉。

    代码中的“劣迹”

    Bill Venners:在你的《重构》一书中,关于何时应用重构,你是这样阐述的:“与其去追求一些很模棱两可的编程美学原则(坦率地说,这是我们咨询师们最喜欢做的事情),还不如来点儿更实际的。”

    我很好奇,你是怎么看待美学的?我的经历中有很多次都是跟已有的代码打交道。这些代码的设计很烂,因此处理起来非常痛苦。如果这些设计能做得好些,让我不那么痛苦的话,我会非常感激。所以,对我来说,美学至少还是有些意义的,它可以使我的工作轻松些。

    Martin Fowler:嗯,在讨论何时应用重构时,我的确是这样谈论美学的。从某种意义上说,我在重构准则中所给的那些条条框框也是一种模 棱两可的美学原则。不过,我试着给出更多的说明,而不是仅仅说“当你的代码看上去很丑陋的时候就需要做重构。”比如说,重复的代码是一种“劣迹”,再比如 说,很长的方法是一种“劣迹”,或者很臃肿的类也是一种“劣迹”。

    很多“劣迹”是很容易看出来的。令人惊奇的是,当你审视你的程序时,往往一些很明显的现象,像是某个方法长达100行,就能引导你改进你的设计。

    在重构这个长达100行的方法时,你可能会发现一些诸如责任分配(responsibility allocation)不合理这样的设计问题。像这样的问题,你是不可能光凭扫一眼代码就发现的;但是,一个长达100行的方法,却是一眼就能看出来的。 所以说,很表象的问题能够把你带向更深层的问题。

    Bill Venners:我参与过的一个项目竟然有一个长达11页的 while 循环。

    Martin Fowler:这太不可思议了。

    Bill Venners:我们苦干了六个月试图让这个软件稳定运行,可是我们不敢动这个11页的循环。

    Martin Fowler:这恰恰从另一个侧面说明了这个长达11页的循环是个糟糕的设计。如果你对改动某处代码心存顾虑的话,那它显然是一个蹩脚的设计。

    良好的设计与效率

    Bill Venners:我想,人们不注重设计的一个原因是由于工作的流动性。那个最初编写11页 while 循环的程序员在我们接手项目的时候已经离开了公司。我认为,程序员因为自己的糟糕设计而自食其果的情况很少发生,因此他们没有足够的动因去注重设计。此 外,即便他们注重,但设计毕竟是一项费力不讨好的工作,好的设计需要时间,而开发中的时间压力往往很大。

    Martin Fowler:我不同意“好的设计需要更长的时间”这样的说法。

    Bill Venners:为什么?

    Martin Fowler:这是很有意思的一件事。在软件业,我们似乎普遍认为,慢工出细活。但当我回顾我自己的经历时,却发现保持代码的良好构造以及编写测试反而使我的工作加快了。

    我想,人们把改进设计所花的时间看作是“失去”的时间,但却没有看到将来对代码的改动会容易得多,往往只需要几分钟的时间,否则可能要花上两三个小时。

    人们往往还低估了在调试上所花的时间,低估了他们用来追踪一个“潜伏”很久的漏洞所花的时间。我在写代码的时候可以立即察觉产生的漏洞, 这使得我能在它潜伏下来之前就解决它。没有几件事比调试更花时间和更令人沮丧的了。假如我们一开始就能避免产生漏洞,那效率岂不是要提高很多?

    转自:http://www.kuqin.com/design-patterns/20080928/20329.html

    转载于:https://www.cnblogs.com/rowsy/archive/2012/11/04/2838823.html

    展开全文
  • 锡育英语人机对话口语学习软件,整合了1万多个各类英语情景对话,专注于提高英语口语交际能力,软件拥有英语语音识别功能,轻松实现人机对话。锡育英语人机对话口语学习软件
  • 软件专家的对话模式

    2015-03-23 12:48:37
    软件专家的对话模式(第一部分) http://www.infoq.com/cn/articles/conversation-patterns-1 软件专家的对话模式(第二部分) http://www.infoq.com/cn/articles/conversation-patterns-2 软件专家的对话...

    软件专家的对话模式(第一部分)

    http://www.infoq.com/cn/articles/conversation-patterns-1


    软件专家的对话模式(第二部分)

    http://www.infoq.com/cn/articles/conversation-patterns-2


    软件专家的对话模式(第三部分)

    http://www.infoq.com/cn/articles/conversation-patterns-3


    软件专家的对话模式(第四部分)

    http://www.infoq.com/cn/articles/conversation-patterns-4


    展开全文
  • 我想写一个快速简单的聊天机器人,可以携带与用户的对话。我想知道如何创建对话,允许无限量的输入和响应。现在我使用的代码不允许用户定义输入。这就是我现在正在使用的代码。在# Import the random moduleimport ...
  • 可以虚拟生成与买家的对话与交易并截图,本款软件免费。
  • 电影对话编辑器是一款可以生成电影截图带文字图片辅助软件软件使用简单,输入想要展示的问题,点击生成即可
  • 软件测试之神对话

    2015-09-12 18:51:21
    作为芸芸众程序员的一员,我对软件开发中的一切都充满问题。今天是关于测试,作为一名唯物主义者,我相信众物都有其神,于是我找到了测试之神。     我问:神仙,为什么我们需要测试?   大神用怜悯的眼神...
  • Rasa Core 基于机器学习的对话引擎,用于会话软件
  • 软件工程师和软件用户的搞笑对话

    千次阅读 2008-09-01 13:35:00
    尊敬的软件工程师:去年,我将我的软件《女友7.0》升级为《太太1.0》,但很快我发现又生成了一个新的软件《宝宝》,这个新软件占用了我大量的空间和宝贵的内存。另外,《太太1.0》又自动将自己安装到了系统中的所有...
  • 旺旺临时对话的链接,MSN临时对话的链接,Skype临时对话的链接
  • 软件设计最近发展趋势对话

    千次阅读 2015-01-01 10:28:22
    QA美美 15:16 概设和详设,模版究竟涵盖哪些比较合适,更加有效?目前我所接触到的概设,有的主要涵盖的是模块的集成方案,但是现在又遇到的不是以模块间数据流为模版,而是类与类之间的交互,而详设也是对类进行...
  • 高峰对话第二场:软件业的人才竞争与瓶颈 主持人:接下来的高峰对话是关于人才。关于软件也的人才竞争与瓶颈的对话。有请计世资讯总经理曲晓东,中国工程院院士倪光南,东软集团有限公司董事长兼总裁刘积仁,理光恩...
  • 商淘软件IM客服系统,是为提升商淘电商生态体验、能与商淘电商生态无缝对接的独立客服系统,支持商淘电商生态插件一键安装、多端适配的即时聊天系统。
  • 源代码 用vc++编写的 “和机器小人对话” 基于人工智能软件.rar
  • 本书包括改善与企业合作的技巧。 目标是为您提供两项关键技能:发现业务需求和以一种使您能够收集准确而有用的信息的方式来管理对话
  • 下面这个对话涉及到所谓的30岁编程门槛,个人兴趣以及发展和未来的问题。说的比较简单,因为大家都是明白人,不需要把什么都写得过于直白。2008-03-17 16:04:24 一个朋友你好,忙吗? 2008-03-17 16:05:09 青润有...
  • 从某些常识上讲,有些缺点可能是很难的,因为即使是在软件工程领域,某人与另一家公司可能会有不同的经历。 但是缺点之一可能是人们没有责任心,或者工作有时会有些重复,而您最终每天只能花八小时盯着电脑。 因此...
  • [软件人生]有无选择之间的对话

    千次阅读 2009-01-21 17:25:00
    有无选择之间的对话,我们如何看待选择。丝雨江南 16:43:14你好,有空吗?能否聊聊?青润 16:48:45哦。想聊些什么?丝雨江南 16:49:20嗯。关于人生职业规划,能有空聊聊吗?青润 16:49:40这个话题,我不敢聊,因为...
  • 对话:中国软件能不能找到自己的核心技术 分类: 软件行业 软件之外 2011-07-02 18:44 12人阅读 评论(0) 收藏 举报    对话:中国软件能不能找到自己的核心技术   2002-12-13 17:08 /(...
  • 下面是今天刚刚发生的对话,了解我的人都知道,我从不造假。一个做技术的网友 13:59:14最近很火呀。青润 14:00:26没有,我只是被逼的。人家为了自己的利益,就污蔑我和厦大校长贪腐有关,所以拒绝接受媒体采访。我...
  • 商淘软件IM客服系统,是为提升商淘电商生态体验、能与商淘电商生态无缝对接的独立客服系统,支持商淘电商生态插件一键安装、多端适配的即时聊天系统。下面我们来看看,这套客服系统是如何发送信息、完成商家与客服...
  • 迎接软件对话的时代

    千次阅读 2008-03-24 10:13:00
    当今,桌面应用软件,微软已不再是“一枝独秀”,比如,自由软件Ubuntu软件包已经敢与微软的桌面产品“比试比试”,跟它“招呼”几下子。 值得一提的是,Ubuntu 8.04版本,甚至可以借助小小的“Wubi”工具,把整个...
  • 作为芸芸众程序员的一员,我对软件开发中的一切都充满问题。今天是关于测试,作为一名唯物主义者,我相信众物都有其神,于是我找到了测试之神。 大神用怜悯的眼神看着我,说到:我可怜的孩子,之所以需要测试,都是...
  • 软件专家对话模式系列文章的第一部分中,你已经了解到业务人员需要什么以及如何在收集用户故事的过程中识别需求。在那篇文章里,我还描述了用户故事模板:\\为了避免\u0026lt;需要解决的问题\u0026gt;,作为\u0026...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,913
精华内容 1,165
关键字:

对话软件