2007-02-25

软件开发项目可行性分析报告样例

1 引言
1.1 编写目的:阐明编写可行性研究报告的目的,提出读者对象。
1.2 项目背景:应包括
◆ 所建议开发软件的名称
◆ 项目的任务提出者、开发者、用户及实现软件的单位
◆ 项目与其他软件或其他系统的关系。
1.3 定义:列出文档中用到的专门术语的定义和缩写词的原文。
1.4 参考资料:列出有关资料的作者、标题、编号、发表日期、出版单位或资料来源,可包括
◆ 项目经核准的计划任务书、合同或上级机关的批文
◆ 与项目有关的已发表的资料
◆ 文档中所引用的资料,所采用的软件标准或规范


2 可行性研究的前提
2.1 要求:列出并说明建议开发软件的的基本要求,如
◆ 功能
◆ 性能
◆ 输入/输出
◆ 基本的数据流程和处理流程
◆ 安全与保密要求
◆ 与软件相关的其他系统
◆ 完成日期
2.2 目标:可包括
◆ 人力与设备费用的节省
◆ 处理速度的提高
◆ 控制精度或生产力的提高
◆ 管理信息服务的改进
◆ 决策系统的改进
◆ 人员工作效率的提高
2.3 条件、假定和限制:可包括
◆ 建议开发软件运行的最短寿命
◆ 进行显然方案选择比较的期限
◆ 经费来源和使用限制
◆ 法律和政策方面的限制
◆ 硬件、软件、运行环境和开发环境的条件和限制
◆ 可利用的信息和资源
◆ 建议开发软件投入使用的最迟时间
2.4 可行性研究方法
2.5 决定可行性的主要因素


3 对现有系统的分析
3.1 处理流程和数据流程
3.2 工作负荷
3.3 费用支出:如人力、设备、空间、支持性服务、材料等项开支
3.4 人员:列出所需人员的专业技术类别和数量
3.5 设备
3.6 局限性:说明现有系统存在的问题以及为什么需要开发新的系统


4 所建议技术可行性分析
4.1 对系统的简要描述
4.2 与现有系统比较的优越性
4.3 处理流程和数据流程
4.4 采用建议系统可能带来的影响
◆ 对设备的影响
◆ 对现有软件的影响
◆ 对用户的影响
◆ 对系统运行的影响
◆ 对开发环境的影响
◆ 对经费支出的影响
4.5 技术可行性评价:包括
◆ 在限制条件下,功能目的是否达到
◆ 利用现有技术,功能目的是否达到
◆ 对开发人员数量和质量的要求,并说明能否满足
◆ 在规定的期限内,开发能否完成


5 所建议系统经济可行性分析
5.1 支出
5.2 效益
5.3 收益/投资比
5.4 投资回收周期
5.5 敏感性分析:指一些关键性因素,如:
◆ 系统生存周期长短
◆ 系统工作负荷量
◆ 处理速度要求
◆ 设备和软件配置变化对支出和效益的影响等的分析


6 社会因素可行性分析
6.1 法律因素:如
◆ 合同责任
◆ 侵犯专利权
◆ 侵犯版权
6.2 用户使用可行性:如
◆ 用户单位的行政管理
◆ 工作制度
◆ 人员素质等能否满足要求


7 其他可供选择的方案
逐个阐明其它可供选择的方案,并重点说明未被推荐的理由。


8 结论意见
◆ 可着手组织开发
◆ 需等待若干条件具备后才能开发
◆ 需对开发目标进行某些修改
◆ 不能进行或不必进行
◆ 其它

摘自:
希赛网软件工程
http://51cmm.csai.cn/SoftDocuments/200702131518241396.htm

