首 页  |  走进新海  |  产品资讯 |  产品下载  |  新海资讯  |  客户服务  |  新海论坛  
  资讯主题 

Visual Studio 2008单元测试实践

面向对象和面向工程的区别

升级到Visual Studio 2008的10个技巧

明天,你用什么做界面?

  资讯内容   
   Visual Studio 2008单元测试实践    返回

    单元测试作为直接对代码的测试是整个软件测试的基础。在面向对象编程中,单元测试一般针对类来实施。Visual Studio 2008既支持对类的公开接口进行测试,也能对私有属性和方法进行测试。在软件开发过程中,程序员一般都不愿意进行单元测试,认为单元测试要写很多“无用”的代码,“浪费”他们宝贵的开发时间。Visual Studio 2008提供了对单元测试的良好支持,只需要写少量的代码就可以完成单元测试,极大的提高了单元测试的效率。

       关键字:单元测试,Visual Studio 2008

  单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

    在一种传统的结构化编程语言中,比如C,要进行测试的单元一般是函数或子过程。在象C++这样的面向对象的语言中, 要进行测试的基本单元是类。对Ada语言来说,开发人员可以选择是在独立的过程和函数,还是在Ada包的级别上进行单元测试。单元测试的原则同样被扩展到第四代语言(4GL)的开发中,在这里基本单元被典型地划分为一个菜单或显示界面。

       单元测试不仅仅是作为无错编码的一种辅助手段在一次性的开发过程中使用,单元测试必须是可重复的,无论是在软件修改,或是移植到新的运行环境的过程中。因此,所有的测试都必须在整个软件系统的生命周期中进行维护。

Visual Studio 2008 单元测试功能介绍

一、测试代码与被测代码分离成独立的两个项目

    单元测试中,测试的代码不能对被测试的代码施加影响。如果将测试代码写入被测试的代码中,测试完成后再删除的话,测试的正确性将得不到保证。因此,在Visual Studio 2008种提供了一种“Test Project”的项目,测试代码写在Test Project中,并且测试工程可以进行重复使用。

二、测试代码的自动生成

    书写测试代码是一件很烦琐的事情,这些代码没有像程序代码一样具有“创造性”,因此该部分代码可以进行自动化生成。Visual Studio 2008就提供了一个自动生成测试代码的测试框架。利用Visual Studio 2008自动生成的代码,只需要很少的改动就可以完成整个测试程序。

三、测试管理

    Visual Studio 2008提供了测试列表来进行测试工作的管理工作,我们需要一个反映目前测试状况的工具,那些测试通过了,那些没有通过,应该提供一个列表来为我们改进测试手段,进行更全面的测试提供指导。

    利用Visual Studio 2008来进行单元测试

    假设我们有一个类BankAccount,该类定义了一个银行的账户,私有属性_currentBalance是银行储户的账户金额,depositMoney是存款方法,对帐户增加一笔资金,makePayment是支付方法,对账户减少一笔资金。代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace BankAccountDemo.Business

...{

    class BankAccount

    ...{

        private float _currentBalance;

   public float CurrentBalance

        ...{

            get ...{ return _currentBalance; }

            set ...{ _currentBalance = value; }

        }


        public BankAccount(float initialBalance)

        ...{

            this._currentBalance = initialBalance;

        }


        public void depositMoney(float depositAmount)

        ...{

            this._currentBalance += depositAmount;

        }


        public void makePayment(float paymentAmount)

        ...{

            this._currentBalance -= paymentAmount;

        }


 

    }


}


    要对BankAccount类进行单元测试,只需要在BankAccount的定义处鼠标右键,在菜单中选择“Create Unit Tests”即可进入测试项目的创建工作。如下图所示:

 

 

    在弹出的创建单元测试的对话框中,对需要创建测试的方法和属性进行选择,然后点击“OK”按钮,如图所示:

    紧接着在出现的文本框中输入测试项目的名称“BankAccountDemo.Business.Tests”,点击确定后,测试项目被创建。在这里“BankAccountDemo.Business.”只是用于更好的对命名空间进行规划,完全可以直接使用“BankAccountDemoTest”来作为测试项目的名字。
