前 言
信息系统的设计、软件的开发,是一门科学还是一门工程?这是一个很难讨论也很难确定的问题。实际上,工程中有科学,科学中有工程,二者兼容并蓄,而我们也没有必要去严格地鉴定二者之间的界限。信息系统设计、软件开发的目标是开发出有效、实用和高质量的信息系统,其中需要更多的理论指导,还是本质上是一个实践出真知的行当?这里有太多理论与实践关系的博弈。
开发活动真正上升到系统化、工程化的层次,往往是在提高开发效率和质量的压力已经明确压迫到自身的时候,是在“软件危机”的感觉已经“大难临头”的时候,很多开发者才真正开始回味信息系统、软件工程学习中的内容,萌发对系统化、工程化思考、设计的实质需求。然而,这时他们中的很多人才发现,此前课程中学习的理论,在实践中是那么苍白,似乎有些启蒙,但更多的像是泡沫,相当大一部分信息系统、软件工程的学者和书籍是在靠一堆洋精华或洋糟粕的洋“泾浜”而扬名万里。理论脱离实践,特别是脱离中国的实践、本土的实践,这是许多课程与教材中不争的现实。
信息系统开发、软件设计,实实在在是一门实践中的学问。将信息系统分析、设计、管理的基本概念、类型、方法、过程等总结出来,成为“信息系统”课程;而将各种大型复杂软件的开发、管理方法上升到理论研究层面后,则被称为“软件工程”而存在。但在信息系统、软件工程的各种书籍中,我们看到,从理论到理论、从理论到实践描述的书多,而从实践到理论、从实践到实践描述的书少。实践是检验真理的唯一标准,普遍真理必须与具体实践相结合。实践本身就是最好的老师,就是最好的理论!这个简单的哲学道理应该是学习信息系统、软件开发和软件工程的基本点。
基于上述考虑,本书以一个非常典型的信息系统——酒店信息系统的开发为例,站在欠缺经验的分析、开发者的角度,从最初的系统规划、项目计划开始,到系统需求分析、系统建模,再到系统设计、系统实现。初学者懵头懵脑开始参与开发,建模画图、编写文档、编程实现,自然是幼稚满篇、错误满地、漏洞百出。书中从这些懵头懵脑的、糊里糊涂的、不知所措的分析思考出发,规划系统,建立计划,思考Use Case,构建ER、DFD、面向对象UML等模型,再到系统构架、系统实现等,逐一勾画“菜鸟”,再加以评判,逐步改进、厘清;指出实践中带有普遍性、关联性的问题,再提升到系统化、软件工程化的层面加以讨论。全书采用对比分析、逐步改进深化的写作风格,并综合了作者多年系统分析、软件开发的实践经验。从这些来自真实实践的逐步分析构思及相应模型、图、表、文档的产生、评判、改进、提升的过程中,读者可以举一反三,避免类似糊涂、片面、错误的再发生,切实提高自己系统分析、软件工程的实际素质、能力和修养,从而避免被同事、上级批判、杯葛乃至被炒鱿鱼的窘态。
在系统分析设计中,各种模型图是抽象思考、清晰描述的重要手段,易于厘清思路,可读性强。本书将以各种结构图、流程图、多视角模型图为主要描述手段,辅以适当表格,力求图、表、文并茂。
对于流行的面向对象与面向过程两种软件开发方法,学习者要么混淆混沌,要么割裂对立,书中则根据酒店信息系统的开发实际,将二者综合,优势互补,最后再比较两种方法的特点,比空谈两种理论更具有启发性和实践价值。
本书并不试图代替任何一本信息系统、软件工程的理论或者教程类的书籍,但作为信息系统、软件工程课程的参考书,或者系统分析实践、软件实践、软件工程实习的教材,或者在信息系统设计分析、软件领域摸爬的新老手们有质量、效率危机已经“大难临头”的感觉,需要找点实际经验和实质参考规则时,这本书都是合适的。
站在信息系统、软件开发初学者的视角,读者最好具备一定的系统分析、软件设计、编程的基本概念和知识。对于时间不多又较有开发经验的读者,可以省却阅读第1、3、5章最后的文档实例,或根据自己的兴趣和目的选择性使用。
本书获得澳门基金会资助,并得到电子工业出版社的倾力支持,在此表示衷心感谢!
由于水平、时间所限,书中难免存在错误、缺陷之处,恳请广大读者批评指正。