面向对象软件设计说明书模板

  1 概述
  1.1 系统简述
  对系统要完成什么,所面向的用户以及系统运行的环境的简短描述,这部分主要来源于需求说明书的开始部分。
  1.2 软件设计目标
  这部分论述整个系统的设计目标,明确地说明哪些功能是系统决定实现而哪些时不准备实现的。同时,对于非功能性的需求例如性能、可用性等,亦需提及。需求规格说明书对于这部分的内容来说是很重要的参考,看看其中明确了的功能性以及非功能性的需求。
  这部分必须说清楚设计的全貌如何,务必使读者看后知道将实现的系统有什么特点和功能。在随后的文档部分,将解释设计是怎么来实现这些的。
  1.3 参考资料
  列出本文档中所引用的参考资料。(至少要引用需求规格说明书)
  1.4 修订版本记录
  列出本文档修改的历史纪录。必须指明修改的内容、日期以及修改人。


  2 术语表
  对本文档中所使用的各种术语进行说明。如果一些术语在需求规格说明书中已经说明过了,此处不用再重复,可以指引读者参考需求说明。


  3 用例
  此处要求系统用用例图表述(UML),对每个用例(正常处理的情况)要有中文叙述。


  4 设计概述
  4.1 简述
  这部分要求突出整个设计所采用的方法(是面向对象设计还是结构化设计)、系统的体系结构(例如客户/服务器结构)以及使用到的相应技术和工具(例如OMT、Rose)
  4.2 系统结构设计
  这部分要求提供高层系统结构的描述,使用方框图来显示主要的组件及组件间的交互。最好是把逻辑结构同物理结构分离,对前者进行描述。别忘了说明图中用到的俗语和符号。
  4.2.1 顶层系统结构
  4.2.2 子系统1结构
  4.2.3 子系统2结构
  4.3 系统界面
 各种提供给用户的界面以及外部系统在此处要予以说明。如果在需求规格说明书中已经对用户界面有了叙述,此处不用再重复,可以指引读者参考需求说明。如果系统提供了对其它系统的接口,比如说从其它软件系统导入/导出数据,必须在此说明。
  4.4 约束和假定
  描述系统设计中最主要的约束,这些是由客户强制要求并在需求说明书写明的。说明系统是如何来适应这些约束的。

  另外如果本系统跟其它外部系统交互或者依赖其它外部系统提供一些功能辅助,那么系统可能还受到其它的约束。这种情况下,要求清楚地描述与本系统有交互的软件类型(比如某某某数据库软件,某某某EMail软件)以及这样导致的约束(比如只允许纯文本的Email)。
  实现的语言和平台也会对系统有约束,同样在此予以说明。
  对于因选择具体的设计实现而导致对系统的约束,简要地描述你的想法思路,经过怎么样的权衡,为什么要采取这样的设计等等。


  5 对象模型
  5.1 系统对象模型
  提供整个系统的对象模型,如果模型过大,按照可行的标准把它划分成小块,例如可以把客户端和服务器端的对象模型分开成两个图表述。
 对象图应该包含什么呢?
  在其中应该包含所有的系统对象。这些对象都是从理解需求后得到的。要明确哪些应该、哪些不应该被放进图中。
  所有对象之间的关联必须被确定并且必须指明联系的基数(一对一、一对多还是多对多,0..1,*,1..*)。聚合和继承关系必须清楚地确定下来。每个图必须附有简单的说明。
  可能经过多次反复之后才能得到系统的正确的对象模型。


  6 对象描述
  在这个部分叙述每个对象的细节,它的属性、它的方法。在这之前必须从逻辑上对对象进行组织。你可能需要用结构图把对象按子系统划分好。
  为每个对象做一个条目。在系统对象模型中简要的描述它的用途、约束(如只能有一个实例),列出它的属性和方法。如果对象是存储在持久的数据容器中,标明它是持久对象,否则说明它是个临时对象(transient object)。
  对每个对象的每个属性详细说明:名字、类型,如果属性不是很直观或者有约束(例如,每个对象的该属性必须有一个唯一的值或者值域是有限正整数等)。
  对每个对象的每个方法详细说明:方法名,返回类型,返回值,参数,用途以及使用的算法的简要说明(如果不是特别简单的话)。如果对变量或者返回值由什么假定的话,Pre-conditions和Post-conditions必须在此说明。列出它或者被它调用的方法需要访问或者修改的属性。最后,提供可以验证实现方法的测试案例。

  6.1 子系统1中的对象
  6.1.1 对象:对象1
  用途:   约束:   持久性:
  6.1.1.1 属性描述:
  1. 属性:属性1   类型:   描述:   约束:
  2. 属性:属性2
  6.1.1.2 方法描述:
  1. 方法:方法1   返回类型:   参数:   返回值:   Pre-Condition:
  Post-Condition:   读取/修改的属性:   调用的方法:
  处理逻辑:
  测试例:用什么参数调用该方法,期望的输出是什么……


  7 动态模型
  这部分的作用是描述系统如何响应各种事件。例如,可以建立系统的行为模型。一般使用顺序图和状态图。
  确定不同的场景(Scenario)是第一步,不需要确定所有可能的场景,但是必须至少要覆盖典型的系统用例。不要自己去想当然地创造场景,通常的策略是描述那些客户可以感受得到的场景。
  7.1 场景(Scenarios)
  对每个场景做一则条目,包括以下内容:   场景名:给它一个可以望文生义的名字   场景描述:简要叙述场景是干什么的以及发生的动作的顺序。   顺序图:描述各种事件及事件发生的相对时间顺序。
  7.1.1 场景:场景1   描述:   动作1   动作2
  7.2 状态图
  这部分的内容包括系统动态模型重要的部分的状态图。可能你想为每个对象画一个状态图,但事实上会导致太多不期望的细节信息,只需要确定系统中一些重要的对象并为之提供状态图即可。

  7.2.1 状态图1:


  8 非功能性需求

  在这个部分,必须说明如何处理需求文档中指定的非功能性需求。尽可能客观地评估系统应付每一个非功能性的需求的能力程度。如果某些非功能性需求没有完全在设计的系统中实现,请务必在此说明。另外,你也需要对系统将来的进化作一个估计并描述本设计如何使系统能够适应这些可预见的变化。


  9 辅助文档
  提供能帮助理解设计的相应文档。


  10 词汇索引

摘自 希赛网软件工程

http://51cmm.csai.cn/SoftDocuments/200702131426201534.htm

2007-02-24

系统分析报告