生成的测试代码如下,为了紧凑的表现代码,将注释代码作了删除。

    这个时候的代码并不能开始测试,而需要我们按照测试用例的要求将测试用例的数据加入到测试方法中,并进行结果的比较,修改后的depositMoneyTest方法如下:

[TestMethod()]

public void depositMoneyTest()

{

    float initialBalance = 0F; // TODO: Initialize to an appropriate value

    BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value

    float depositAmount = 100F; // TODO: Initialize to an appropriate value

    target.depositMoney(depositAmount);

    Assert.AreEqual(initialBalance + depositAmount, target.CurrentBalance, "Deposit Test: Deposit not applied correctly");

 }

     鼠标右键在depositMoneyTest方法内任意位置单击,在弹出的菜单中选择“Run Tests”,即可以对该方法进行测试。在“Test Results”窗口中显示测试的结果,如下图所示:

 

    可以看出,Visual Studio 2008给我们提供了一个功能强大,操作简单的单元测试功能。利用该功能,程序员在编写代码后,可以马上对所编写的类进行单元测试,通过了程序员自行组织的单元测试后再将代码交给测试人员进行进一步测试。

    总结:微软将单元测试功能从Visual Studio 2005 Team System开始集成到开发环境中,是经过了微软公司多年的实践经验证明的。如今,开发环境从以前的单一开发功能,将关注点分散到软件的整个生命周期过程中来,已经成为一个ALM平台。软件开发人员不仅需要做开发工作,而且需要对自己开发的代码进行单元测试,不能将所有的问题全部抛给测试人员。测试人员可以将更多的精力放在系统一级的测试工作上面。

using BankAccountDemo.Business;

using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace BankAccountDemo.Business.Tests

