您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 进出口许可 > 04_第三章:TrackStar(直译:跟踪之星)应用程序
第三章:TrackStar(直译:跟踪之星)应用程序我们可以继续为上面的示例程序添加新的功能,但这样并不会帮助我们了解如何使用框架去开发一个真正的应用程序。为了做到这一点,我们需要建立一个更加紧密的逻辑,与真实的应用非常紧近的程序。在这一章中,我们将介绍一个项目任务跟踪系统,给它取了个名字叫TrackStar。目前世界上,已经有很多关于项目管理和问题跟踪的应用程序,我们的基本功能将没有什么与众不同。那么,为什么还要建立呢?事实证明,这种基于用户的应用程序有很多的功能,也是很常见的网络应用,这将使我们能够实现两个主要目的:使用Yii自带的方便快捷的功能,建立可用的功能并挑战已经存在的其他网络应用。介绍真实的示例和设计方案,这将帮助你可以快速建立属于你自己的Web应用。介绍TrackStarTrackStar是一个软件开发生命周期(SDLC)中问题管理的应用软件。其实主要的目的是帮助保持在整个软件开发过程中所有出现的问题及问题的跟踪。这是一个基础于用户的应用程序,允许管理和创建用户及控制用户权限。一旦用户通过了验证和授权,将可以添加其他用户和管理项目。TrackStar可以管理在项目开发中,用户与他人(通常是项目组成员)之间存在问题,如开发任务和一些应用程序的错误(bug),把这些问题,分配给项目组内的其他成员,该项目中的任务将有几个状态如:尚未开始,开始和结束。这样,TrackStar就可以准确的描述一个项目什么时候已经完成,当前正在进行什么,还有什么尚末开始。创建UserStories(用户故事)简单说,UserStories就是应用程序的需求,并且根据应用程序的需求来确定UserStories。UserStories最简单的形式是规定User可以使用应用程序的哪个部份。它们开始是很简单的,随着程序的复杂性会深入到每一个详细的功能。我们的目标是开始时确定足够的复杂性。如果需要,我们以后将会添加更多的细节和更多的复杂性。我们之前已经谈到了这个应用程序包括三个主要的功能:用户(users)管理,项目(projects)管理和问题(issues)管理。在应用程序中,这几个主要功能是非常重要的。好了,让我们开始吧。用户(Users)TackStar是一个基于用户的Web应用,它将有两个用户类型:匿名用户认证用户一个匿名用户是所有未能通过登录验证的用户。匿名用户只能访问注册或登录,其他受制限的功能需要验证用户。一个认证用户是所有已经通过登录验证的用户。换句话说,已经认证的用户,他们将可以创建和访问应用程序的主要功能:项目管理和项目的问题管理。项目(Projects)在TrackStar中,项目管理是一个主要的功能。一个项目一般代表公司中高层人员的一个目标,并且由一个或多个人执行。典型的项目可以细分为更具体的任务(或问题),每个小步骤都代表需要完成这个项目的总体目标。建立一个项目和问题跟踪管理的应用,作为一个例子,它贯穿了整本书。很不幸,我们不能使用它来跟踪我们的程序,因为我们现在还没有开发。但是,假如我们使用一个类似的工具来帮助我们建立项目跟踪,我们可以创建一个项目叫建立TrackStart项目/问题管理工具。这个工具将项目分解成更细致的项目问题。例如:创建登录页面或设计数据库架构等。经过身份验证的用户可以创建新的项目。该项目的创建者是这个项目的所有者。项目的所有者可以编辑和删除自己创建的项目,还可以为项目增加成员。除了项目所有者,其他与这个项目关连的用户简称为项目成员,项目成员可以添加新问题以及修改现有的问题。问题(issues)项目中的问题可以分为以下三种类别:功能(Features):此类别代表真正要实现的功能,例如:“实现登录功能”任务(Tasks):此类别代表需要做工作,但不是该软件的一个实际的功能。例如,“配置服务器”错误(Bugs):此类别代表应用程序运行的不是很正常,没有达到预期的功能。例如,“帐户申请个表单不验证电子邮件的格式”问题(issues)可以有以下三种状态:尚未开始(Notyetstarted)已开始已完成项目成员不仅可以添加新问题以及修改现有的问题。他们还可以分配问题给自己或其他的项目成员。现在,我们了解了这三个主要的模块就可以了,我们将更进一步研究,用户注册的细节以及如果在项目中添加一个任务,我们已经对基本的功能做了一个概述,下面我们将会更加注重细节,因为我们将要实现这些功能。不过,在我们开始时,我们应该注意一下页面的导航和应用程序的流程。这将帮助我们建立更好的了解总体的布局和流程。导航和页面流程这是一件能概括应用程序主要页面以及它们是如何结合在一起的工作,这将有助于我们迅速找出所需的Yii控制器、操作方法和视图,以帮助我们建立期望实现的功能。下图所显示的是一个基本的想法,描述了这个程序从登录开始到一个项目的细节列表的流程:当用户第一次访问,必须进登录验证才能访问其他功能。一旦登录成功,用户将看到一个与他相关的项目列表和一个创建新项目按钮,选定一个项目,将转到这个项目的详细信息页面。该项目的详细页面将显示各种类型问题的列表,并且也有添加新问题和编辑其他问题的按钮。这都是一点非常基本的功能,但这个图片给了我们更多的信息是各各功能怎么样连接在一起,使我们能更好的确定需要的模型、视图和控制器。我们努力的结果是,这张图片可以与他人分享,并使每位参与者都能了解应用程序的流程。以我的经验,当要做一个新的应用程序时,几乎所有人都更喜欢图片而不是繁杂的规则。定义数据结构我们下面的工作是需要考虑一些有关的数据的事情,并开始建立规范。如果我们根据主要的功能划分,我们最终会得到一个不错的列表,使用ActiveRecord建立我们想要的数据模型。我们根据UserStories的设计,决定了以下内容:用户(User)项目(Project)问题(Issue)根据UserStories的功能设计和工作流程图,我们首先尝试设计所需要的显示数据,如下图:这是最基本的模型对象,描述了我们主要的数据实体,各自的属性,以及对象之间的一些关系。在1..*两边的对象,如Project(项目)对象和User(用户)对象之间是多对多的关系。一个用户可以拥有多个项目,一个项目同样也拥有多个用户。同样,一个项目可以有0个或多个(Issues)问题,而与此相关的是Issues(问题)只属于一个项目。此外,用户是所有者(或请求者),可以有多个Issues(问题),但是Issues(问题)只有一个所有者(也只有一个请求者)。我们一直在让这些属性保持简单。一个User(用户)只需要用户名和密码,以便可以登录。(Project)项目只需要一个名字。根据我们当前了解,Issues(问题)是关联关系最多的。正如之前所说,Issues(问题)有一个分类属性,用来区分bug(错误)、feature(功能)、task(任务)。他们也将有一个状态属性用来说明Issues(问题)的进展情况。用户在系统中刚刚创建Issues(问题)时,requester(请求者就是用户自己),当把Issues(问题)分配给一个系统中的用户时,他将成为Issues(问题)的所有者。我们还定义了描述属性,用来详细说明这个Issues(问题)。请注意,我们现在并没有明确的提到关于数据库的结构。事实上,直到现在我们才从数据的角度彻底全面的考虑我们真正需要什么。我们没有使用工具创建并存放这些数据。在操作系统中是否安装了关系数据库?我们是否需要持久化这些数据呢?对这些问题的回答不需要在计划之初。因为这样可以更好的收集更多我希望和所需要的功能和数据,我们可以与项目相关者讨论要实现的细节,以确保一些想法是我们想要的。项目相关者包括开发人员,产品/项目经理等。他们总会给出一些建议和反馈。就我们而言,我们实在不能与其他人做这方面的沟通。如果我们能够与你相见,我们一定会与你协商。不幸的是,以书本的这种格式,不允许双向沟通。因为,我们没有其他人来咨询,所以,我们按着之前的方法继续前进。不过,在我们创建应用程序之前,我们需要了解一下我们的开发方式。我们在开始编码之前,将说明一些开发方式和原则。确定开发方式我们将会使用敏捷的开发过程,提高复用性。现代的软件开发中,'Agile'(敏捷)是一个经常提到名词,在开发人员之间有不同的含义。我们在整个开发过程将会集中一个敏捷的方法,包括透明和公开的合作,不断的得到反馈,迅速响应不断变化的需求。我们不能等到每个细节都确定后再开始编码,我们会逐步的进行。一旦功能的细节确定,我们将开始实现这个功能,其他的功能或细节仍在规划和设计阶段。在实施中我们会重复的遵遁一个规则。我们首先会进行分析和设计,然后试着编写代码、测试代码,并收集反馈意见。设计(design)-编码(code)-测试(test)-评价(evaluation),遵遁这个规则,直到每个人都很满意。一旦大家都很满意,我们就可以将新的功能部署到我们的应用程序中,然后开始收集下一个功能设计,继续遵遁这个规则。自动化软件测试收集反馈信息是敏捷开发重要的部份。可以从用户、开发队团及所有项目干系人获得反馈。这个开发方式将允许它告诉你在应用程序整合或部署存在的问题。该方法经常由你来编写单元和功能测试得到反馈信息。单元测试和功能测试单元测试的编写提供了验证代码是否正确。功能测试的编写提供了对应用程序整体的功能是否正确。Unit单元测试单元测试是软件测试中最小的单位,在面向对象的应用程序中,(如Yii应用程序)的最小单位是类的接口,公共的方法。单元测试集中在一个单独的类中,而不要求与其它类或对象一起运行。他们的目的是为了验证一个最小单位的代码是否达到预期目的。功能测试功能测试重点测试应用程序端对端的功能特生。这个测试相对于单元测试要高一个层次,通常要多个类或对象一起运行。功能测试的目的是验证一个给定的应用程序功能是否可以正常工作。测试的好处写单元和功能测试有许多好处。第一可以提供文档。单元测试可以准确迅速地找到一块代码中存的在问题。同样,功能测试文件可以测试应用程序内部的特性是否实现。如果你继续努力的编写这个测试文档,则这此文档的变化同样也是应用程序的变化。测试文档也作为反馈机制,不继地向开发者和项目的其他干系人提供关于应用程序是否达到预期的工作。你每次修改代码后运行你的测试文档并获得即时反馈是否你无意中修改了该系统的其他行为,如果出现问题,立即解决这些问题。这增加了开发人员的信心,让应用程序中的错误减少,使项目更成功。这样的即时反馈也有助于改进和改善代码的基础设计。开发者可能会改善现有的代码,如果测试文档写的很到位,应用程序的功能改变可以立即得到反馈。编写单元和功能测试文档,可增加开发人员的信息,编写更好的软件,发布更稳定的应用程序及高质量的产品。测试驱动开发测试驱动开发(TDD)是一种软件开发方法,它有助于为软件开发创造一个舒适和信心的环境,确保你的测试代码与你的应用程序一起成长,并始终保持最新。它规定在你开始写代码之前先写测试代码。下面是总结的步骤:1.开始写一个失败的测试代码。2.运行测试代码确定它是失败的。3.快速编写你的程序代码,并测试通过。4.再次运行测试代码,以确保它确实通过了。5.重构代码,移除重复的逻辑或改善某些部分,并试着测试通过。整个开发过程重复这些步骤。即使再好的意图,如果你迫不及待的写下你的代码之后你可能不会完成测试代码。先写你的测试代码并在书写过程中再编写代码以保证最佳的测试覆盖率。这种深度的覆盖有助于减少项目的压力,虽着应用程序的复杂度建立信心,并不断提供积极的反馈作为补充和作出改变。为了使用TDD,我们需要了解Yii应用程序中如何测试。在Yii中测试从Yii1.1版本起,Yii已经紧密结合了PHPUnit()和SeleniumRemoteControl()测试框架。特定的测试框架并没有关于TDD,但非常推荐使用。当然,你可以使用测试框
本文标题:04_第三章:TrackStar(直译:跟踪之星)应用程序
链接地址:https://www.777doc.com/doc-3377524 .html