最后修改时间:2007-02-24

  在系统分析报告中,数据流图、数据字典和加工说明这3部分是主体,是系统分析报告中必不可少的组成部分。而其他各部分内容,则应根据所开发目标系统的规模、性质等具体情况酌情选用,不必生搬硬套。总之,系统分析报告必须简明扼要、抓住本质、反映出目标系统的全貌和开发人员的设想。

  一份完整的系统分析报告应该包括下述内容:

1、组织情况概述。
  • 对分析对象的基本情况作概括性的描述,包括组织的结构、组织的目标、组织的工作过程和性质、业务功能。
  • 系统与外部实体(其他系统或机构)间有哪些物质以及信息的交换关系和联系。
  • 参考资料和专门术语说明。
2、现行系统概述。
  • 现行系统现状调查说明。通过现行系统的组织结构图、数据流图、概况表等,说明现行系统的目标、规模、主要功能、组织机构、业务流程、数据存储和数据流,以及存在的薄弱环节。
  • 系统需求说明。用户要求以及现行系统主要存在的问题等。
3、系统逻辑模型。
  • 新系统拟定的业务流程及业务处理工作方式。提出明确的功能目标、并与现行系统进行比较分析,重点要突出计算机处理的优越性。
  • 新系统拟定的数据指标体系和分析优化后的数据流程,各个层次的数据流图、数据字典和加工说明,以有计算机系统将完成的工作部分。
  • 出错处理要求。
  • 其他特性要求。例如系统的输入输出格式、启动和退出等。
  • 遗留问题。根据目前条件,暂时不能满足的一些用户要求或设想,并提出今后解决的措施和途径。
4、新系统在各个业务处理环节拟采用的管理方法、算法和模型。

5、与新的系统相配套的管理制定和运行体制的建立。

6、系统设计与实施的初步计划。
  • 工作任务的分解。根据资源及其他条件确定各子系统开发的先后次序,在此基础上分解工作任务,落实到具体组织或个人。
  • 根据系统开发资源与时间进度估计,制定进度安排计划。
  • 预算。对开发费用的进一步估计。
7、用户领导审批意见。

参考书籍:

1. 《系统分析师教程》P77

可行性分析报告

  可行性分析报告是可行性分析的最后成果。该报告必须用书面的形式记录下来,作为论证和进一步开发的依据。可行性报告大致由以下内容组成。

1、引言
  引言一般包括以下内容:
  • 摘要,包括现行系统的名称、目标和功能等;
  • 背景,说明系统的用户、开发者,本系统与其他系统或机构的关系;
  • 参考资料,包括下达本系统可行性研究的文件、合同或批文;
  • 本报告引用的专业术语说明。

2、现行系统调查与分析
  主要包含以下内容:
  • 现行系统初步调查,包括组织机构层次,任务和范围;
  • 主要业务流程及对信息的需求;
  • 当前系统的工作量;
  • 当前系统运行的各项费用开支、人员和设备;
  • 已有计算机的配置、使用效率和存在的问题;
  • 现行系统存在的主要问题和薄弱环节;
  • 需求调查和分析,包括用户提出的和开发人员分析得出的需求。

3、新系统建设方案
  主要包括:
  • 新系统的目标和范围;
  • 新系统规模以及初步方案(规模、组成和结构等)
  • 系统及人员培训实施方案;
  • 投资方案(投资金额、来源和时间安排等)

4、其他
  可行性分析报告还应包括可行性论证,主要从技术可行性、经济可行性、社会可行性等方面进行论述;其他方案以及方案间的比较分析,以及结论。

参考书:
1. 《系统分析师教程》P51-P52

2007-02-23

关键成功因素法

  关键成功因素法(Critical Success Factors)是信息系统开发规划方法之一,由1970年由哈佛大学教授William Zani提出。该方法主要是通过分析找到影响组织成功的关键因素,围绕关键成功因素确定组织对于信息系统的要求,根据信息系统的需求进行信息系统规划。

  例如:学校有一个目标是成为国际一流大学,那么,教学成果是影响一流大学的因素,而教学环境、课程水平、学生质量是影响教学成果的子因素。同样,学术水平也是关键成功因素,与之有关的科研力量、科研成果是影响学术水平的子因素。因此,要增多教学成果,就得教学环境、提高课程水平和学生质量。要提高学术水平,就得增强科研力量,鼓励更多的科研成果。

  可见,抓住一个问题的主要因素是很重要的。关键成功因素法正是要求识别关键成功因素,突出重点,从重要需求引发规划。

  这是一种多好的思维方式呀!

  联想起昨天有个朋友问我:出国留学如何才能成功?年龄是决定出国留学是否成功的主要原因吗?我当时的回答是:应人而宜。为什么如此回答?因为我感觉她没有抓住问题的主要因素。
  
  例如:怎么才能学好英语?要回答这个问题,应该先对英语好的学生做一个统计、分析。如果没有抓住关键因素,分析出来的结果可能很有趣。比如对全班英语最好的10个同学做统计分析,发现他们的都爱吃川菜,那是否可以推而广之,喜欢吃川菜同学英语就能学得好呢?如果统计分析出来他们脚大,可否证明脚板大的同学英语学得好?

  如果没有抓住问题的主要因素,那就会得出错误的,甚至荒唐的判断。在计算机世界如此,在我们社会也是这样。

