Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion {技术}代码的坏味道——你们的项目有这些问题吗?
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Tiny fool  
View profile   Translate to Translated (View Original)
 More options Sep 21 2009, 9:14 pm
From: Tiny fool <tinyf...@gmail.com>
Date: Tue, 22 Sep 2009 09:14:22 +0800
Local: Mon, Sep 21 2009 9:14 pm
Subject: Re: [TL] Re: {技术}代码的坏味道——你们的项目有这些问题吗?

呵呵,恰恰相反,我跟作者的情况是完全一样的。遇到那个重构问题的时候,我是刚到那家公司的新程序员,普通程序员,连项目经理都不是,呵呵。
产品用户一直呼唤这么一个产品,其实我们部门也想过做这么一个产品,但是一直以来只是一个想法而已。

我到了那个公司的时候,跟我的boss一起,把这些需求整理,直到构建团队,我们把两个硬件团队的人也抽调到了这个team里来,这是这个部门一直也没有做过的 。程序开发总共7个人,两个做插件,或者叫驱动,一个人做主界面,我做整体架构和产品设计,一个人做所有的原生程序的数据解析,等等。

这些都是建立在无数的沟通之下的,等着大boss自上而下的布置你应该重构了,呵呵,这简直是天方夜谭。

2009/9/22 sagasw <sag...@gmail.com>

> Tiny的情况应该和作者的不太一样,关键问题不是技术,而是人。

> Tiny写的重构里面如何设计如何实现都是完全掌控的,客户方只是提出商业需求没有技术限制。

> 但是我看作者的描述,他在项目中应该只是一个程序员的身份,如何影响别人注意代码味道的问题,如何影响管理层让他们感觉到代码味道带来的后期维护代价,是比较有 难度的。我的意见是不要改革要改良,针对他自己写的feature代码力争清晰简洁,修改其他bug时候相应的进行小范围代码重构,这样才能把风险降到最低。

> 代码坏味很难看,但是为了修改搞到自己饭碗危险那就不值了。

> 2009/9/22 Tiny fool <tinyf...@gmail.com>

> 像极了我当年去XXX遇到的那个程序,呵呵
>> 这个故事详见:一个具体项目的重构(一)<http://www.tinydust.net/prog/diary/2004/09/blog-post_27.html>
>>  ,一个具体项目的重构(二)<http://www.tinydust.net/prog/diary/2005/10/blog-post.html>
>> ,一个具体项目的重构(三)<http://www.tinydust.net/prog/diary/2005/10/blog-post_30.html>
>> 。

>> 当然我们的重构是把项目重新设计了一遍,而不是一般意义的代码级的重构。因为我们很多工程问题是由于要给略有不同的同类硬件产品设计PC客户端造成的。以前的实 现方式是,一个新硬件产品,就从老的PC客户端代码改起,最后有无数的差异不大的PC客户端代码,里面充斥着各种谁也不知道的宏定义。新的实现方式是,把所有产 品共有的界面逻辑和数据模型,放在一个exe里面,为每一款新产品设计一个dll插件,升级和新产品的主要工作就是设计和分发新的dll插件。

>> 2009/9/22 missdeer <missd...@gmail.com>

>>> 最近一直在学习Martin Fowler的《重构》,并且对照我参与的一个已经投入至少15人年,历时3年,约20万行,目前仍然在继续开发维护