...{

    [TestClass()]

    public class BankAccountTest

    ...{

        private TestContext testContextInstance;

 

        public TestContext TestContext

        ...{

            get

            ...{

                return testContextInstance;

            }


            set

            ...{

                testContextInstance = value;

            }


        }


 

        Additional test attributes#region Additional test attributes

        #endregion


 

 

        [TestMethod()]

        public void CurrentBalanceTest()

        ...{

            float initialBalance = 0F; // TODO: Initialize to an appropriate value

            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value

            float expected = 0F; // TODO: Initialize to an appropriate value

            float actual;

            target.CurrentBalance = expected;

            actual = target.CurrentBalance;

            Assert.AreEqual(expected, actual);

            Assert.Inconclusive("Verify the correctness of this test method.");

        }


 

        [TestMethod()]

        public void makePaymentTest()

        ...{

            float initialBalance = 0F; // TODO: Initialize to an appropriate value

            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value

            float paymentAmount = 0F; // TODO: Initialize to an appropriate value

            target.makePayment(paymentAmount);

            Assert.Inconclusive("A method that does not return a value cannot be verified.");

        }


 

        [TestMethod()]

        public void depositMoneyTest()

        ...{

            float initialBalance = 0F; // TODO: Initialize to an appropriate value

            BankAccount target = new BankAccount(initialBalance); // TODO: Initialize to an appropriate value

            float depositAmount = 0F; // TODO: Initialize to an appropriate value

            target.depositMoney(depositAmount);

            Assert.Inconclusive("A method that does not return a value cannot be verified.");

        }


[TestMethod()]

        public void BankAccountConstructorTest()

        ...{

            float initialBalance = 0F; // TODO: Initialize to an appropriate value

            BankAccount target = new BankAccount(initialBalance);

            Assert.Inconclusive("TODO: Implement code to verify target");

        }


    }


}




   面向对象和面向工程的区别    返回

    C++是在C语言基础上发展的一门语言,他继承了C语言的高效,简洁,快速,和高移植性的传统。C++包含C语言的内容,主要是在C语言的基础上添加了面向对象编成(OOP)的方法,C语言是面向过程的编成。

    C语言--面向过程:

    计算机语言要处理两个概念--数据和算法。数据是程序要使用和处理的信息,而且算法是程序解决问题的方法。C语言是面向过程的语言,他强调的是编成的算法方面。

    随着程序规模的扩大,计算机科学家开发了一种跟有序的编成方法--结构化编成。结构化编成将分支限制为一小组行为的结构。如C语言中的for循环, while循环,do while循环和if else语句。结构化编成技术反映了过程性编成的思想,根据执行的操作构思一个程序。

    在C语言中,其理念是将大型程序分解为小型,便于管理的任务。

    C++面向对象编成:

    虽然结构化编成的理念提高了程序的清晰度,可靠性,便于维护,但随着程序规模不断增时,它不能很多地处理。于是人们提出了新的方法--面向对象编成。OPP不象过程性编成那样,试图认问题来满足语言,而是试图认语言来满足问题。

    类是OPP中的重点。程序员可以按需要定义一个类,从而使问题更容易处理。OPP的理念是设计与问题的本质特性相对应的数据格式。OPP编成并不是仅仅将数据和方法合并为类定义。OPP还有助于创造可重用的代码。

    C++面向对象和面向过程的程序设计有何区别?
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

    例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。

    而面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的i变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。

    可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

    功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

    再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。

    当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。

    面向过程和面向对象到底有什么区别
    最近我在学习软件工程,建模,可是学着学着,我对面向过程和面向对象越来越糊涂,还有,第一代面向对象和第二代面向对象有何区别?请哪位兄弟赐教一下!

  第一个问题似乎不是三言两语就能解析清楚的,建议到一些oo的网站上看看,比如UMLChina。
    第二个问题不知道是不是缘自“程序员”的“高展专栏”?个人提议在高展的理论尚未的到普遍认同前,初学者还是不要赶这趟混水,还是学好“传统”的面向对象来得实际。

  sa:数据是怎么变化的。
    oa:有那些对象,对象有那些服务和属性。

  一个博大,一个精深.
    总体而言,面向对象简单,面向过程对人员要求素质过高

  第一代oo:面向对象,
    第二代oo:面向构件。

  面向过程是把变量和函数按照功能模块进行分类和打包。
    面向对象是把变量和函数分配给不同的执行者,按执行者进行分类和打包。
    二者对问题信息领域的分析方法是相交的。

  二者对问题信息域的分析方法是相交的。

  艾兰.库伯的《软件创新之路》中提到:
   面向过程和面向对象的区别并不像人们想象得那么大
   面向对象的大部分思想在面向过程中也能体现
   但面向过程最大的问题(也许是唯一先天的缺陷)在于随着系统的膨胀,    面向过程将无法应付,最终导致系统的崩溃
   面向对象的提出正是试图解决这一软件危机
   目前看来,似乎有一定成效
   但仍任重道远

  做一些对比来说吧:

    分析     基本构件 方法     工具

    面向过程 基于算法 函数/过程 数据流图、伪代码... ...
    面向对象 基于对象 类 UML建模... Rose,viso等

   其实我始终认为,不管是面向对象,还是面向过程,都体现了一种软件重用的思想!
   只不过面向过程中重用的是过程和函数,但是面向对象重用的是类,一种将数据和处理数据的过程及函数封装在一起的实体,其实面向对象中的过程和 函数和面向过程中的分别不是很大,所以数据流图和伪代码还是有用的。
    面向对象一个很大的好处就是数据 和方法的封装,由此面向对象的三大特性得到发挥。


   升级到Visual Studio 2008的10个技巧    返回

  升级到Visual Studio 2008,来个飞跃。Visual Studio 2008最近发布了,开发者经常希望自己成为安装他们最青睐开发工具最新版本的第一人。但是,若在升级过程中做出了错误的选择的话,就会为之付出一些代价。由于Jon Galloway等人,确保了升级过程是一个平稳的过程,而且只有十步之遥。

  1. 首先,小心的卸载所有先前发布的相应软件和模块

  这是最重要的步骤之一。如果您有任何先前版本的.NET Framework 3.5或Visual Studio 2008,那么这些软件都必须在安装Visual Studio 2008 RTM之前被卸载。在安装之前关闭一些相关的软件也是个不错的主意:

关闭所有的MS Office应用程序(如Outlook,Word等)
关闭Internet Explorer
关闭所有的windows资源管理器
关闭所有其它不需要打开的程序
以下是Scott Guthrie 提供的对先前发布版本的合适的卸载顺序,这些提到的软件可能有些您安装了而有些没有,只要确保如下的顺序即可:

移除“MSDN Library for Visual Studio 2008 Beta”
移除“Microsoft SQL Server Compact Edition 3.5”
移除“Microsoft SQL Server Compact Edition 3.5 Design Tools”
移除“Microsoft SQL Server Compact Edition 3.5 for Devices”
移除“Microsoft Visual Studio Performance Collection Tools”
移除“Windows Mobile 5.0 SDK R2 for Pocket PC”
移除“Windows Mobile 5.0 SDK R2 for Smartphone”
移除“Crystal Reports 2007”
移除“Visual Studio Asset System”
移除“Microsoft Visual Studio Web Authoring Component / Microsoft Web Designer Tools”
移除“Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime”
移除“Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System Runtime Language Pack” (只针对非英语版)
移除“Microsoft Visual Studio Tools for Office Runtime 3.0”
移除“Microsoft Document Explorer”
移除“Microsoft Document Explorer 2005 Language Pack” (只针对非英语版)
移除“Microsoft Device Emulator 3.0”
移除“Microsoft .NET Compact Framework 3.5”
移除“Microsoft .NET Compact Framework 2.0 SP1”
移除“.NET Framework 2.0 SDK”
移除“Microsoft Visual Studio Codename Orcas Remote Debugger”
移除“Microsoft Visual Studio 64bit Prerequisites Beta” (只针对64位平台)
移除“Microsoft .NET Framework 3.5"

  2. 只安装您真正会用到的部分

  不要仅仅因为DVD上什么都有,就要把所有的东西都装上。您安装的软件越少,以后打的补丁就越少,其占用的磁盘空间也越少。

  3. 不要被前面的重启提示弄傻了

  .NET Framework 3.5的安装程序会提示用户在安装的过程中间重启,不要理会它。所有的重启都要等到安装完Visual Studio 2008之后再执行。

  4. 如果您要用Team System,就安装Team System 2008 Team Explorer

  如果您准备连接到Team Foundation服务器,那么您需要安装Team System 2008 Team Explorer,否则无法连接到Team Foundation服务器。

  这篇文档告诉您如何从Team Foundation服务器安装介质(光盘,下载包等)得到Team Explorer,但是这是一个3GB的下载版本。最简单的方法是得到单独的Team Explorer安装版,这个安装版只有387MB。

  5. 安装之后,将您的IDE设置恢复到默认设置。

  如果IDE的设置在任何先前发布的版本中做了更改,它们都应该被恢复到默认设置。可以在命令行运行 devenv.com /ResetSettings 或者在Visual Studio 2008中点击菜单 Tools > Import and Export Settings...> Reset all settings

  6. 抓住这个时机改变您的Visual Studio主题

  这是个很好的时机来修改主题。Visual Studio的主题系统允许开发者尝试一个新的主题,如果他们不喜欢,还可以改。我们推荐您选择一个使视觉更舒适的主题,特别是如果您每个星期要在IDE环境下工作很多个小时的话。

  7. ASP.NET ListView中的Breaking changes (Breaking changes 意味着新的版本在这些地方将不再保证向前兼容,从而导致同样的代码在不同的版本中有不同的行为,或者旧的代码在新版本环境中不再支持)

  Jon Galloway指出了这个非常重要的一点:

  如果您使用先前发布的ASP.NET ListView写过任何代码,您需要升级您的标签。事实上这里只有一个真正的区别,这个区别会带来一些不同的影响:容器元素被asp:PlaceHolder控件代替了。先前的版本允许您使用任何 runat="server" 标记做为一个容器元素。我更喜欢RTM的行为-旧的方式有时候有点太神奇,它根据ID用子元素填满父元素。新的用法更加直接,而且这种用法使得ListView中被标记的内容和被替代的内容一目了然。

  具体而言,以前使用元素ItemContainer的地方,现在要用一个叫做ItemPlaceholder的占位符来代替。如果这样出错了,您会得到如下的出错信息:
An item placeholder must be specified on ListView ‘SampleListView′. Specify an item placeholder by setting a control’s ID property to “itemPlaceholder”. The item placeholder control must also specify runat=”server”.

  8. LINQ-to-SQL 中的Breaking changes

  任何先前版本的LINQ-to-SQL代码都需要被依照以下的说明更新。

  把 Add 和 AddAll 方法改成 InsertOnSubmit 和 InsertAllOnSubmit. 把 Remove 和 RemoveAll 改成 DeleteOnSubmit 和 DeleteAllOnSubmit.
通过如下更改把 .dbml 文件的编码格式改为 utf-8

<?xml version="1.0" encoding="utf-16"?>
修改为
修改web.config中如下一行(注意版本号的区别):
<add assembly="System.Data.DataSetExtensions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
修改为

<add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
9. 下载更新过的Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008

  装载Visual Studio 2008时这些工具不会自动准备好。所以如果要做与Silverlight 1.1相关的开发,就得自己把它们弄过来。

  10. 把您的解决方案都升级为Visual Studio 2008的格式

  这是一个节省您很多时间的相当大的一个问题。由于Visual Studio 2008的解决方案文件和工程文件使用了一种新的格式,用Visual Studio 2008打开这些解决方案和工程会把它们升级。如果需要升级的工程很多,在命令行运行 devenv.com /Upgrade 命令可以加快升级速度。

  这些技巧可以帮助开发者在初试Visual Studio 2008的时候一切顺利。更多有关Visual Studio 2008的信息可以在微软公司的 MSDN 网站和Scott Guthrie的blog上找到。


   明天,你用什么做界面?    返回

                               -----动态语言流行趋势分析 程序员应该何去何从?

    在.Net出现之前,界面开发本是三足鼎立之势, VC/MFC、VB和Delphi/C++Builder各据一方。然而,.Net的出现,不仅没能一统江湖,反而把天下搞得更乱了。不止一个人在困惑,到底该用什么来做界面呢?

Visual C++

    今天,由于.Net的出现, Visual C++已经失去了昔日的IDE王者的宝座。微软显然更偏爱的是C#,以及VB。当看到Visual C++ 2008中即将搭载的最新版MFC不过是捆绑了BCGSoft的第三方界面库,还能再说什么呢?难怪有人不解的问,还需要搭载第三方的界面库吗? 微软自己的库呢?莫非Office 2007的界面不是用C++开发的?所以,别再指望Visual C++了,不是微软没有能力搞出个更好的MFC或着WTL,而是他压根就没打算去搞。

.Net Framework

    一直觉得.Net Framework是个Java的翻版。可以理解微软嫉妒Java在企业开发领域独占鳌头的心理,但偏偏.Net Framework的野心太大了,连桌面开发也想统一, 结果就出现了今天的局面。.Net隔三差五的出个新版,虽然宣传的新特性令神往,可真要把桌面开发建立在这个平台上还是会有麻烦的。首先,分发.Net程序就是个麻烦,以前还觉得JRE臃肿庞大,但比起今天的.Net,JRE已经很轻盈了。而且,.Net各个版本并不完全兼容,所以日后为旧客户维护在老版本上开发的程序时,必然痛苦万分。

Java

    本来桌面开发这片没有Java什么事。自从.Net把水搅混之后, Java也开始浑水摸鱼起来。先是Eclipse异军突起,从SWT到RCP,还真吸引了不少人的青睐。而今,Netbeans也东山再起,趁火打劫。随着Java FX的发布,桌面开发显得更热闹了。