2007-02-22

从Pentium III到扣肉 SSE指令集发展历程回顾

转自:天极网 作者:八戒 2006-08-24
前言:
  自最简单的电脑开始,指令序列便能取得运算对象,并对它们执行计算。对大多数电脑而言,这些指令同时只能执行一次计算。如需完成一些并行操作(如立体声左、右声道,或显示器的红、绿、蓝混合),就要连续执行多次计算。此类电脑采用的是“单指令单数据”(SISD)处理器。
  然而,现实世界的大多数计算都会同SISD模型冲突。比如对麦克风传来的左、右立体声道进行简单过滤处理时,需将之前的几个采样值累加起来,再同当前值加到一起,再除以采样次数,必须重复计算左、右声道。看来似乎颇为简单,但在实际应用中,每次采样都必须作同样的计算。如决定使用CD音质,那么每秒种都要对左、右声道执行44100次采样,总共便要计算88200次。

  为获得LeftSum和RightSum的结果,分别要执行6条指令。所以为确保获得连贯的CD音质,每秒钟要执行的指令总数为:44100次采样×2个声道×6条指令=529000条!电脑显示的道理与此相似,但情况会糟得多—想想在1024×768的分辨率和24位真彩色下,假定每秒显示30帧(虽然好但非特别出色的3D加速性能),仅仅为了访问每个像素,而不做任何实际工作,每秒便要执行70778880条指令,这显然是个沉重的负担。设想一下,假如有这样的一种处理器,虽然它只能执行单个指令序列,但能将那些指令同时应用于几个独立的数据流,速度显然就会快上许多。我们称之为“单指令多数据”(SIMD)处理器。而我们平常所说的SSE(Streaming SIMD Extensions)便属于此类单指令多数据。

  自SSE起,到目前已经历经4代,每一次改进都为我们带来或多或少的惊喜。因此今天我们就简单介绍一下SSE的发展历程,希望能对你在了解处理器技术发展时有所帮助。

一、 SSE指令集
  在了解SSE之前,我们先说说多媒体指令集的发展。在SSE发布之前,英特尔的P2主要以MMX多媒体指令集为主。不过随着AMD发布K6-2,MMX早已经成为历史,取代它的是“3D NOW!”和SSE。AMD当时的“3D NOW!”把提升CPU的3D效能作为一个主要要求,在相当程度上弥补了AMDK6芯片浮点处理能力上的不足,使得廉价的非Intel芯片能够拥有超过奔腾的3D性能,因此K6-2在市场上大获成功,使得Intel的PⅡ备受打击,并直接导致了Intel“新赛扬”的出笼。
  “3D NOW!”如此成功,以致它成了AMD的一大骄傲,并不断在它的基础上改进加强,一直在Athlon上还能见到它的身影。为此,Intel在Pentium III中引入更先进的SSE指令集。
其实,早在PIII正式推出之前,Intel公司就曾经通过各种渠道公布过所谓的KNI(Katmai New Instruction)指令集,这个指令集也就是SSE指令集的前身,并一度被很多传媒称之为MMX指令集的下一个版本,即MMX2指令集。究其背景,原来“KNI”指令集是Intel公司最早为其下一代芯片命名的指令集名称,而所谓的“MMX2”则完全是硬件评论家们和媒体凭感觉和印象对“KNI”的评价,Intel公司其实从未正式发布过关于MMX2的消息。而最终推出的SSE指令集也就是所谓胜出的“互联网SSE”指令集。
  SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令。理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、音频处理等诸多多媒体应用起到全面强化的作用。SSE指令与3DNow!指令彼此互不兼容,但SSE包含了3DNow!技术的绝大部分功能,只是实现的方法不同。SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度。那么SSE能为我们带来什么呢?
  与P2时代的MMX相比,SSE也是在原来的处理器指令集的基础上添加的扩展指令集,都是SIMD(单指令多数据)指令,不同的是他们处理的数据类型不同. MMX只能在整数上支持SIMD,而SSE指令增加了单精度浮点数的SIMD支持.MMX可以进行同时对2个32位的整数操作,而SSE可以同时对4个32位的浮点数操作。MMX和SSE的一个主要的区别是MMX并没有定义新的寄存器,而SSE定义了8个全新的128位寄存器,每个寄存器可以同时存放4个单精度浮点数(每个32位长),他们在寄存器中排列顺序见下图。

新数据类型排列

  这里有一个问题,既然MMX没有定义新的寄存器,那么她又有什么寄存器可操作呢?事实上,MMX是和原来的浮点寄存器共享的.一个浮点寄存器是80位长的,她的低端64位被用做MMX的寄存器.这样,一个应用程序就不能在执行MMX指令的同时进行浮点操作了.同时,处理器还要花掉大量的时钟周期去维护寄存器状态从MMX操作和浮点操作之间的切换。SSE指令集就没有这些限制了。由于她定义了全新的寄存器,应用程序可以在进行整数SIMD操作(MMX)的同时进行浮点数的SIMD操作(SSE),同样,SSE还可以在执行浮点数的非SIMD操作的同时进行SIMD操作。

  MMX和SSE的寄存器排列见下图:


