中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 软件工程 > 系统分析 > 系统设计 > 系统设计
软件开发中的设计问题
作者:未知 时间:2005-08-07 11:18 出处:系统分析之窗 责编:chinaitpower
              摘要:软件开发中的设计问题



软件开发中的弊病 

CSDN dhl2001
原文出处: http://www.sanhaostreet.com/bbs/alllist.asp?son_column=27 


    笔者此前从事的是软件开发工作,一直到现在心里总是一个疑问接一个疑问。那就是“对软件开发而言,设计到底指的是哪个阶段呢?”。由软件工程师转行为记者后,笔者有机会采访了形形色色的系统工程师和程序员,这一疑问也越来越难以释怀。 

  一般来说,商业应用的开发可以分为设计和制造(编程)两个阶段。软件开发人员则有设计人员(主要是系统工程师)和程序员之分,先由设计人员写出“设计书”,然后由程序员来编程。设计书式样各异。由于是第一道工序,所以就有可能会使用DFD(data flow diagram,数据流图)、ERD(entity-relationship diagram,实体关系图),或者最近颇为流行的UML(unified modeling language,一体化建模语言)。如此说来,所谓的设计阶段就是指“设计人员完成设计书然后交给程序员”这么一个过程。 

  当然,不能否认尽量以简单的模块来实现复杂的软件结构这一工作的重要性。但是,单靠设计书就真的能开发出软件吗?至少笔者还从来也没有听说过“只凭设计书就能自动生成所有代码”的说法。目前能够实现这一任务的CASE(computer aided software engineering)工具也还没有开发出来。 

  这样一来,程序员就得仔细阅读设计书,深挖“字里行间”的要求,并解决设计阶段无法预见,但在编程过程中出现的问题。特别是随着近来技术革新速度的加快,比起自动代码生成技术来说,还是人更容易跟上形势。但是这种情况下,如果设计书比较含糊,或者程序员能力不足的话,就可能会开发出功能不全或及性能不佳的软件来。 

  这一点正是软件开发同其它工程领域最显著的不同之处。比如说工业产品的设计书(设计图)是绝对的,只要有设计书,那么拥有相同的制造设备的生产商就能生产出相同的产品(当然也有例外)。而在软件开发领域,软件开发的编程阶段主要依赖于程序员的能力而不是设计书。由程序员完成的软件与设计书的内容大相径庭的例子也并不少见。也就是说设计书并不能起到像机械加工方面的设计图一样的作用。 

  笔者最近开始思考这么一个问题:与其说问题出在设计书的内容上,倒不如说是设计工程的方法本身出现了错误。促使笔者产生这种想法的契机是美国软件技术人员Martin Fowler写的论文“The New Methodology”(http://www.martinfowler.com/articles/newMethodology.html)。Martin Fowler在该论文中写道“软件开发的全部过程都属于设计,制造阶段仅仅指编译和联接过程”。另外Martin Fowler还主张“源代码才是真正的设计书。直到编程作业都应算做设计阶段”。 

  笔者认为,这种想法从根本上改变了设计人员与程序员之间的关系。话虽如此,实际上大多数程序员还是仅仅被看作是从事简单的重复劳动的人员,不管他们付出怎样的辛勤劳动从事编程作业,都难以得到公正的评价。实际上,整个软件业界都有这么一种印象“比起程序员来说,设计人员更加优秀”。笔者也曾经接受过上司这样的教导“要朝高级设计人员努力!不要再做程序员了”。这其中的逻辑就是:只有成为设计人员才是升职之道,而程序员随时可以从外面招聘。 

  如果大家都认为程序员只不过是成为设计人员的一个跳板的话,那么谁也没有情绪老老实实地干活了。这样下去要培养出优秀的程序员可就难上加难了。而且从设计人员与程序员的力量对比来说,程序员也还是处于不利的地位。笔者认为,最近被人们挂在嘴边上的职业道德危机及软件质量低下的问题,实际上原因正在于此。 

  或许重新审视编程并将其纳入设计过程,就会为目前僵硬的软件开发体制提供一个洗心革面的机会。因为这样一来,比起做出周密的设计来说,人们会更加关注如何才能写出优秀的程序来。



注:这是我在网上搜到的一篇文章,对程序员很有益.



CSDN上对该文的评论 

csdev ( 2001-6-4 20:18:23 ) 

程序员就是软件工程师 

myan ( 2001-6-4 18:46:28 ) 

非常赞成作者的观点。他提到的那篇Martin Fowler的文章,前不久我刚刚读过。Matin Fowler是XP派的主要领导人物,最近我在Newsgroup上接触了几个XPers,他们的观点实在令我耳目一新。窃以为XP比CMM更加适合中国的国情,所生产出来的软件产品一般来说也更具有原创精神。将程序员贬低为编码员,摒弃在设计人员之外,这是不现实的,分工严格,层次分明的组织机构在高智力人群中是一种创造力绞杀,很容易滋生官僚主义。Babara Moo曾经说过,管理一组程序员就如同放牧一群骄傲的猫:如果没有纪律,他们会成为一盘散沙,毫无力量。如果纪律过强,壁垒森严,就会给放牧人带来无穷的烦恼。

蒋先生的观点同样很有道理,程序与人的交互应当由专门人才来研究。程序员的思维通常过分靠近机器,难以开发出优秀的交互界面。现在RAD开发工具带来的一个很大的弊端,就是程序模块的缠绕,功能代码与界面响应代码纠缠一团。这种风格不仅影响了一大批程序,而且影响了一大批人。必须首先实现两者的分离,是之可以独立发展和修改。

蒋先生可否考虑在某一期《程序员》杂志做一个XP专辑? 

duker ( 2001-6-4 18:06:17 ) 

我非常赞同“软件开发的全部过程都属于设计,制造阶段仅仅指编译和联接过程”,我们国内的“设计师”是不是需要有点实践精神,c++语言的发明者实现了第一个c++编译器,sun的每一个规范都伴随着一个 实现。我们的“设计师”好象写代码的很少,是不会呢,是不敢呢,是嫌辛苦呢,还是不屑去写,连c++的发明人都在写代码,你有什么好不屑的。
如果这个理由站不住,那么其他理由就更站不住了,我要说,不写代码的软件技术人员是可耻的。这种人的存在,对我国的软件事业发展有百害而无一利。 

jiangtao ( 2001-6-4 15:56:20 ) 

在当今的软件系统开发过程,软件产品功能和设计等这一切都由程序员决定,由此导致的结果是难于使用的软件。虽然他们确实是在努力工作并使软件易于使用,可他们却只是从自身的角度出发,最后只能提供其它软件工程师易于使用的产品,而不是普通人容易使用的产品。
业界人士相信新技术,如语音识别和人工智能,可以大幅提高产品易用性,其实不然,产品不足是由于在软件开发进程上有缺陷,而不是开发工具和技术的问题,解决问题的关键是交互设计,交互设计并不是指的软件界面美工设计,而是人机交互接口的设计。


jiangtao ( 2001-6-4 15:50:51 ) 

我在第六期程序员杂志上专门写了篇书评《软件创新之路》,
这本书的观点是人机接口设计(交互设计)必须专业化,
软件失败的原因在于开发过程不合理,其中程序员负责设计要担负很大责任 

aleliu ( 2001-6-4 14:21:36 ) 

不错,非常赞同!!
尤其在并没有大量优秀设计人员的今天,程序员通常都是身兼多职:对系统设计查漏补缺简直都成了主要工作内容了.
如果能够拥有能力进行宏观设计,微观分析的人才,软件创世纪..世界将会多美好啊.... 

dhl2001 ( 2001-6-4 13:26:48 ) 

看来我要拜读一下《软件创新之路》了 

jiangtao ( 2001-6-4 12:29:05 ) 

其实《软件创新之路》一书提倡的也是这个,把人机接口设计和编码设计要分开 

Albertking ( 2001-6-4 9:15:02 ) 

我完全同意这些看法我记得我前一段时间也看过一遍文章也是写开发模式的。
有了好的设计没有程序员天才的突发异想的编码只能算是一个好程序,而不是一个经典的程序


关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有