John Satzinger美国密苏里州立大学计算机信息系统学院教授,他同时拥有加州州立理工大学的MBA学位和克莱蒙研究大学的博士学位,并具有15年以上的CIS和MIS大学课程教学和研究经验,他的研究兴趣和专长包括:系统分析与设计、图形用户界面设计、面向对象的开发、数据库和客户-服务器系统开发。Robert Jackson美国杨百翰大学计算机科学专业博士,之后在该校信息系统学院任教多年,现在已退休。他已经发表了大量有关面向对象系统开发、电子商务、WEB系统、项目管理以及信息系统教育方面的论文和著作。目前,他自己开创了几个新的电子商务业务,并将积累的分析、设计和商业实践经验融入他编写的教材中。Stephen Burd美国新墨西哥大学副教授,从1984年开始在此校从事管理信息系统、网络、数据库、硬件软件课程的教学。他分别在美国巴尔的摩大学获得学士和硕士学位、普度大学获得博士学位。
前 言Introduction to Systems Analysis and Design: An Agile, Iterative Approach, Sixth Edition当我们撰写本教材的第1版时,系统开发正处于一个重要的转变过程中——从结构化方法到面向对象方法。在同类教材中,我们较早地系统性引进面向对象方法,第6版在讲解面向对象技术时将继续保持这一领先优势。然而世界变化不断。如今,大量创新成果和技术已经牢牢嵌入系统开发领域。首先是无处不在的全球互联网。这导致了大规模的连通性,并且意味着当今的项目团队将分散于世界各地。此外,技术供应商巨头(比如微软)以及一些零散的小供应商为我们提供了功能丰富、多种多样的软件开发环境。为了管理当今系统开发团队的广分布、快节奏、强连接及千变万化的环境,软件开发技术在不断升级,项目管理方法也在不断发展。基于基础项目管理原则,新的途径和理念提供了类似迭代、增量式开发等更新潮、更易成功的方法论。而这些都在本书中有所体现。尽管本书全面涵盖了各种主题(如用例、面向对象建模、综合项目管理、统一建模语言以及敏捷技术)且在领域内持续领先,但也是时候采取新的教材设计了。第6版使用创新方法来讲授系统分析与设计,并利用了新兴的教学工具和技术。因此,本书不但使学生更易于学习系统分析与设计,而且使教学工作能够更顺利地进行,为学生和老师都提供了极大的便利。在这一版本中,我们主要做了三个方面的更新。首先,我们讲授系统开发的基本规则,这些规则必须紧跟今天普遍连接的环境。其次,我们讲授并解释由于广泛互联而在当今获得使用的新兴方法和技术。最后,我们重新组织并修订了书中内容,使得它能更好地用新的方法传授新的概念。例如,第1章介绍了一个新系统开发中的完整迭代方法。学生可以在学习抽象的原理或记忆专业术语前,从头到尾(通过实验和测试)看到完整的迭代方法。我们对这种新的方法感到兴奋,这些更新使新的教学素材和工具更适合系统分析与设计课程的教学。教师会发现这本书直观、丰富且易用。学生则会在本书中有更好的参与感和主动权。通过上课和教师提供的指导,学生可以自学书中呈现的大多数理论。这本书将会给老师和学生带来非凡的讲授和学习体验。更新这一版在许多方面做了更新,包括从传统方法到面向对象方法的重要概念,涉及用例驱动的面向对象方法(通过UML建模使其更详细且有深度),强调敏捷和迭代开发,并在项目管理中采用了新的概念。同时,材料的重组为学生学习系统分析与设计提供了更好的支持。涵盖面向对象和传统的分析与设计本书的一大特点是整合了一些重要的系统建模概念,这些概念在传统的结构化分析方法和面向对象的分析方法中都会涉及——基于用户目标和事件而建立的系统用例,加上对象实体,这些都是系统问题域的一部分。我们用一章来介绍如何确定用例,再用一章介绍如何对关键的对象实体建模,包括实体-联系图,同时强调UML域模型类图。与传统方法有所不同的是,本书先假定学生从一开始就了解面向对象的关键概念,包括结构化概念,因为近年来许多教师更强调面向对象方法的教学。全面涵盖UML和面向对象方法本书中呈现的面向对象方法基于OMG(对象管理组织)的统一建模语言(UML 2.0),它是由Grady Booch、James Rumbaugh和Ivar Jacobson发明的。模型驱动方法首先分析用例和场景,然后定义涉及用户工作的问题域类。需求建模包含用例图、领域建模、用例描述、活动图和系统顺序图。FURPS+模型就是用来强调功能性和非功能性需求的。本书深入讨论了设计原理和设计模式,通过使用UML组件图和包图来建立系统体系结构的模型。特别关注使用CRC卡、顺序图和类图设计来实现用例,并详细地讨论了模型的细节设计。涵盖项目管理许多本科课程需要系统分析与设计这门课程所讲授的项目管理知识。为满足这一需要,我们通过“双管齐下”的方法来学习项目管理。第一,项目管理技术和任务在本书中得到了突出体现,我们将讲解系统开发生命周期的各种活动(包括迭代开发)该如何使用特定的项目管理方法。第二,用独立的一章完整地介绍了项目的计划和管理。重组内容以实现高效学习第6版的结构焕然一新,它从一个贯穿系统开发始末的完整例子开始,使学生快速了解系统分析模型和技术,然后介绍系统设计的概念,强调系统结构、用户界面和系统界面。学生会在前7章中了解许多有关分析和设计的知识。接下来,在学生理解了系统开发真正包含的内容后,就会明白本书理论知识的重点是管理系统开发项目,包括敏捷开发。最后,本书覆盖了详细的设计主题与部署主题,从而帮助学生更深入地了解现代方法,如统一过程(UP)、极限编程(XP)和Scrum开发方法。篇章结构和用书建议本书包含了很多简洁、现代和集中的主题,这些主题对信息系统开发者来说是必不可少且非常重要的。本书中涉及三个主要的课程领域:系统分析、系统设计和项目管理。其他没有那么重要的领域则不会深入讲解,比如系统的安装、启用、测试和调整。除此之外,我们也采用了一些与其他书籍不一样的方法。因为学生已经在第1章中对系统分析与设计有了基本了解,所以我们加深了关于系统分析与设计的概念,并在以后的章节中增加了项目管理的主题。这使得学生在理解系统分析与设计的元素之后能更好地学习项目管理的概念。我们认为这对于学生学习此门课程是很有意义的。第一部分:系统开发导论第一部分即第1章,主要内容是系统开发的概述。第1章开篇清晰地解释了系统分析与设计的目标,然后用一个详细、具体的例子来阐述在典型的软件开发项目中都需要什么。很多参加编程课程的学生认为编程就是必须会开发软件和调试系统,本章和本书中的其他内容会消除这个误解。第二部分:系统分析活动第2~5章详细阐述了系统分析。第2章讨论的是搜集某个商业问题的信息所需要的系统需求、分析活动和技术。只有充分理解问题所在,才有可能开发出相对适合的系统。第2章同时阐述了怎样确定利益相关者并使其参与进来,还介绍了模型和建模的概念。第3章和第4章讲述了以一种有用的方式捕获详细系统需求的建模技术。当我们提到信息系统时,两个核心概念是很有用的:一个是用例,它能正确定义出最终用户需要系统做什么;另一个是数据实体域类,用户以此来完成他们的工作任务。这两个概念——用例和数据实体域类——在任何一种系统开发方法中都是很重要的。第5章出现了更多深层次的需求模型,例如用例描述、用例图、系统顺序图以及状态机图。这些建模技能使得分析员可以对用户需求进行深度分析并撰写需求说明。再次重申一下,系统分析的目的就是完全理解和说明用户需求。第三部分:系统设计的要点第6章和第7章的主要内容是系统设计和设计用户体验的基本概念。第6章全面介绍了系统设计和结构化设计的重要原则。这一章不但是各种设计原则的概述,而且为后续章节中所要学习的设计技术、任务、技巧和模型打下了基础。第7章讲述了有关设计用户界面和系统界面的其他一些设计原则。设计用户界面是分析和设计的结合。与分析有关是因为它需要很多用户的参与,包括说明用户活动和期望。另一方面,这也是一个设计活动,因为它能创造出特殊的组件,这些组件会对编程结果的产生起到促进作用。必须精确设计界面,记录和其他用户的互动,这样才能作为最终系统的一部分而进行编程。当一个信息系统与另一个信息系统在没有人为干扰的情况下产生了交流和交互时,就需要设计系统界面。系统界面因为网站服务和云计算而变得越来越重要。第四部分:项目和项目管理通过这一部分,学生会对系统开发的所有组成元素有一个基本了解。第四部分会通过解释更多有关组织和管理开发项目的过程而将所有概念结合到一起。第8章描述了在当前环境下用不同方法进行的系统开发,包括几种重要的系统开发生命周期模型和敏捷开发。这是一个重要的章节,它能帮助你理解项目是怎样得以执行的。第9章通过讲解项目计划和项目管理的基本原理扩充了这些概念。每个系统分析员都会参与到组织、协调和管理软件开发项目的过程中。除此以外,大多数优秀的学生最终会成为团队领导和项目管理者。第9章中呈现的这些原理对于一项成功的事业来说是必需的。第五部分:高级设计和部署概念第五部分会更深入地谈到系统设计、数据库设计,以及其他重要的有关有效且成功的系统开发和部署的论题。第10章和第11章详细解释了用来设计软件系统的模型、技巧和技术。正像之前提到的,系统设计是一个相当复杂的活动,尤其是要把它做得很正确。这两章的任务是教会学生从简到难的各种技术,这些技术可以用来进行有效的软件系统设计。第12章描述了系统开发的最终元素:最终测试、部署、维护和版本控制。分析与设计课程的教学建议分析与设计课程的教学方法有很多种,并且各个大学中教授这门课程的目的也不一样。在一些学院的信息系统专业,分析与设计课程是一门顶级课程,学生要将之前在数据库、电子信息和编程课程中学习到的知识运用到一个真实的分析与设计项目中。在其他的信息系统专业,分析与设计会作为系统开发领域的导论课,先于其他专业课。还有一些信息系统专业开设两门课程,第一个学期强调的是分析,而第二个学期则注重设计和应用。另外一些信息系统专业仅仅开设一门课程,同时讲授分析与设计。由于要在强调传统结构的方法和面向对象方法中进行选择,所以这门课程的设计变得更加困难,这也使得它要依靠学校自身课程设置的优先顺序。此外,越来越多的迭代方法在开发中得到应用,这使得顺序排列分析与设计课题难上加难。例如,若采用迭代开发,则两门课程就不能轻易地分为分析和设计。这些目标、课程内容、任务和项目会不断变化,我们所能提供的是使用这本书教授这门课程的一些建议。面向对象分析与设计课程面向对象设计在本书中得到了详细介绍。这门课程包括面向对象的分析和设计、用户和系统界面设计、数据库设计、控制和安全以及应用和测试。我们通常假设项目采用定制开发,包括Web开发。本课程强调迭代开发方法,包括三层结构、项目管理、信息收集和管理报告。为了学生学习的完整性,一学期制课程通常仅仅达到完成用户界面原型设计的目标。有时,这门课