MMX和SSE的寄存器
(a)是MMX和浮点数共享一个寄存器的情况(b)是SSE的独立寄存器排列


  MMX和SSE寄存器有一个共同点,那就是都有8个寄存器.MMX的寄存器被命名为mm0—mm7,SSE的寄存器名字是xmm0—xmm7。?Pentium III的SSE指令集是为SIMD设计的,她可以同时操作4个单精度浮点值.因此,利用这些加强的浮点计算能力,对3D应用程序的细节表现是有实质性的提高的。事实上,SSE就是为3D应用创建的.游戏和其他的使用后端3D来显示2D和2.5D图象的程序,和使用矢量图形的应用程序一样都能分享到这种好处。

  电脑表示的3D图形是用大量的表示图形顶点的浮点数组成的,通过操作这些顶点数据就可以改变3D图形的外观.通过使用SSE指令集,应用程序可以获得更多的帮助,处理器可以在一个时钟周期内处理更多的数据,大大加快了3D图形的顶点计算速度,可以给用户带来更深刻的3D体验。同样,应用程序开发者还可以用更多的顶点数据和更复杂的算法来创造出更为生动的3D图象效果来。使用SSE指令集可以显著的改善一些在3D操作中经常用到的计算,像矩阵乘法、矩阵变换以及矩阵之间的加、减、乘、向量矩阵相乘、矢量化、 矢量点相乘和光照计算等等。


  比如玩Quake时,3D对象均由多边形构成,而这些多边形以一系列点的形式保存。每个点都有对应的3轴坐标。如限制成只用整数,便不能精确地表示这些位置(如每个坐标轴使用16位,那么只能得到65536个坐标点),造成图形显示非常糟糕。

  自奔腾开始,Intel各型处理器的浮点运算能力便非常强大,游戏开发者几乎都情愿选用浮点运算。由于MMX不能对浮点进行操作(更糟的是,从MMX切换到浮点模式时,还会造成性能的瞬间剧降),所以MMX并不能将游戏提速至比设备驱动程序更高的一个水准,这正是MMX令许多人失望的原因。假如你用3D加速卡做图形渲染,游戏中完成的运算(模拟、3D变形、照明等)会耗去约90%的处理器时间。也就是说,MMX只为处理器留出了10%的时间来做其它工作,这还是在你使用了3D卡的前提下。

  而SSE可以有效解决了这个问题,除保持原有的MMX指令外,又新增了70条指令,在加快浮点运算的同时,也改善了内存的使用效率,使内存速度显得更快一些。对于用户来说,这意味着3D物体更生动,表面更光滑,“虚拟现实”更“现实”。按Intel当时的说法,SSE对下述几个领域的影响特别明显:3D几何运算及动画处理;图形处理(如Photoshop);视频编辑/压缩/解压(如MPEG和DVD);语音识别以及声音压缩和合成。

  SSE另一大优点是可以大大减小数据计算的指令操作数目.如果不使用SIMD和SSE,要进行一个400次的浮点数乘法计算,需要循环使用400次的乘法指令。而如果使用了SIMD和SSE,则只要进行100次的乘法指令就可以完成相同的任务了,因为这里每次的乘法操作都可以同时对4个浮点数进行计算。

  SSE指令可以说是将Intel的MMX和AMD的3DNow!技朮相结合的产物,由于3DNow!使用的是浮点寄存方式,因而无法较好地同步进行正常的浮点运算。而SSE使用了分离的指令寄存器,从而可以全速运行,保证了与浮点运算的并行性。尤其是两者所使用的寄存器差异颇大─3DNow!是64位,而SSE是128位。同时为了充分发挥SSE的优势,Intel引进了新的“处理器分离模式”以提高浮点运算速度。

代表之作:PentiumIII

老PentiumIII

新封装的PentiumIII

  不过,要发挥SSE的速度优势,要满足以下条件:使用DirectX 6 API开发应用程序;使用支持SSE的图形驱动程序;使用支持“处理器分离模式”的操作系统等。由于SSE要求软件的数据结构重写,又比“3D NOW!”晚推出了9个多月,因此市场上使用“3D NOW!”的系统装机量远远超过SSE。基于以上种种原因,SSE一直没有得到充分的发展。直到Pentium 4发布之后,开发人员看到使用SSE指令之后,程序执行性能将得到极大的提升,于是Intel又在SSE的基础上推出了更先进的SSE2指令集。

