创新项目中的启发 2011-01-05 08:54:42

创新项目中的启发

王逸欣

这次的项目开发的过程中,我负责的是硬件信息获取的模块。由于现在Windows系统是目前的主流操作系统,在开始接手这个项目的时候,我去图书馆借了不少关于调用Windows API的书籍,想从中开拓自己的思路。

盗版软件对厂商的损害最直观的体现在经济收入上,一款好的软件需要有充分的前期投入和内容创新才能更好的为用户服务,当正版软件得不到充足的后期收费,那么软件的更新与开发就受到了极大的阻碍,直接将威胁到企业的生死存亡。

如果厂商坚守阵地,不放开共享软件收费的方式,那么用户想免费使用该软件,则需要通过其他手段,比如:破解版、破解补丁、算号器等等。排除少部分无偿为用户提供这些破解手段的“大好人”,大部分其中都有猫腻,不是插恶意软件就是带广告程序,用户往往成为了第三方的“牺牲品”。

为了帮助用户免受这种第三方的危害,我们于是就想到了这样一个项目的主题。

我们的平台通过向中小软件开发者提供一致的接口,工具函数包以及客户端程序,以统一的实现软件的注册功能,从而尽可能的保护中小软件开发者的知识产权。于此同时,通过利用DESede以及MD5等算法实现的“版本识别”以及“特征标示”等方法,以保证软件的使用者使用的是未经篡改的有效版本,从而有效的保证了软件使用者的信息安全。除此之外我们还提供了基于密钥的注册号自动生成以及特征文件高效转移等辅助功能。通过以上各种功能之间的互联与耦合从而提供了一个较完整的软件注册与保护平台。

一、我的体会

这段期间内,收获最多的当然是个人编程的能力,在解决一个又一个的问题的同时完善着程序,并体会着成功的满足感。但是这仅仅只是这次项目开发过程中的一小部分体会,以下是我在这次的实践过程中感受到的更深刻的体会。

编软件要全身心投入

编写软件和别的程序不同。比如,在软件中要达到某个目标,有n种方法,但是在n种方法中,只有一种方法或两种方法是最好的,其他的都可能是绕远。所以,要做一个好的软件,是很需要耐心的。如果没有耐心,就不会有细活,慢工出细活,稳健前进才是王道。

在我们设计这个程序的时候,相当于我“钻”入这个程序里面去了。我的所有思维都是关于这个程序的,它这步该怎么走,下步该怎么走,它可能会出现什么情况。我动一个部分的时候,别的部分是否会干扰;也许会牵一发而动全身,它们之间又是怎么相互影响的等等。我全身心地投入,为开发软件废寝忘食,为一行出错的代码冥思苦想。

团队精神不可少

软件开发讲究合作与teamwork,从一个项目到手一开始就要通盘考虑,并分配任务。不能从一开始写程序的时候就没有一点规划与设计,一上来就写;还有就是写程序的时候完全不考虑扩展和接口友好等问题,这其实就是无合作精神的一种典型表现。

有一个很重要的影响进度的原因就是团队合作模式。在编写整个程序的过程中,我们必须知道别人提供给我们的接口,并且运用这个接口,有时候一个接口可能两个人都做了,这样浪费了人力,有时候一个接口可能不能让两个人的代码连在一起。所以通过这次的软件制作,让我们的团队合作有了很大的进步和提高。

开放性思维很重要

我觉得一个程序员应该具备开放性思维,从软件到外的所有的问题都能有一个大体上的了解。我们开发软件要学会能抓住最核心的问题,最根本的根本,而不会被其他的枝叶或表象所迷惑,做到这一步后才算比较成功。如果终日迷惑于小小枝节,程序总体不会很乐观。

有这种开放性思维的话,他就能做战略决策,这对他将来做任何事情都有好处。事实上,我感觉做完程序后,就会新学会一种分析问题的方法,学会怎么样把问题的表象剖开,看到它的本质。这时如果碰到任何具体的问题,只要给一定的时间,都能轻而易举地解决。对开发计算机软件来说,只要订好了计划,没有什么做不了的软件,只是看你有没有时间,有没有耐心,是否全身心的投入。

二、遇到的问题

我遇到的部分问题源自对Java语言和其结构的不熟练,或者不理解。作为一个只学过C++语言的Java新手,刚开始时我确实在语言方面栽了个跟头。于是,我在开始接触这个项目时,在图书馆借了不少有关于Java编程和类的剖析的书籍,利用课余时间,抓紧多练习Java的编程。当然因为这个问题的出现,我也得以通过将问题解决掉,提高了自身的编程水平。在这些书籍中,我看到了许多包含了开发软件的“奇妙”的思想案例,认真体会会被其解决问题的方法折服,从中能体会到很多东西,对这次做软件(设计及编码等)大有帮助。

这次的软件开发实践给了我一个信息:数据结构很重要。不能充分理解数据结构感觉很多编码就像是在“蛮干”,而且往往把“简单问题复杂化”,甚至复杂到不可能解决。认真学习数据结构并多做尝试去实现里面的算法,会发觉豁然开朗。里面有很多现存的方法可用在项目中,而这些跟数据结构是互为补充的。

另外,除了充分的估计自己组软件开发的难点,重点,更要了解所有组员在哪些方面比较强哪些方面不够强,我们在做的过程中也请教了不少高手才解决了问题。虽然我们成员自己做自己的一部分,但是我们成员与成员之间也保持了技术上的通信,相互学习交流,以达到共同提高的目的。看了组会的记录,就不难看出我们不仅仅做了任务的分配,还考虑了所做任务的时间,并且每次例会都总结了前次例会布置任务完成的情况和遇到的问题等等,我们认为只有时时刻刻按照计划做事,才能保证最后编码和总开发项目的按时结束。

三、软件开发过程中我们走过的风雨:

    如果因为一个地方的失误,很可能导致整个项目的失败。

    在很多软件开发的项目中,测试是最容易被程序员忽略的一个环节。当一个项目进度非常紧急的时候,测试往往都是时间缩水最多的阶段。结果是使“重视测试,充分测试”成了一句空话。我觉得我们在对整个模块做测试的时候大致是按照以下几步:

主要测试稳定性,效率以及功能是否正常;

确认单个模块完全正常后,再加入工程;

在系统架构设计的时候,可能会引入原型参考;

要对原型做完全测试,确认没有问题后,才可使用。

我们对可能出现错误的路径都进行了检测,因此在开发计划时留出了不少的时间来做测试,结果还是很不错的,发现了较多的错误,经过改正,使软件的健壮性得到了进一步的加强和完善。

通过这次的软件开发的实践,我真的学到了许多在课堂上学不到的东西,这在我以后的学习和工作的过程中都将受用不尽!在本次项目的执行过程之中,要感谢刘老师对于整个项目的悉心指导,老师切实的意见与建议都令我们获益匪浅。非常机缘巧合的是,这个学期,刘老师还教我两门课程,希望能在老师的教导下取得更优异的成果!

 

王逸欣,上海交通大学信息安全工程学院2007级信息安全专业,第二期“上海大学生创新活动计划”——自由伞——基于网络远程注册的软件保护平台”项目参与人;指导老师:刘功申副教授,上海交通大学信息安全工程学院
 
 
 
@2008 上海交通大学教务处     网络信息中心技术支持