其他

    无论如何,Delphi/C++ Builder曾经的辉煌与贡献是不能抹杀的。 可惜的是,Borland已经不再把心思放在IDE上了,虽然成立了CodeGear全资子公司,但结果如何只能让时间来回答了。

    Mozilla/Firefox走的是与众不同的路线。 XUL在Firefox上的成功运用,给我们的界面开发带来了新的尝试,但尚未成为主流。

    “说了这么多,其实等于没说,困惑依旧是困惑。没办法,这就是现实。如果硬要支持一方,还不如自己先给自己一板砖。但是,无论现实如何,钱不能不挣, 班不能不上,代码不能不写。好在我们具体工作中往往只局限在某一特定领域,所以,我们的选择固然不能尽善尽美,但日子也还过得去。就像牛顿定律与爱因斯坦的相对论,虽然相对论更精确,但平常用用牛顿定律也就够了。”

    那么,对于语言及工具的选择,我们该如何把握呢?

    时尚型软件

    这部分软件,拥有很强的时尚特性,如聊天工具, 游戏,各类娱乐性软件等等。从事这部分开发建议紧跟着微软脚步走,使用最新的IDE、SDK,以求在第一时间让用户获得最新观感和体验。

    在原有技术积累上开发的软件

这部分软件涵盖就更广泛了,比如财务软件,银行系统,各类ERP等等。对于这部分开发,如果不完全重新代码,就不用急着换语言和工具,原来用什么就还用什么。因为这部分软件大多用在企事业单位中,这一领域的各方面的更新换代并不像个人用户领域那么快。比如说,如果Visual C++ 6.0还能应付工作,就先接着用。即使Borland破产了,Delphi也不用急着扔掉。 毕竟,更换IDE的代价有时是非常巨大的,除非你已经完全想清楚了。

    全新的软件

这部分的选择余地就比较大了。如果你能决定选择, 那么你的选择应该取决于你的喜好。所以,这是不需要听从任何建议,只要按照自己喜欢的选择就没错。

    团队开发经验

    “最后,谈一谈我的选择,仅供大家参考。”

    多年以来,我和我的技术团队一直使用Visual C++和C++ Builder两种IDE进行界面开发。 其中VC版本曾进行过一次升级,从VC6升级到VC2003,C++ Builder一直使用6.0版。

    今年,由于对C++ Builder未来的前景的担忧,并且长期以来同时维护用两个不同IDE开发的产品所产生的复杂性,我们已经逐渐放弃了C++ Builder的使用。但完全使用VC做界面开发也有问题,最大的问题在于VC门槛太高,培训困难,而且界面开发效率不高,对于时间紧迫的项目经常遭遇人手不足的问题。

    通过反复比较,最终我们将目标锁定在Python身上。 首先,Python是google的三大主要开发语言之一,另外两者自然是C++和Java,就连当今炙手可热的Ruby都被google拒之门外了。按照当前google的发展状况,已经成为了微软极为强大的竞争对手。因此,Python的前途决不可小觑。尤其是即将推出的Python 3.0版,对Python的品质肯定会有质的提升。

    其次,经过反复比较测试发现,Python是比C++、Java和C#这类静态语言更适合做界面开发的语言。我们从事的软件主要用于银行领域,软件中会涉及大量业务逻辑,界面修改经常需要随着业务模式的改变而改变。甚至有时连界面框架都要修改。比如说,由对话框模式全部变成文档模式。这种含有大量业务逻辑的软件,用C++这类静态语言开发是非常痛苦的。

    再次,Python本身使用C语言开发的,很容易用C/C++进行扩展,根本不用担心效率问题。这样,虽然引入了新的语言,公司原有的多年积累很容易用在新的项目中。

    最后,Python的上手非常容易。公司原有大 量技术支持人员,以前根本无法胜任C++语言的产品开发,但现在却在使用Python开发的项目中大显身手。

    由于Python本身自带的界面库功能并不强大,我们使用Python+wxPython作为界面开发平台,在公司新的项目中进行界面开发。开发过程使用Eclipse+PyDev 作为集成开发环境。产品发布时使用Py2exe进行打包。如今,在我的团队中,Python已经完全取代了之前C++ Builder的位置,VC也主要用于开发不带界面的内核或逻辑模块。


返回

 

邢台新海科技开发有限公司 2004-2008 版权所有
CopyRight 2008 NEWSEA SOFTWARE ALL RIGHTS RESERVED