二、SSE2指令集
  SSE2是Intel第2代浮点多媒体处理器指令集,是英特尔为了应对AMD的3Dnow!+指令集而在SSE的基础上开发的指令集。它主要增加了144条新建指令,使得其处理器性能有大幅度提高。

  SSE2有8个128-bit寄存器,但在这里不能存储 4个32-bit的浮点数据,而是 2个64-bit的浮点扩展精度数据。SSE2涉及了多重的数据目标上立刻执行一单个的指令(即SIMD)。最重要的是SSE2能处理128位和两倍精密浮点数学运算。处理更精确浮点数的能力使SSE2成为加速多媒体程序、3D处理工程以及工作站类型任务的基础配置,非常适于执行3D渲染、图形驱动、游戏和多媒体编码等应用。而当时Athlon系列处理器支持MMX(整数)和SSE、3DNow!(单精度浮点)等指令集,不过并不支持SSE2。

  共有144个全新的指令可做任何事情,这也是当初SSE2推出所想达成之目标。长度为 128-bit压缩的数据,在SSE时,该仅能以4个单精确浮点值的形式来处理;但在SSE2下,该数据能选用下列几种数据表达来处理。

  • 4个单精确浮点数(SSE)
  • 2个双倍精确浮点数(SSE2)
  • 16个字节数(SSE2)
  • 8个字组(word)数(SSE2)
  • 4个双倍字组数(SSE2)
  • 2个四倍字组数(SSE2)
  • 1个128位长的整数(SSE2)

  由于SSE2可供选择的数据型态很多,而且无疑地相当有用。 因此,当时Intel 极希望软件开发者能用SSE2 的双倍精确浮点指令来取代旧有的 x86 浮点指令,如此一来 Intel所称 Pentium4是当时FPU 性能最强的处理器这项谣言,最后也就变成了事实。在相关测试中,SSE2对于处理器的性能的提升是十分明显的,虽然在同频率的情况下,Pentium 4和性能不如Athlon XP,但由于Athlon XP不支持SSE2,所以经过SSE2优化后的程序Pentium 4的运行速度要明显高于Athlon XP。而AMD方面也注意到了这一情况,在随后的K-8系列处理器中,都加入SSE2指令集。

代表之作:Pentium 4处理器

三、SSE3指令集

  SSE3是英特尔在研发Prescott核心时所引入的指令集。它最先被称为PNI(是Prescott New Instructions的简称,Prescott新指令),但它最终改用了一个新的行销名称—SSE3。在指令的复杂程度方面,相对于此前的MMX、SSE、SSE2,SSE3似乎要简洁不少—此前MMX包含有57条命令,SSE包含有50条命令,SSE2包含有144条命令,SSE3包含有13条命令。SSE3指令集这13条命令共分为5个应用层:


  第一层中的指令是“数据传输命令”,只有一条指令:FISTTP,它有利于x87浮点转换成整数,并可以大大提高优化的效率。

  第二层中的指令是“数据处理命令”,一共有五条,分别是ADDSUBPS,ADDSUBPD,MOVSHDUP,MOVSLDUP,MOVDDUP。这些指令可以简化复杂数据的处理过程,由于未来数据处理流量将会越来越大,因此Intel在这里应用的指令集最多、达到了五条。

  第三层中的指令是“特殊处理命令”,也只有一条:LDDQU。在这条指令主要针对视频解码,用来提高处理器对处理媒体数据结果的精确性。

  第四层中的指令是“优化命令”,一共有四条指令,分别是HADDPS,HSUBPS,HADDPD,HSUBPD,它们可以对程序起到自动优化的作用。这些指令对处理3D图形相当有用。

  第五层中的指令是“超线程性能增强”,一共有两条针对线程处理的指令:MONITOR, MWAIT,这有助于增加Intel超线程的处理能力、大大简化了超线程的数据处理过程。

  从技术上来看,SSE3对于SEE2的改进非常有限,因此它为Prescott所带来的性能提升相当有限,它的优势仍体现在视频解码方面—Intel宣称如果在数据编码算法使用LDDQU指令,那么影象压缩速度可以提升10%左右。在当时来看,SSE3仍属于最先进的指令集,因此AMD、全美达后来也在它的处理器中加入对SSE3指令集的支持。

代表之作:基于Prescott核心的Pentium 4