>>> 的项目,让我觉得触目惊心,其中的代码,到处充斥着Martin Fowler所谓的坏味道,而又困惑重重,不知道别的项目代码质量是如何的。
>>> 下面就都只是随便举一下项目中的实际情况为例,项目是用MFC开发,使用了Codejock的Xtreme Toolkit Pro界面扩展库。
>>> 重复代码。有3处计算MD5的实现,分别由3个开发人员完成,大概实在是这种实现的代码在网上太容易找到了。另外有一个特性,可以与另一个服务进行
>>> 文件的上传、下载、更新、同步,而文件因为类型不同,做这些操作时某些细节有细小的差别,但实现中却是为每一类文件具体而完整都实现了一遍这些操作。
>>> 过长的函数。有的开发人员就是习惯性地写出长函数。整个项目中,圈复杂度超过100的有4个函数,超过20的不知道是几十还是上百个。
>>> 过大的类。有一个类的cpp文件,是18000行,另外有一个类的cpp文件是10000行。还有CMainFrame类的cpp文件,用
>>> Source Insight打开后,在列出函数列表的窗口中显示“Too complex to parse”。
>>> 过长的函数列表。有一个cpp文件中共9个函数实现,每个函数的参数都超过7个,而且含义晦涩,自从原创人员两年前离职后,没人敢去动那块代码。
>>> 发散式变化。前面提到的一个18000行的cpp文件,是一个视图的实现。如果要给该视图的右键菜单中新增加一个菜单项,并进行响应,需要修改不知
>>> 多少个函数,记得曾经有个开发人员,花了一周时间都在为了一个新增的菜单项。添加代码没花多少时间,时间花在添加后,因此引发的问题上。
>>> 霰弹式修改。有两个模块都需要一个高亮显示语法关键字的编辑功能。有一个基本的控件封装类,但要修改一些代码时,总是要很小心地去从头检查一遍另一
>>> 模块的实现是否受影响。我的理解是,这个控件封装类的抽象不够通用,或者两个模块的相似度并不高。
>>> 基本型别偏执。这样的代码在项目中不好找,不过有类似的。项目中使用MSXML操作xml数据,在各个模块的实现中,都直接聚合了一堆MSXML的
>>> 接口指针,操作xml的方法,和业务逻辑、界面响应完全混合在一起。
>>> Switch结构。很多处又大又长的switch结构。
>>> 冗余累赘类。有两个(派生)类过于考虑以后的扩展性,而那种扩展性的需求至少在未来2、3年内是遇不上的。
>>> 夸夸其谈未来性。有一个快捷键处理模块,从项目刚开始就已经实现完成,但后来一直没被用过。项目没有开始实际编码前,超过5个人,花了2个月制订了
>>> 各个模块需要暴露的COM接口,结果到现在3年了,真正实现的接口也才10个左右。
>>> 中间转手人。CMainFrame类已经成了各个模块用来转发消息的场所。一个重要的原因是界面与业务逻辑耦合,很多业务处理需要
>>> MainFrame转发到相应的界面实现类中进行处理。
>>> 狎昵关系。无论是各个Pane还是MDIClient,都与CMainFrame存在着这种双向依赖关系。
>>> 异曲同工的类。两个有交互的模块,居然各自定义了一组数据结构,用来描述现实世界中的同一种事物,中间又由CMainFrame来完成这两组数组结
>>> 构之间的转换。
>>> 纯数据的类。很多时候,为了向线程函数传递一些数据(超过一个DWORD的量),就专门定义一个纯数据的类。
>>> 被拒绝的遗赠。两个平行的模块,一个类是从另一个类继承过来的,而明明有很多那被继承的类的功能,在派生类中是不需要的。呃,被继承的就是那个
>>> 18000行的类。另外还有那两个需要编辑功能的模块,曾经居然也是一个类从另一个类直接继承,导致在派生类中变成不需要什么功能,就加些代码,把那部
>>> 分功能屏蔽掉。
>>> 过多的注释,有一个开发人员,喜欢在自己编写的函数开头部分写上几十行注释,呃,全是算法描述和伪代码。
>>> 在公司4年,我参与过的略有规模的项目,除了这个外,另外有一个,基本是独自一人完成,代码量最高峰是7万行,后来路过不断的重构,在仍然有新特性
>>> 增加的前提下,代码量缩减到4万多,现在回头看来,这个项目中代码的坏味道似乎少一些,但质量却也不行,崩溃经常发生,其他业务逻辑有问题的也不少。
>>> 所以,我就很是困惑啊,别人的项目是怎么样的情况?

>> --
>> Tinyfool的开发日记 http://www.tinydust.net/dev/

--
Tinyfool的开发日记 http://www.tinydust.net/dev/

 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.