四、SSE4指令集

  SSE4指令集是Conroe架构所引入的新指令集。这项原本计划应用于NetBurst微架构Tejas核心处理器之上的全新技术也随着它的夭折最终没能实现,这不能不说是个遗憾,但是SSE4指令集出现在了Conroe上又让我们看到了希望。

  SSE4指令集共包括16条指令,不过虽然扣肉处理器推出已经有一些时日,但目前英特尔仍没有公布SSE4指令集的具体资料。这相当令人感到纳闷。也许英特尔是基于特殊的考虑,仅让少数合作软件厂商取得数据,只是这种作法实在很没有说服力就是了,天底下没有哪家处理器厂商,希望自己新增的指令越少人用越好。

  不过,从Intel Core微架构针对SSE指令所作出的修改被称之为“Intel Advanced Digital Media Boost”技术来看,未来SSE4将更注重针对视频方面的优化,我们认为SSE4主要改进之处可能将针对英特尔的Clear Video高清视频技术及UDI接口规范提供强有力的支持。这两项技术基于965芯片组,Intel的官方把Clear Video技术定义为:支持高级解码、拥有预处理和增强型3D处理能力。



  值得一提的是,在SSE4中另一个重要的改进就是提供完整128位宽的SSE执行单元,一个频率周期内可执行一个128位SSE指令。Conroe中SSE的ADDPS(4D 32bit共128bit,单精度加法)、MULPS(4D 32bit共128bit,单精度乘法)和SSE2的ADDPD(2D 64bit共128bit,双精度加法)、MULPD(2D 64bit共128bit,双精度乘法),这四条重要SSE算术指令的吞吐周期都降低到1个周期,真正做到了英特尔宣称的每个周期执行一条128位向量加法指令和一条128位向量乘法指令的能力。

  可以说 Conroe的向量单元已经全面引入了流水线化的设计。而支持SSE3的NetBurst微处理器架构虽然提供128位宽执行单元,但仅有一组,性能孰高孰低一目了然。更为重要的是,目前已经有相当多的软件针对SSE指令集进行了优化,其中包括2D制图、3D制图、视频播放、音频播放、文件压缩等方面,可见其应用范围相当广泛。


  配合完整的128位SSE执行单元,以及庞大的执行单元数目,Conroe处理器可在一个频率周期内,同时执行128位乘法、128位加法、128位数据加载与128位数据回存,或着是4个32位单倍浮点精确度乘法与4个32位单倍浮点精确度加法运算,这将使其更利于多媒体应用。因此,SSE4指令集能够有效带来系统性能上的提升,这一代在众多测试中早已被证实。虽然其不会像当年SSE2指令集出现时那样带来巨大的性能提升,但是其在某些特殊方面的应用还是让我们对它充满了期待。

代表之作:Core 2 Duo处理器


信息系统开发的方法论

最后修改时间:2007-2-22

  信息系统开发的发展过程经历过所谓“自底向上”方式和“自顶向下”方式,人们从整体上分析和总结了两种方法的优缺点:

  自底向上方法的优点有:
  • 使信息系统的开发易于适应组织机构的真正需要
  • 有助于发现和理解每个系统的附加需要,并易于判断其费用
  • 每一阶段所获得的经验和教训有助于下一阶段的开发
  • 相对地说,每一阶段的规模较小,易于控制和管理

  自底向上方法的缺点有:

  • 由于方法的演变性质,信息系统难以实现其整体性
  • 由于系统未进行全局规划,系统的数据一致性和完整性难以保证
  • 为了达到系统的性能要求,往往不得不重新调整系统,甚至要重新设计系统
  • 由于系统实施的分散性和演变性,因而与企业目标的联系往往是间接的,系统往往难以支持企业的整体战略目标

  自顶向下方法的优点有:

  • 可为企业或机构的重要决策和任务实现提供信息
  • 支持企业信息系统的整体规划,并对系统的各子系统的协调和通信提供保证
  • 方法的实践有利于提高企业人员的整体观察问题的能力,从而有利于寻找到改进企业组织的途径

  自顶向下方法的缺点有:

  • 对系统分析和设计人员的要求较高
  • 开发周期长,系统复杂,一般属于一种高成本、大投资的工程
  • 对于大系统而言,自上而下的规划对下层系统的实施往往缺乏约束力
  • 从经验角度来看,很难说自顶向下的做法在经济上是合算的

  对于信息系统,特别是其核心部分的软件系统的开发,专家和工程人员已经从不同的角度、用不同的方法对它们进行了模型化、从而将相关的方法从实践上升到理论。常见的模型有:

  1. 瀑布模型
  2. 螺旋模型
  3. 喷泉模型

参考书籍:

1. 《系统分析师教程》P12-17

建立信息系统所涉及的问题

最后修改时间:2007-2-22

  计算机信息系统的建立是企业的一项重大的社会技术工程,James Martin将建立企业的信息系统称为信息工程。

  1. 系统建设前企业应具备的条件

  1.1 企业高层领导具有对企业信息系统建设规律性的认识。

  1.2 企业必须认真分析建立计算机信息系统的实际需求。

  1.3 管理的科学化是企业信息系统建立的基础和保证。

  1.4 企业文化和管理人员的组织结构应能满足系统建设的需要。

  1.5 规范和齐全的数据是建立企业计算机信息系统的必要条件。

  1.6 企业有必要的开发期和维护期的资金保证。

  2. 系统建设中企业应具备的条件

  2.1 企业高层领导介入系统建设

  2.2 吸收相关企业信息系统建设中的经验和教训

  2.3 选择适合本企业实际情况的开发方式

  2.4 建立系统开发组织机构和选择成员

  2.5 系统开发策略的制定和开发方法、开发工具的选择

  2.6 组织基础数据的收集和预处理,实施数据工程

  2.7 设计并确定系统目标,进行投资估算

  2.8 合理设计信息部门在企业机构中的位置

  2.9 应用自动化的手段来开发系统

  3. 系统建成后企业应保证的条件

  3.1 认真做好系统的验收工作

  3.2 着力优化系统的功能和性能

  3.3 重视文档的整理和接收

  3.4 重视系统维护队伍的建设

参考书籍:

1. 《系统分析师教程》P3-P11

信息系统与信息系统工程

最后修改时间:2007-2-22

  信息系统一般泛指收集、存储、处理和传播各种信息的具有完整功能的集合体。人们常说的信息系统大多指支持各部门和机构管理和决策的信息系统。

  计算机应用于企业是从最基础的数据处理开始的。经历了以下几个阶段:
  1. EDP(Electronic Data Process)电子数据处理
  2. TPS(Transaction Process System)业务处理系统
  3. MIS(Management Information System)管理信息系统
  4. DSS(Decision Support System)决策支持系统

  信息系统工程是以系统的方法来实现信息系统建设的过程。

  信息工程是在方法论指导下,在与方法论相配合的开发工具的支持下去实施系统开发的,它强调了自动化的信息系统必须用自动化的手段来实现,并在实现中有基于信息库的开发环境的支持。

参考书籍:

1、《系统分析师教程》 P1-P2

2007-02-21

系统分析师考试的三重境界

作者:刘清国 E-mail:495117684@qq.com

  王国维在《人间词话》中说,古今之成大事业、大学问者,必经过三种之境界。“昨夜西风凋碧树,独上高楼,望尽天涯路”,此第一境也。“衣带渐宽终不悔,为伊消得人憔悴”,此第二境也。“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”,此第三境也。我们可以借用这三重境界来说明系统分析师考试的学习和应考过程。

  境界一:昨夜西风凋碧树,独上高楼,望尽天涯路
  第一重境界是初步的学习。由于难度太大,参加系统分析师考试的人很少。我们在学习的过程中往往是“单打独斗”,缺少学习伙伴,缺乏交流和沟通的渠道,即只能“独上高楼”。“高楼”在系统分析师考试里可指6样东西,分别是《系统分析与设计技术》、《系统分析师技术指南》、《系统分析师常用工具》、《系统分析师考试培训视频教程》、《计算机数学与经济管理基础知识》、希赛网IT英语频道(http://ite.csai.cn/)的文章。从历次考试的实践来看,这些书籍的知识基本涵盖了系统分析师考试所需的所有知识点。
  这个阶段的重点在于“望尽天涯路”,也就是要把系统分析师考试所需的知识高屋建瓴地“认识”一遍,没必要掌握太过精细的含义,也就是说看了有关问题能够反应出大概意思。在这样的策略下,此阶段不宜花太多时间。
  特别值得一提的是,希赛网IT英语频道的文章不能不读,2006年5月的考试试题竟然全部是来自这里的原文!

  境界二:衣带渐宽终不悔,为伊消得人憔悴
  第二重境界“衣带渐宽终不悔,为伊消得人憔悴”形容系统分析师考试学习的第二个阶段再恰当不过。这个阶段有三个任务:
  (1)通过学习《系统分析师考试辅导》、《系统分析师考试综合知识试题分类精解》、《系统分析师考试信息系统分析与设计案例试题分类精解》、《系统分析师考试论文试题分析与范文》,掌握考试题型的特点,以及对知识点的考法;  (2)对有关知识点的精细理解、记忆。这点极其重要,因为系统分析师考试的特点是不但知识范围广,而且还具有一定的深度,是广度和深度的结合体。  (3)不断与遗忘做斗争。遗忘是最让人痛苦的了,特别是对一些“老大”,上述几本书要反复地读,“为伊消得人憔悴”真是一点不假。
  这个阶段虽然痛苦,但也是提高比较快的一个阶段。这时,检查学习效果的一个捷径,就是去做希赛远程教育平台的公开测试,公开测试试题全部是历年考试的真题,上午试题,系统可以自动判卷,给出分数,并能根据知识点指出测试者的不足之处,便于测试者进一步学习和查漏补缺。下午试题,可以提交给希赛IT教育研发中心的老师进行批改。不过,这都需要支付希赛币。希赛币是希赛网所使用的虚拟货币,我们可以通过提交资料、参加活动、社区发帖、第一书店购书、参加希赛的辅导等形式挣得大量希赛币。

  境界三:众里寻他千百度,蓦然回首,那人却在灯火阑珊处
  第三重境界“众里寻他千百度,蓦然回首,那人却在灯火阑珊处”,这句话主要说的是顿悟。考试也要有个顿悟的过程,也就是熟能生巧。
  其实,系统分析师考试的各个学习项目,选择、案例分析、论文等都有技巧的,特别是案例分析和论文写作试题,有很大的技巧。很多人具有很丰富的项目经验,能力也不错,可就是跌在论文上,究其原因,就是考试不得法,没有掌握考试的要领。
  这些技巧提高的关键就是要熟练到能够生巧的地步。在这方面,可以通过学习《系统分析师之路》、《系统分析师考试疑难问题解答》、《系统分析师考试重点、难点及解题方法串讲》,也可以再次复习《系统分析师考试培训视频教程》中有关案例分析和论文写作的部分。这些资料中,既有专家的现场说法,传授机密,又有对曾经困惑过其他人的问题的解答,而这些问题,可能现在正困惑着你。

  如果对于系统分析师证书志在必得的话,可以参加希赛软考学院的辅导。这样,就有机会跟张友生等专家“面对面”的交流,在关键问题上,或在困惑已久的问题上,只要专家一指点,就会顿悟,会少走很多弯路。
  欢迎大家与我交流,我的联系方式,E-mail:495117684@qq.com