<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>javacoming</title>
    <description></description>
    <link>http://javacoming.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>再回JAVA</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/212700" style="color:red;">http://javacoming.javaeye.com/blog/212700</a>&nbsp;
          发表时间: 2008年07月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>工作了一年了</p>
<p>才感觉什么都没有得到</p>
<p>&nbsp;</p>
<p>重新来到喜欢的地方</p>
<p>选择新的开始</p>
<p>追寻成功</p>
<p>追求快乐</p>
<p>JAVA</p>
<p>我来了</p>
<p>王者归来</p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/212700#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Jul 2008 12:52:11 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/212700</link>
        <guid>http://javacoming.javaeye.com/blog/212700</guid>
      </item>
      <item>
        <title>敏捷软件开发之我见-----浅谈SRC技术(一种关于SOA的解析)</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/116897" style="color:red;">http://javacoming.javaeye.com/blog/116897</a>&nbsp;
          发表时间: 2007年08月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最近在网络上出现的到处是什么<strong>SOA(service-oriented architecture)</strong>技术.即面向服务的体系结构是一个组件模型，它将应用程序的不同功能单元（称为服务）通过这些服务之间定义良好的接口和契约联系起来。然而,我发现一种的体系结构也正在慢慢地产生,服务创建组件<strong>SCC(Service Creating C</strong><font face="Arial"><strong>omponent),</strong>一种组件的创建,正是在一种服务的产生,没有服务,组件也就可以不存在.即使在C++和JAVA等编程语言中.敏捷软件开发之所以敏捷,也就是为了更好地服务,软件达到更好的扩展.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虽然SCC这种概念还没被IT们所接受,可是它已经存入人心,被广泛的PM所认同.</font></font></p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/116897#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 26 Aug 2007 18:17:21 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/116897</link>
        <guid>http://javacoming.javaeye.com/blog/116897</guid>
      </item>
      <item>
        <title>新版中日交流标准日本语&lt;人民教育出版社&gt;</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/116235" style="color:red;">http://javacoming.javaeye.com/blog/116235</a>&nbsp;
          发表时间: 2007年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          单词
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/116235#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 24 Aug 2007 18:32:41 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/116235</link>
        <guid>http://javacoming.javaeye.com/blog/116235</guid>
      </item>
      <item>
        <title>新版中日交流标准日本语&lt;人民教育出版社&gt;</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/116233" style="color:red;">http://javacoming.javaeye.com/blog/116233</a>&nbsp;
          发表时间: 2007年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          单词
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/116233#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 24 Aug 2007 18:29:25 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/116233</link>
        <guid>http://javacoming.javaeye.com/blog/116233</guid>
      </item>
      <item>
        <title>新版中日交流标准日本语&lt;人民教育出版社&gt;</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/116231" style="color:red;">http://javacoming.javaeye.com/blog/116231</a>&nbsp;
          发表时间: 2007年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          单词部分
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/116231#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 24 Aug 2007 18:26:25 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/116231</link>
        <guid>http://javacoming.javaeye.com/blog/116231</guid>
      </item>
      <item>
        <title>新版中日交流标准日本语&lt;人民教育出版社&gt;</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/116229" style="color:red;">http://javacoming.javaeye.com/blog/116229</a>&nbsp;
          发表时间: 2007年08月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          单词部分
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/116229#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 24 Aug 2007 18:21:58 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/116229</link>
        <guid>http://javacoming.javaeye.com/blog/116229</guid>
      </item>
      <item>
        <title>会做导航一起来</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/76987" style="color:red;">http://javacoming.javaeye.com/blog/76987</a>&nbsp;
          发表时间: 2007年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有谁会做导航的业务一起来探讨,小弟就是从事这个行业的.
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/76987#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 May 2007 15:39:42 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/76987</link>
        <guid>http://javacoming.javaeye.com/blog/76987</guid>
      </item>
      <item>
        <title>软件工程 概要设计例子</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/76984" style="color:red;">http://javacoming.javaeye.com/blog/76984</a>&nbsp;
          发表时间: 2007年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ASP网上购物系统 <br />
<br />
需求说明 <br />
<br />
文件名称：概要设计说明书 <br />
文件编号： <br />
编 制 人：&nbsp; <br />
编制日期： <br />
审 核 人： <br />
版本标识： <br />
<br />
1.引言 <br />
1.1.编写目的 <br />
编写此需求分析报告，实现商场、中小企业或个人在互联网上进行新产品展示，网上通信留言功能，重点实现网上商品的查找、在线购买功能。实现普通用户只能浏览，注册用户可以在线定购，后台管理人员可以进行产品上传更新、注册用户的管理等功能。 <br />
1.2.项目背景 <br />
项目名称：ASP网上购物系统 <br />
项目委托单位：&nbsp; <br />
项目开发单位： <br />
项目简介：本系统主要实现网上产品展示与在线定购及人员的管理，<br />
一、不同身份有不同的权限功能（管理人员、注册用户、游客）<br />
二、在线产品展示（分页显示）<br />
三、在线定购 <br />
四、后台管理（用户管理、商品的管理） <br />
<br />
1.3.问题陈述 <br />
对用户提供的服务有： <br />
l 在线产品展示 <br />
l 在线查找功能 <br />
l 在线下订单。&nbsp;<br />
<br />
2.任务概述 <br />
2.1.需求概述 <br />
2.1.1.在线展示 <br />
只要登录到网站后，就可以在线浏览展示商品， <br />
最新商品动画展示 <br />
在线购买商品从后台数据库动态显示商品图片与产品名。 <br />
单击产品名或图片就看到产品的详细介绍。要添加购买与收藏功能。 <br />
2.1.2.在线下订单： <br />
只有注册用户才能利用该系统下订单。注册后并且处于激活状态才可以购物下订单。非注册用户和处于非激活状态的用户，只能浏览商品的基本情况。用户登录后，就可以使用系统提供的各种功能。 <br />
单击产品对应的购买按钮后，要显示购物车界面，在该界面中要实现购买产品数量统计、总价格统计及每种产品的购买时间。 <br />
在购物车中，可以实现继续购买、产品数量的修改、删除购买物品、到收银台付款功能。 <br />
在信息填写与提交中，要实现&ldquo;返回上一步&rdquo;修改功能，实现所以信息统计界面。实现产生订购单号功能。 <br />
2.1.3后台管理服务 <br />
管理员修改功能 <br />
商品管理功能 <br />
会员管理功能 <br />
2.1.4留言功能 <br />
2.2.运行环境 <br />
服务器端： ASP+SQLSERVER2000+IIS 5.0 <br />
客户端： IE浏览器 <br />
2.3.开发环境 <br />
SQLServer数据库+IIS5.0+Windows2000+Dreamweaver2004 <br />
2.5.限制和约束 <br />
l 一个客户在系统中只有一个账号。 <br />
l 客户要想购物必须先登陆。 <br />
l 管理员只能进行三次登录 <br />
3.总体设计 <br />
3.1.参与者(不同使用身份) <br />
&Oslash; 游客 <br />
&Oslash; 注册用户 <br />
&Oslash; 管理员 <br />
3.2购物流程 <br />
1) 注册用户（注：在欢迎页面，未登陆的用户可浏览商品信息） <br />
2) 用户登陆（注：在欢迎页面） <br />
3) 浏览商品信息 <br />
4) 选择购物和数量（攒机或是单一购买） <br />
5) 选择付款方式（如汇款定单状态默认为3） <br />
6) 确定购买（插入数据库购物单表） <br />
7) 系统处理购物单表插入定单表并设置1，（返回订单id） <br />
8) 定单查询（可按定单号和全部查询），定单状态为1、3的可以取消，状态为6的付款方式为货到付款的可以取消。 <br />
9) 定单收到后，由客户签字，把定单状态改为2 <br />
3.3系统管理员流程 <br />
1) 登陆 <br />
2）修改管理员密码 <br />
3）会员用户的删除、修改、添加 <br />
4）商品的添加， <br />
5）购买商品的浏览、删除与更新 <br />
4 数据描述 <br />
本系统中共有6张表，管理员表、用户信息表、产品表、产品类型表、购物单表、留言表。每种表具体字段及类型见下表：（可以根据自己的需要增加表，但主要表的字段不能少。） <br />
管理员表-admins <br />
字段名 字段 类型 长度 说明 <br />
管理员ID u_id 自增 not null 主 <br />
姓名 u_Name varchar(10) not null 10 <br />
密码 u_Pwd char(8) not null 定长 8 <br />
用户信息表-userInfo <br />
字段名 字段 类型 长度 说明 <br />
用户名 u_Name varchar(10) 10 主 <br />
真实姓名 u_TrueName varchar(8) 8 <br />
身份证号 u_IDcard char(18) not null 18 定长 <br />
性别 u_Sex char(2) not null 2 定长 <br />
年龄 u_Age tinyint not null 2 <br />
住址 u_Add nvarchar(40) not null 40 <br />
联系电话 u_Tel char(11) not null 11 定长 <br />
邮编 u_ Postalcode char(6) not null 6 定长 <br />
E-mail u_Email varchar(40) <br />
备注 u_Remark nvarchar(100) <br />
产品表-goods <br />
字段名 字段 类型 长度 说明 <br />
商品ID 1.1 goods＿id char(2) 主 <br />
商品类型ID 1.1 goodsType_id char(2) not null 外 <br />
商品名 goods_name nvarchar Not NULL 8 <br />
价格 goods_price smallmoney not null 18 <br />
会员价 Goods_price1 nvarchar(40) 80 <br />
图片 goods_photo varchar(80) 80 图片的位置 <br />
描述 goods_depict nvarchar(100) 200 <br />
产品类型表-goodsType <br />
字段名 字段 类型 长度 说明 <br />
1.1 商品类型ID 1.1 goodsType_id char(2) not null
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/76984#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 May 2007 15:23:46 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/76984</link>
        <guid>http://javacoming.javaeye.com/blog/76984</guid>
      </item>
      <item>
        <title>软件工程 概要设计与详细设计探讨</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/76982" style="color:red;">http://javacoming.javaeye.com/blog/76982</a>&nbsp;
          发表时间: 2007年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4"><strong>概要设计与详细设计的区别:<br />
</strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font size="2"> <u><strong>概要设计</strong></u>是站在<strong>系统设计者的角度</strong>,对<strong>整个系统</strong>的需求搭建相应的<strong>构架</strong>。往往项目的成败就在于此。是软件的<strong>总的体系结构</strong>。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 而<u><strong>详细设计</strong></u>则是概要设计的<strong>具体实现</strong>者，是按照概要的设计来设计的</font><font size="3">。</font></font></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/76982#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 May 2007 15:17:00 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/76982</link>
        <guid>http://javacoming.javaeye.com/blog/76982</guid>
      </item>
      <item>
        <title>软件工程探讨</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/76979" style="color:red;">http://javacoming.javaeye.com/blog/76979</a>&nbsp;
          发表时间: 2007年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong><font size="3">一,基本概念</font></strong></p>
<p><strong>软件</strong>：计算机程序及说明程序的各种文档。&ldquo;程序&rdquo;是计算任务的处理对象和处理规则的描述；&ldquo;文档&rdquo;是有关计算机程序功能、设计、编制、使用的文字或图形资料。</p>
<p><strong>软件生产的发展</strong>：程序设计时代，程序系统时代，软件工程时代。</p>
<p><strong>软件工程</strong>：用科学知识和技术原理来定义、开发、维护软件的一门学科。</p>
<p><strong>软件工程性质</strong>：它涉及计算机科学、工程科学、管理科学、数学等领域，计算机科学着重于原理和理论，而软件工程着重于如何建造一个软件系统。软件工程要用工程科学中的观点来进行费用估算、制定进度、制定计划和方案。软件工程要用管理科学中的方法和原理进行软件生产的管理。软件工程要用数学的方法建立软件开发中的各种模型和各种算法，如可靠性模型，说明用户需求的形式化模型等。</p>
<p><strong>软件工程研究的主要内容：</strong>是软件开发技术和软件开发管理两个方面。在软件开发技术中，主要研究软件开发方法、软件开发过程、软件开发工具和环境。在软件开发管理中， 主要是研究软件管理学、软件经济学、软件心理学等。</p>
<p><strong>软件工程面临的问题</strong>：软件费用；软件可靠性；软件维护；软件生产率；软件重用。</p>
<p><strong>软件工程过程</strong>：获取过程；供应过程；开发过程；操作过程；维护过程；管理过程；支持过程。</p>
<p><strong>软件生存周期</strong>：可行性分析和项目开发计划；需求分析；概要设计；详细设计；编码；测试；维护。</p>
<p><strong>软件生存周期模型</strong>是描述软件开发过程中各种活动如何执行的模型。<font color="#333399">瀑布模型是将软件生存周期各个活动规定为依线性顺序连接的若干阶段的模型。增量模型是一种非整体开发的模型。瀑布模型是一种整体开发的模型螺旋模型将瀑布模型与增量模型结合起来，加入了风险分析，用于复杂的大型软件开发；分为几个螺旋周期：第一，制定计划；第二，风险分析；第三，开发实施；第四，用户评估。喷泉模型是一种以用户需求为动力，以对象作为驱动的模型，适合于面向对象的开发方法。喷泉模型使开发过程具有迭代性和无间隙性。基本知识的模型又称智能模型，它把瀑布模型和专家系统结合在一起。变换模型是一种适合于形式化开发方法的模型。从软件需求形式化说明开始，经过一系列变换，最终得到系统的目标程序。</font></p>
<p><strong>软件开发方法</strong>：<font color="#333399">结构化方法由结构化分析、结构化设计、结构化程序设计构成。它是一种面向数据流的开发方法。结构化方法总的指导思想是自顶向下、逐步求精。它的基本原则是功能的分解与抽象，它是软件工程中最早出现的开发方法，特别适合于数据处理领域的问题。 Jackson方法是一种面向数据结构的开发方法。维也纳开发方法（VDM）是一种形式化的开发方法，软件的需求用严格的形式语言描述。面向对象的开发方法包括面向对象分析、面向对象设计、面向对象实现。面向对象开发方法有Booch方法、Coad方法&nbsp; </font></p>
<p>&nbsp;======================================================================================<br />
<font size="3"><strong>二、可行研究</strong></font></p>
<p><strong>软件可行性研究的目的</strong><br />
就是用最小的代价在尽可能短的时间内确定该软件项目是否能够开发，是否值得去开发。注意，可行性研究的目的不是去开发一个软件项目，而是研究这个软件项目是否值得去开发，其中的问提能否解决。可行性研究实质上是要进行一次简化、压缩了的需求分析、设计过程，要在较高层次上以较抽象的方式进行需求分析和设计过程。 </p>
<p><strong>可行性研究的任务</strong> <br />
技术可行性：对要开发项目的功能、性能、限制条件进行分析，确定在现有的资源条件下，技术风险有多大，项目是否能实现。包括：开发的风险；资源的有效性；技术；开发人员在评估技术可行性时，一旦估计错误，将会出现灾难性后果。 <br />
经济可行性：包括成本――效果分析、公司经营长期策略、开发所需的成本和资源、潜在的市场前景。 <br />
社会可行性包括：合同、责任、侵权、用户组织的管理模式及规范，其他一些技术人员常常不了解的陷阱等。</p>
<p><strong>典型的可行性研究有下列步骤<br />
</strong>确定项目规模和目标；研究正在运行的系统；建立新系统的高层逻辑模型；导出和评价各种方案；推荐可行的方案；编写可行性研究报告。</p>
<p><strong>可行性研究报告的主要内容</strong><br />
引言；可行性研究前提；对现有系统的分析；所建议系统的技术可行性分析；所建议系统的经济可行性分析；社会因素可行性分析；其他可供选择方案；结论意见。 </p>
<p><strong>成本――效益分析</strong>首先是估算将要开发的系统的开发成本，然后与可能取得的效益进行比较和权衡。效益分有形效益和无形效益两种。有形效益可以用货币的时间价值、投资回收期、纯收入等指标进行度量；无形效益主要从性质上、心理上进行衡量，很难直接进行量的比较。 投资回收期就是使累计的经济效益等于最初的投资费用所需的时间。 项目的纯收入，也就是在整个生存周期之内的累计经济效益（折合成现在值）与投资之差。 </p>
<p><strong>项目开发计划</strong>：项目概述；实施计划；人员组织及分工；交付期限。 </p>
<p>====================================================================================== <br />
<font size="3"><strong>三、需求分析</strong></font></p>
<p>在进行可行性研究和软件计划以后，如果确认开发一个新的软件系统是必要的而且是可能的，那么就进入需求分析阶段。 <strong>需求分析</strong>是指，开发人员要准确理解用户的要求，进行细致的调查分析，将用户非形式的需求陈述转化为完整的需求定义，再由需求定义转换到相应的形式功能规约（需求规格说明）的过程。 它的难点主要体现在以下几个方面：问题的复杂性；交流障碍；不完备性和不一致性。需求易变性。 需求分析的基本任务是要准确地定义新系统的目标，为了满足用户需要，回答系统必须&ldquo;做什么&rdquo;的问题。 </p>
<p><strong>本阶段要进行以下几方面的工作</strong>： <font color="#333399">问题识别：功能需求；性能需求；环境需求；用户界面需求分析与综合，导出软件的逻辑模型 </font></p>
<p><strong>编写文档</strong>：需求规格说明书；初步用户使用手册；确认测试计划；修改完善软件开发计划。</p>
<p><strong>结构化分析</strong>（SA）是面向数据流进行需求分析的方法。 SA方法利用图形等半形式化的描述方式表达需求，简明易懂，用它们形成需求说明书中的主要部分。这些描述工具是：数据流图；数据字典；描述加工逻辑的结构化语言，判定表、判定树。 <u>&ldquo;数据流图（DFD）&rdquo;</u>描述的分解，即描述系统由哪几部分组成，各部分之间有什么联系等等。 <u>&ldquo;数据字典&rdquo;</u>定义了数据流图中每一个图形元素。<u>结构化语言、判定表或判定树</u>则详细描述数据流图中不能被再分解的每一个加工。<u>&nbsp;</u></p>
<p><strong>数据流图</strong>的<u>数据流</u>是数据在系统内传播的路径，因此由一组成分固定的数据项组成。 <u>加工</u>（又称数据处理）。对数据流进行某些操作或变换。 <u>数据存储</u>（又称文件），指暂时保存的数据，它可以是数据库文件或任何形式的数据组织。<u>数据源点或终点</u>：是本软件系统外部环境中的实体，统称外部实体。 </p>
<p><strong>数据字典</strong>（DD）就是用来定义数据流图中的各个成分的具体含义的，它和数据流图共同构成了系统的逻辑模型，是需求规格说明书的主要组成部分。数据字典的内容及格式 <font color="#333399">数据</font><font color="#666699">项是组成数据流和数据存储的最小元素。 </font><u><font color="#666699">数据流条目；数据存储条目；数据项条目</font>；</u>加工条目数据字典中的加工逻辑主要描述该加工&ldquo;做什么&rdquo;，即实现另工的策略，而不是实现加工的细节，它描述如何把输入数据流变换为输出数据流的加工规则。 加工逻辑也称为&ldquo;小说明&rdquo;，描述加工逻辑一般用以下三种工具：结构化语言、判定表、判定树。 </p>
<p><strong>结构化语言</strong>是介于自然语言和形式语言之间的一种半形式语言。它的结构可分成外层和内层两层：外层用来描述控制结构，采用顺序、选择、重复三种基本结构；内层对于顺序执行和循环执行的动作，用结构化语言描述。对于存在多个条件复杂组合的判断问题，用判定表和判定树。 </p>
<p><strong>IDEF0</strong>：用来描述系统的功能活动及其联系，建立系统的功能模型。 <br />
<strong>IDEF1</strong>：用来描述系统的信息及其联系，建立系统的信息模型。 <br />
<strong>IDEF2</strong>：用来进行系统模拟，建立系统的动态模型。 </p>
<p><br />
传统的SA方法主要用于数据处理方面的问题，主要工具DFD体现了系统&ldquo;做什么&rdquo;的功能，但它仅是一个静态模型，没有反映处理的顺序，即控制流程。形式化方法是将需求规格说明用形式规约语言来描述。典型的有基于模型的Z语言及VDM开发方 法。</p>
<p>====================================================================================== <br />
<font size="3"><strong>四、概要设计</strong></font></p>
<p>在软件需求分析阶段，已经搞清楚了软件&ldquo;做什么&rdquo;的问题，并把这些需求通过规格说明书描述了出来，这也是目标系统的逻辑模型。进入了设计阶段，要把软件&ldquo;做什么&rdquo;的逻辑模型变换为&ldquo;怎么做&rdquo;的物理模型，即着手实现软件的需求，并将设计的结果反映在&ldquo;设计规格说明&rdquo;文档中，<strong>软件设计</strong>是一个把软件需求转换为软件表示的过程，最初这种表示只是描述了软件的总的体系结构，称为软件概要设计或结构设计。然后对结构进一步细分，称为详细设计或过程设计。 </p>
<p><strong>概要设计的基本任务</strong>： <br />
<font color="#333399">1设计软件系统结构（简称软件结构）――</font><font color="#333399">采用某种设计方法，将一个复杂的系统按功能划分成模块；确定每个模块的功能；确定模块之间的接口，即模块之间传递的信息；评价模块结构的质量。</font> 软件结构设计是以模块为基础的，在需求分析阶段，已经把系统分解为层次结构。设计阶段，以需求分析的结果为依据，从实现的角度进一步划分为模块，并<font color="#333399">组成模块的层次结构</font>。<br />
&nbsp;<br />
<font color="#333399">2数据结构及数据库设计</font> <br />
数据库的设计指数据存储文件的设计（概念设计、逻辑设计、物理设计） 数据库的&ldquo;概念设计&rdquo;、&ldquo;逻辑设计&rdquo;分别对应于系统开发中的&ldquo;需求分析&rdquo;与&ldquo;概要设计&rdquo;，而数据库的&ldquo;物理设计&rdquo;与模块的&ldquo;详细设计&rdquo;相对应。 </p>
<p><font color="#333399">3编写概要设计文档</font>（概要设计说明书、数据库设计说明书、用户手册、修订测试计划，对测试策略、方法、步骤提出明确要求。） </p>
<p><font color="#333399">4评审</font>：对设计部分是否完整地实现了需求中规定的功能、性能等要求，设计方案的可行性，关键的处理及内外部接口定义正确性、有效性，各部分之间的一致性等等都一一进行评审。<br />
&nbsp;</p>
<p><strong>模块的基本属性</strong>：<u>接口</u>指模块的输入与输出；<u>功能</u>指模块实现什么功能；<u>逻辑</u>描述内部如何实现要求的功能及所需的数据；<u>状态</u>指该模块的运行环境，即模块的调用与被调用关系。 功能、状态与接口反映模块的外部特性，逻辑反映它的内部特性。 </p>
<p><strong>模块化</strong>是指解决一个复杂问题时自顶向下逐层把软件系统划分为若干模块的过程。模块完成一个特定的子功能，所有的模块按某种方法组装起来，成为一个整体，完成整个系统所要求的功能。 开发一个大而复杂的软件系统，将它进行适当的分解，不但可降低其复杂性，还可减少开发工作量，从而降低开发成本，提高软件生产率，这就是模块化的依据。 </p>
<p><strong>抽象</strong>是认识复杂现象过程中使用的思维工具，即抽出事物本质的共同的特性而暂不考虑它的细节，不考虑其他因素。 <strong>信息隐蔽</strong>指在设计和确定模块时，使得一个模块内部包含的信息（过程或数据），对于不需要这些信息的其他模块来说，是不能访问的。通过抽象，可以确定组成软件的过程实体。通过信息隐蔽，可以定义和实施对模块的过程细节和局部数据结构的存取限制。</p>
<p><strong>模块独立性</strong>指每个模块只完成系统要求的独立子功能，并且与其他模块的联系最少且接口简单，两个定性的度量标准――耦合性和内聚性。 <strong>耦合性</strong>也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密，其耦合性就越强，模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 无直接耦合 数据耦合 标记耦合 控制耦合 公共耦合 内容耦合（低――高） <br />
<font color="#333399">1无直接耦合 <br />
2数据耦合指两个模块之间有调用关系，传递的是简单的数据值，相当于高级语言的值传递。 <br />
3标记耦合指两个模块之间传递的是数据结构，如高级语言中的数组名、记录名、文件名等这些名字即标记，其实传递的是这个数据结构的地址。 <br />
4控制耦合指一个模块调用另一个模块时，传递的是控制变量（如开关、标志等），被调模块通过该控制变量的值有选择地执行块内某一功能。 <br />
5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。 公共耦合的复杂程序随耦合模块的个数增加而增加。 <br />
6内容耦合：这是最高程度的耦合，也是最差的耦合。当一个模块直接使用另一个模块的内部数据，或通过非正常入口而转入另一个模块内部。</font> </p>
<p><strong>内聚性又称块内联系。</strong>指模块的功能强度的度量，即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素（语名之间、程序段之间）联系的越紧密，则它的内聚性就越高。 偶然内聚 逻辑内聚 时间内聚 通信内聚 顺序内聚 功能内聚（低――高） <br />
<font color="#333399">1偶然内聚指一个模块内的各处理元素之间没有任何联系。 <br />
2逻辑内聚指模块内执行几个逻辑上相似的功能，通过参数确定该模块完成哪一个功能。 <br />
3时间内聚：把需要同时执行的动作组合在一起形成的模块为时间内聚模块。 <br />
4通信内聚指模块内所有处理元素都在同一个数据结构上操作（有时称之为信息内聚），或者指各处理使用相同的输入数据或者产生相同的输出数据。 <br />
5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行，前一功能元素输出就是下一功能元素的输入。 <br />
6功能内聚：这是最强的内聚，指模块内所有元素共同完成一个功能，缺一不可。与其他模块的耦合是最弱的。</font> </p>
<p>耦合性与内聚性是模块独立性的两个定性标准，将软件系统划分模块时，尽量做到高内聚低耦合，提高模块的独立性，为设计高质量的软件结构奠定基础。 如果若干模块之间耦合强度过高，每个模块内功能不复杂，可将它们合并，以减少信息的传递和公共区的引用。若有多个相关模块，应对它们的功能进行分析，消去重复功能。</p>
<p><strong>软件结构图</strong>主要内容有：模块、模块的控制关系、模块间的信息传递、两个附加符号 <br />
<strong>结构图的形态特征</strong>：深度指结构图控制的层次；宽度指一层中最大的模块个数；扇出指一个模块直接下属模块的个数；扇入指一个模块直接上属模块的个数。 </p>
<p>一个模块的<strong>作用范围</strong>应在其<strong>控制范围</strong>这内，且判定所在的模块应与受其影响的模块在层次上尽量靠近。 一个模块的作用范围指受该模块内一个判定影响的所有模块的集合。一个模块的控制范围指模块本身以及其所有下属模块（直接或间接从属于它的模块）的集合。 </p>
<p>要把数据流图（DFD）转换成软件结构，首先必须研究<strong>DFD的类型</strong>，一般可分为变换型和事务型两类。 <br />
<strong>变换型DFD</strong>是由输入、变换（或称处理）和输出三部分组成。 变换型数据处理的工作过程一般分为三步：取得数据、变换数据和给出数据，这三步体现了变换型DFD的基本思想。<u>变换</u>是系统的主加工，变换输入端的数据流为系统的逻辑输入，输出端为逻辑输出。而直接从外部设备输入数据称为物理输入，反之称为物理输出。 若某个加工将它的输入流分离成许多发散的数据流，形成许多加工路径，并根据输入的值选择其中一个路径来执行，这种特征的DFD称为<strong>事务型的数据流图</strong>，这个加工称为事务处理中心。 </p>
<p>基于<strong>iDEF0图</strong>的设计也是结构化设计技术之一，它以系统的功能模型和信息结构为基础设计系统的软件结构。 <br />
<strong>HIPO图</strong>是表示软件系统结构的工具。它既可以描述软件总的模块层次结构－H图（层次图），又可以描述每个模块输入/输出数据、处理功能及模块调用的详细情况－IPO图。 </p>
<p>======================================================================================<br />
<font size="3"><strong>五、详细设计</strong></font></p>
<p>详细设计是软件设计的第二阶段，主要确定每个模块具体执行过程，故也称&ldquo;过程设计&rdquo; <br />
<strong>详细设计的基本任务</strong>：为每个模块进行详细的算法设计；为模块内的数据结构进行设计；对数据库进行物理设计，即确定数据库的物理结构；其他设计（代码设计、输入输出格式设计、人机对话设计、编写详细设计说明书、评审） </p>
<p>处理过程设计中采用的典型方法是<strong>结构化程序设计（SP）方法</strong>。详细设计的目标不仅是逻辑上正确地实现每个模块的功能，还应使设计出的处理过程清晰易读。结构化程序设计是实现该目标的关键技术之一，它指导人们用良好的思想方法开发易于理解、易于验证的程序。 </p>
<p><strong>结构化程序设计方法的基本要点是</strong>： <br />
1采用自顶向下、逐步求精的程序设计方法 <br />
2使用三种基本控制结构构造程序：任何程序都可由顺序、选择、重复三种基本控制结构构造。这三种基本结构的共同点是单入口、单出口。 <br />
3主程序员组的组织形式</p>
<p>详细描述处理过程<strong>常用三种工具</strong>：图形、表格和语言。 <br />
程序流程图又称为程序框图，都应由三种基本控制结构顺序组合和完整嵌套而成，不能有相互交叉的情况，这样的流程图是结构化的流程图。 <br />
PAD图指问题分析图，它是一种自左往右展开的二维树型结构。控制流程为自上而下、从左到右的执行。由机器自动通过走树的办法生成相应的源代码，大大提高了软件的生产率。<br />
&nbsp;<br />
<strong>过程设计语言</strong>（PDL），也称程序描述语言，又称伪码。它是一种用于描述模块算法设计和处理细节的语言。伪码的结构一般分为内外两层，外层语法应符合一般程序设计语言常用的语法规则，而内层语法则用一些简单的句子、短语和通用的数学符号，来描述程序应执行的功能，具有严格的关键字外层语法，用于定义控制结构、数据结构和模块接口，而它表示实际操作和条件的内层语语法又是灵活自由的，使用自然语言的词汇。<br />
&nbsp;<br />
<strong>JACKSON方法</strong>是面向数据结构的设计方法，70年代中期出了&ldquo;面向数据结构&rdquo;的设计方法，其中有代表性的是由英国M.JACKSON提出的JACKSON方法和由法国人J.WARNIER提出的WARNIER方法。 JACKSON在JSP的基础上扩展成了一种系统的开发方法，简称JSD。JSD主要以活动事件为中心，通过由一串活动顺序组合构成的进程，建立系统模型，最后实现该模型。JSP方法定义了一组以数据结构为指导的映射过程，它根据输入、输出的数据结构，按一定的规则映射成软件的过程描述，即程序结构，而不是软件的体系结构，因此该方法适用于详细设计阶段。JACKSON方法提供了自己的描述工具――－JACKSON结构图。无论数据结构还是程序结构，都限于三种基本结构（顺序结构、选择结构、重复结构）及它们的组合。<br />
&nbsp;<br />
<strong>JACKSON结构图的特点</strong>： <br />
1能对结构进行自顶向下分解，因此可以表示层次结构。 <br />
2结构易读，形象直观。 <br />
3既能表示数据结构也能表示程序结构，且表示的是组成关系。 </p>
<p><strong>JSP方法一般通过以下五个步骤来完成设计</strong>： <br />
1分析并确定输入数据和输出数据的逻辑结构，并用JACKson结构图表示这些数据结构。 <br />
2找出输入数据结构和输出数据结构中有对应关系的数据单元。&ldquo;对应关系&rdquo;指这些数据单元在数据内容上、数量上和顺序上有直接的因果关系，对于重复的数据单元，重复的次序和次数都相同才有对应关系。 <br />
3按一定的规则由输入、输出的数据结构导出程序结构 <br />
4列出基本操作与条件，并把它们分配到程序结构图的适当位置。 <br />
5用伪码写出程序。</p>
<p>======================================================================================<br />
<font size="3"><strong>六、程序设计</strong></font></p>
<p>将详细设计得到的处理过程的描述转换为基于某种计算机语言的程序，即源程序代码。<br />
&nbsp;<br />
<strong>程序设计语言特性：</strong> <br />
<font color="#666699">心理特性</font>：指影响程序员心理的语言性能，许多这类特性是作为程序设计的结果而出现的。 <br />
<font color="#666699">歧义性</font>：有些语法规则容易使人用不同的方式来解释语言，这就产生了心理上的二义性。 <br />
<font color="#666699">简洁性</font>：人们必须记住的语言成分的数量越多，简洁性越差。 <br />
<font color="#666699">局部性和顺序性</font>：局部性是指语言的联想性，在编码过程中，由语句组合成模块，由模块组装成系统结构，并在组装过程实现模块的高内聚，低耦合，使局部性得到加强。 <br />
<font color="#666699">传统性</font>：传统性容易影响人们学习新语种的积极性。 </p>
<p><strong>程序设计工程特性</strong> <br />
<font color="#666699">可移值性</font>：指程序从一个计算机环境移植到另一个计算机环境的容易程度。 <br />
<font color="#666699">开发工具的可利用性 <br />
</font><font color="#666699">软件的可重用性 <br />
可维护性<strong>。</strong></font><br />
&nbsp;<br />
<strong>程序设计技术特性</strong> <br />
<font color="#666699">1项目的应用领域</font>：科学工程计算（需要大量的标准库函数，以便处理复杂的数值计算，可供选用的语言有：FORTRAN Pascal C PL/1）；数据处理与数据库应用（CoBol SQL 4GL）；实时处理（汇编语言 Ada）；系统软件（汇编语言 C语言 Pascal语言和Ada语言）；人工智能（Lisp是一种函数型语言 Prolog是一种逻辑型语言） <br />
<font color="#666699">2软件开发的方法</font>：有时编程语言的选择依赖于开发的方法，如果要用快速原形模型来开发，要求能快速实现原形，宜采用4GL。如果是面向对象方法，宜采用面向对象的语言编程(C++ JAVA) <br />
<font color="#666699">3软件执行的环境</font> <br />
<font color="#666699">4算法和数据结构的复杂性 <br />
5软件开发人员的知识。</font><br />
&nbsp;<br />
<strong>程序设计风格</strong>指一个编制程序时所表现出来的特点、习惯、逻辑思想等。 <br />
<strong>语句构造的原则</strong>是：简单直接，不能为了追求效率而使代码复杂化。 <br />
<strong>效率</strong>指处理机时间和存储空间的使用：效率是一个性能要求，目标在需求分析给出；追求效率建立在不损害程序可读性或可靠性基础之上；提高程序效率的根本途径在于选择良好的设计方法、良好的数据结构与算法，而不是靠编程时对程序语句做调整。</p>
<p>&nbsp;</p>
<p>===========================================================================================<br />
<font size="3"><strong>七、软件测试</strong></font></p>
<p><strong>软件测试的目的<br />
</strong>软件测试是为了发现错误而执行程序的过程；一个好的测试用例能够发现至今尚未发现的错误；一个成功的测试是发现了至今尚未发现的错误的测试。</p>
<p><strong>测试阶段的基本任务</strong><br />
应该是根据软件开发各阶段的文档资料和程序的内部结构，精心设计一组&ldquo;高产&rdquo;的测试用例，利用这些实例执行程序，找出软件中潜在的各种错误和缺陷。 </p>
<p><strong>软件测试中，应注意以下指导原则</strong><br />
测试用例应由输入数据和预期的输出数据两部分组成；测试用例不仅选用合理的输入数据，还要选择不合理的输入数据。这样能更多的发现错误，提高程序的可靠性。对不合理的输入数据，程序应拒绝接受，并给出相应提示。 </p>
<p><strong>软件测试方法</strong>一般分为两大类<br />
动态测试方法与静态测试方法。静态测试指被测试程序不在机器上运行，而是采用人工检测和计算机辅助静态分析的手段对程序进行检测。 </p>
<p><strong>动态测试</strong>指通过运行程序发现错误，分为黑盒测试法和白盒测试法。 <br />
<font color="#333399">黑盒法：把被测试对象看成一个黑盒子，测试人员完全不考虑程序的内部结构和处理过程，只在软件的接口处进行测试，依据需求规格说明书，检查程序是否满足功能要求。因此，黑盒测试又称为功能测试或数据驱动测试。 <br />
白盒法：把测试对象看作一个打开的盒子，测试人员须了解程序的内部结构和处理过程，以检查处理过程的细节为基础，对程序中尽可能多的逻辑路径进行测试，检验内部控制结构和数据结构是否有错，实际的运行状态与预期的状态是否一致。 由于白盒测试是结构测试，所以被测对象基本上是源程序，以程序的内部逻辑为基础设计测试用例。</font> </p>
<p><strong>1逻辑覆盖</strong> <br />
<strong>语句覆盖</strong>是指设计足够的测试用例，使被测程序中的每个语句至少执行一次，语句覆盖是比较弱的覆盖标准。 <br />
<strong>判定覆盖</strong>指设计足够的测试用例，使得被测程序中每个判定表达式至少获得一次&ldquo;真&rdquo;值和&ldquo;假&rdquo;值，从而使程序的每一个分支至少都通过一次，因此判定覆盖也称分支覆盖。 <br />
条件覆盖指设计足够的测试用例，使得判定表达式中每个条件的各种可能的值至少出现一次。 <br />
<strong>判定/条件覆盖</strong>指设计足够的测试用例，使得判定表达式中的每个条件的所有可能取值至少出现一次，并使每个判定表达式所有可能的结果也至少出现次。 <br />
条件组合覆盖是比较强的覆盖标准，它是指设计足够的测试用例，使得每个判定表达式中条件的各种可能的值的组合至少出现一次，满足条件组合覆盖的测试一定满足&ldquo;判定覆盖&rdquo;、&ldquo;条件覆盖&rdquo;和&ldquo;判定/条件覆盖&rdquo;。 <br />
路径覆盖是指设计足够的测试用例，覆盖被测程序中所有可能的路径。语句覆盖发现错误能力最弱。判定覆盖包含了语句覆盖，但它可能会使一些条件得不到测试。P87 </p>
<p><strong>2循环覆盖 <br />
3基本路径测试</strong>是在程序控制流程图的基础上，通过分析控制构造的环路复杂性，导出基本路径集合，从而设计测试用例，保证这些路径至少通过一次。 <br />
<strong>独立路径</strong>是指包括一组以前没有处理的语句或条件的一条路径。从程序图来看，一条独立路径是至少包含有一条在其他独立路径中未有过的边的路径。P89 <br />
</p>
<p>黑盒测试是功能测试，因此设计测试用例时，需要研究需求规格说明和概要设计说明中有关程序功能或输入、输出之间的关系等信息，从而与测试后的结果进行分析比较。 </p>
<p><br />
<strong>等价类划分</strong>：它将输入数据域按有效的或无效的（也称合理的或不合理的）划分为若干个等价类，测试每个等价类的代表值就等于对该类其他值的测试。 <br />
<strong>用等价类划分的方法设计测试用例的步骤为：</strong> <br />
<strong>划分等价类</strong> <br />
确定测试用例的步骤：为每一个等价类编号；设计一个测试用例，使其尽可能多地覆盖尚未被覆盖过的合理等价类。重覆这步，直到所有合理等价类被测试用例覆盖；设计一个测试用例，使其只覆盖一个不合理等价类。重覆这一步，直到所有不合理等价类被覆盖。 <br />
<strong>2边界值分析</strong> <br />
使用边界值分析方法设计测试用例时一般与等价类划分结合起来。但它不是从一个等价类中任选一个例子作为代表，而将测试边界情况作为重点目标，选取正好等于、刚刚大于或刚刚小于边界值的测试数据。 <br />
<strong>3错误推测</strong>：在测试程序时，人们可能根据经验或直觉推测程序中可能存在的各种错误，从而有针对性地编写检查这些错误的测试用例，这就是错误推测法。 <br />
<strong>4因果图</strong>：因果图能有效地检测输入条件的各种组合可能会引起的错误。因果图的基本原理是通过画因果图，把用自然语言描述的功能说明转换为判定表，最后为判定表的每一列设计一个测试用例。 <br />
<strong>5综合策略</strong> </p>
<p><br />
<strong>软件测试时需要三类信息： <br />
</strong>1软件配置：指需求规格说明书、设计说明书、源程序等。 <br />
2测试配置：指测试方案、测试用例、测试驱动程序等 <br />
3测试工具：指计算机辅助测试的有关工具。 </p>
<p><strong>软件产品在交付使用之前要经过哪些测试</strong>呢？一般要经过以下四步测试：单元测试、集成测试、确认测试和系统测试。 </p>
<p><strong>软件测试的步骤及与各开发阶段的关系</strong> <br />
单元测试指对源程序中每一个程序单元进行测试，检查各个模块是否正确实现规定的功能，从而发现模块在编码中或算法中的错误。该阶段涉及编码和详细设计的文档。各模块经过单元测试后，将各模块组装起来进行集成测试，以检查与设计相关的软件体系结构的有关问题。确认测试主要检查已实现的软件是否满足需求规格说明书中确定了的各种需求。系统测试指把已确认的软件与其他系统元素结合在一起进行测试。 </p>
<p><strong>单元测试</strong>主要针对模块的以下五个基本特征进行测试：模块接口、局部数据结构、重要的执行路径、错误处理、边界条件。 在单元测试时，需要为被测模块设计驱动模块和桩模块。 <strong>驱动模块</strong>的作用是用来模拟被测模块的上级调用模块，它只完成接受测试数据，以上级模块调用被测模块的格式驱动被测模块，接收被测模块的测试结果并输出。 <strong>桩模块</strong>用来代替被测试模块所调用的模块。它的作用是返回被测试模块所需的信息。 </p>
<p><strong>集成测试</strong>是指在单元测试的基础上，将所有模块按照设计要求组装成一个完整的系统进行的测试，故也称组装测试或联合测试。 集成测试的方法主要有两种：非渐增式测试和渐增式测试。 <strong>非渐增式方法</strong>把单元测试和集成测试分成两个不同的阶段。P97 <strong>渐增式测试</strong>有以下两种不同的组装模块的方法：自顶向下结合（深度优先策略、宽度优先策略）；自底向上结合 确认测试又称有效性测试。它的任务是检查软件的功能与性能是否与需求规格说明书中确定的指标相符合，确认测试阶段有两项工作：进行确认测试与软件配置审查。 <br />
</p>
<p><strong>确认测试</strong>一般是在模拟环境下运用黑盒测试方法，由专门测试人员和用户参加的测试。 </p>
<p><strong>软件配置审查的任务</strong>是检查软件的所有文档资料的完整性、正确性。如发现遗漏和错误，应补充和改正。 </p>
<p><strong>软件测试的目的</strong>是尽可能多地发现程序中的错误，而调试则是在进行了成功的测试之后才开始的工作，因此调试也称为纠错。 </p>
<p><strong>归纳法调试</strong>从测试结果发现的线索入手，分析它们之间的联系，导出错误原因的假设，然后再证明或否定这个假设。 步骤：收集有关数据；组织数据；提出假设；证明假设 </p>
<p><strong>演绎法调试</strong>是列出所有可能的错误原因的假设，然后利用测试数据排除不适当的假设，最后再测试数据验证余下的假设确实是出错的原因。 <br />
步骤：列出所有可能的错误原因的假设；排除不适当的假设；精化余于的假设；证明余于的假设。 </p>
<p><strong>回溯法调试</strong>：该方法从程序产生错误的地方出发，人工沿程序的逻辑路径反向搜索，直到找到错误原因为止。</p>
<p>======================================================================================<br />
<font size="3"><strong>八、软件维护</strong></font></p>
<p><strong>软件维护的内容有四种</strong>：校正性维护，适应性维护，完善性维护和预防性维护。 <br />
校正性维护：为了识别和纠正错误，修改软件性能上的缺陷，应进行确定和修改错误的过程，这个过程就称为校正性维护。 <br />
适应性维护：为了使应用软件适应硬件和软件环境的变化而修改软件的过程称为适应性维护。 <br />
完善性维护：增加软件功能、增强软件性能、提高软件运行效率而进行的维护活动称为完善性维护。 <br />
预防性维护：为了提高软件的可维护性和可靠性而对软件进行的修改称为预防性维护。</p>
<p><strong>结构化的维护VS非结构化的维护：</strong>软件的开发过程对软件的维护有较大的影响。若不采用软件工程的方法开发软件，则软件只有程序而无文档，维护工作非常困难，这是一种非结构化的维护。若采用软件工程的方法开发软件，则各阶段都有相应的文档，容易进行维护工作，这是一种结构化的维护。 </p>
<p><strong>软件维护：</strong>软件能够被理解、校正、适应及增强功能的容易程度。用于软件维护工作的活动可分为生产性活动和非生产性活动两种。生产性活动包括分析评价、修改设计和编写程序代码等。非生产性活动包括理解程序代码功能、解释数据结构接口特点和设计约束。</p>
<p><strong>维护的流程</strong>：制定维护申请报告；审查申请报告并批准；进行维护并做详细记录；覆审。 <br />
维护申请报告是一种由用户生产的文档，它用作计划维护任务的基础。 <br />
不管维护类型如何，大体上要开展相同的技术工作。这些工作包括修改软件设计、必要的代码修改、单元测试、集成测试、确认测试以及复审。 有两类维护技术，它们是面向维护的技术和维护支援技术。面向维护的技术是在软件开发阶段用来减少错误、提高软件可维护性的技术。维护支援技术是在软件维护阶段用来提高维护作业的效率和质量的技术。这些技术方法都能减少软件错误，提高软件的可维护性。因修改软件而造成的错误或其他不希望出现的情况称为维护的副作用。（编码副作用、数据副作用、文档副作用）在软件交付这前对整个软件配置进行评审，以减少文档副作用。</p>
<p><strong>衡量软件质量的几个主要特性：</strong>软件的可维护性、可使用性、可靠性是。<strong>软件的可维护性可用下面七个质量特性可来衡量</strong>，即可理解性、可测试性、可修改性、可靠性、可移植性、可使用性和效率。对不同类型的维护，这七种特性的侧重点也不相同。 </p>
<p><strong>提高可维护性的方法</strong>：建立明确的软件质量目标；利用先进的软件开发技术和工具；建立明确的质量保证工作；选择可维护的程序设计语言；改进程序文档。 <strong>为了保证可维护性，以下四类检查是非常有用的</strong>：在检查点进行检查；验收检查；周期性的维护检查；对软件包的检查。<br />
======================================================================================<br />
<font size="3"><strong>九、开发模型</strong></font></p>
<p><strong>瀑布模型</strong>本质上是一种线性顺序模型，各阶段之间存在着严格的顺序性和依赖性，特别强调预先定义需求的重要性。 瀑布模型属于整体开发模型，它规定在开始下一个阶段的工作之前，必须完成前一阶段的所有细节。而增量模型属于非整体开发模型，它推迟某些阶段或所有阶段中的细节，从而较早的产生工作软件。 </p>
<p><strong>增量模型</strong>是在项目的开发过程中以一系列的增量方式开发系统。增量方式包括增量开发和增量提交。增量开发是指在项目开发周期内，以一定的时间间隔开发部分工作软件；增量提交是指在项目开发周期内，以一定的时间间隔增量方式向用户提交工作软件及相应文档。 根据增量的方式和形式的不同，分为渐增模型和原型模型。 渐增模型是瀑布模型的变种，有两类渐增模型： <br />
<u>1增量构造模型</u>：它在瀑布模型基础上，对一些阶段进行整体开发，对另一些阶段进行增量开发。前面的开发阶段按瀑布模型进行整体开发，后面的开发阶段按增量方式开发。 <br />
<u>2演化提交模型</u>：它在瀑布模型的基础上，所有阶段都进行增量开发，也就是说不仅是增量开发，也是增量提交。 </p>
<p><strong>原形模型</strong>又称快速原形模型，它是增量模型的另一种形式。软件开发中的原型是软件的一个早期可运行的版本，它反映了最终系统的重要特性。<u>快速原型</u>是利用原型辅助软件开发的一种新思想。经过简单快速分析，快速实现一个原型，用户与开发者在试用原型过程中加强通信与反馈，通过反覆评价和改进原型，减少误解，弥补遗漏，适应变化，最终提高软件质量。&nbsp; 根据原型的不同作用，有三类原型模型： <br />
<u>1探索型原型</u>：这种类型的原型模型是把原型用于开发的需求分析阶段，目的是要弄清用户的需求，确定所期望的特性，并探索各种方案的可行性。它主要针对开发目标模糊，用户与开发都对项目都缺乏经验的情况，通过对原型的开发来明确用户的需求。 对于探索型，用原型过程来代替需求分析，把原型作为需求说明的补充形式，运用原型尽可能使需求说明完整、一致、准确、无二义性，但在整体上仍采用瀑布模型。 <br />
<u>2实验型原型</u>：主要用于设计阶段，考核实现方案是否合适，能否实现。对于实验型，用原形过程来代替设计阶段，即在设计阶段引入原型，快速分析实现方案，快速构造原形，通过运行，考察设计方案的可行性与合理性，原型成为设计的总体框架或设计结果的一部分。 <br />
<u>3演化型原型</u>：主要用于及早向用户提交一个原型系统，该原型系统或者包含系统的框架，或者包含系统的主要功能，在得到用户的认可后，将原型系统不断扩充演变为最终的软件系统。它将原型的思想扩展到软件开发的全过程。 对于演化型，用原型过程来代替全部开发阶段，这是典型的演化提交模型的形式，它是有强有力的软件工具和环境支持下，通过原型过程的反覆循环，直接得到软件系统。 </p>
<p><font color="#333399">由于运用原形的目的和方式不同，在使用原型时也采取不同的策略，有抛弃策略和附加策略。 <br />
</font>1抛弃策略：用于开发过程某一阶段（探索型和实验型快速原型就是采用此策略） <br />
2附加策略：由基本核心开始（演化型快速原型就采用此策略） </p>
<p><font color="#333399">原形开发步骤：快速分析、构造原形、运行原型、评价原型、修改</font> <br />
<font color="#333399">构造原型的技术：可执行的规格说明；基于脚本的设计；采用非常高级语言或专门语言；能重用软件。</font> </p>
<p><br />
======================================================================================<br />
<font size="3"><strong>十、面向对象</strong></font></p>
<p><strong>对象和类：</strong><u>对象</u>具有状态。一个对象用数据值来描述它的状态。对象还有操作，用于改变对象的状态，对象及其操作就是对象的行为。对象实现了数据和操作的结合，使数据和操作封装于对象的统一体中。 具有相同或相似性质的对象的抽象就是<u>类</u>。因此，对象的抽象是类，类的具体化就是对象，也可以说类的实例是对象。 <u>类具有属性</u>，它是对象的状态的抽象，用数据结构来描述类的属性。 <u>类具有操作</u>，它是对象的行为的抽象，用操作名和实现该操作的方法来描述。 类中操作的实现过程叫做<u>方法</u>，一个方法有方法名、参数、方法体。当一个对象接收一条消息后，它所包含的方法决定对象怎样动作。 在客观世界中有若干类，这些<u>类之间有一定的结构关系</u>。通常有两种主要的结构关系，即一般――具体结构关系，整体――部分结构关系。 在<u>类的层次结构中</u>，通常上层类称为父类或超类，下层类称为子类。子类只继承一个父类的数据结构方法，则称为<u>单重继承</u>。 子类继承了多个父类的数据结构和方法，则称为<u>多重继承</u>。 对象之间进行通信的构造叫做消息。在对象的操作中，当一个消息发送给某个对象时，消息包含接收对象去执行某种操作的信息。接收消息的对象经过解释，然后给予响应。这种通信机制称为<u>消息传递</u>。 </p>
<p><font color="#333399"><strong>面向对象的特征</strong>：对象惟一性；分类性；继承性；多态性（多形性）。</font>&nbsp;<br />
<br />
<strong>面向对象的要素：</strong> <br />
<font color="#333399">1抽象：</font>是指强调实体的本质、内在的属性，忽略一些无关紧要的属性。类实现了对象的数据（即状态）和行为的抽象，它是对象的共性的抽象。 <br />
<font color="#333399">2封装性：</font>是指所有软件部件内部都有明确的范围以及清楚的外部边界。每个软件部件都有友好的界面接口，软件部件的内部实现与外部可访问性分离。 <br />
<font color="#333399">3共享性</font>（3个级别）：面向对象技术在不同级别上促进了共享。<u>同一个类中的共享</u>――同一个类中的对象有着相同数据结构，也有着相同的行为特征。<u>在同一个应用中共享</u>――在同一应用的类层次结构中，存在继承关系的各相似子类中，存在数据结构和行为的继承，使各相似子类共享共同的结构和行为。<u>在不同应用中的共享。</u> </p>
<p><strong>面向对象开发方法：</strong><font color="#333399">有coad方法、booch方法、omt方法和oose方法等。 <br />
</font><u>Booch方法：</u>通过分析正文描述，将其中的名词映射为对象，将其中的动词映射为方法，从而为对象和方法的认定提供了一种简单的策略。虽然booch方法原是面向ada语言的，但仍处于面向对象开发的奠基性地位。 <br />
<u>Coad方法：</u>完成了从需求角度出发的对象和分类结构的认定工作，面向对象设计可以在此基础上，从设计的角度进一步进行类和类层次结构的认定。 <br />
<u>Omt方法：</u>是一种新兴的面向对象的开发方法，开发工作的基础是对真实世界的对象建模，然后围绕这些对象使用分析模型来进行独立于语言的设计。 </p>
<p><font color="#333399"><strong><font color="#000000">Uml语言：</font></strong>统一了booch方法、omt方法、oose方法的表示方法，而且对其作了进一步的发展，最终统一为大众所接受的标准建模语言。</font> </p>
<p><strong>对象模型：</strong>表示了静态的、结构化的系统数据性质，描述了系统的静态结构，它是从客观世界实体的对象关系角度来描述。表现了对象的相互关系。<u>该模型主要关心系统中对象的结构，属性和操作，<font color="#333399">使用了对象图的工具来刻划</font></u>，它是分析阶段三个模型的核心。 <u>属性</u>指的是类中对象所具有的性质（数据值）。不同对象的同一属性可以具有相同或不同的属性值。 <u>操作</u>是类中对象所使用的一种功能或变换。类中的各对象可以共享操作。方法是类的操作的实现步骤。 </p>
<p><strong>链</strong>表示对象间的物理与概念联结，关联表示类之间的一种关系，就是一些可能的链的集合，链是关联的实例，关联是链的抽象。两个类之间的关联称为二元关联，三个类之间的关联称为三元关联。 <br />
<u>1聚集关系</u>。聚集是一种&ldquo;整体――部分&rdquo;关系。在这种关系中，有整体类和部分类之分。聚集最重要的性质是传递性，也具有逆对性。 <br />
<u>2一般化关系</u> 一般化关系是在保留对象差异的同时共享对象相似性的一种高度抽象方法。它是&ldquo;一般－－具体&rdquo;的关系，一般化类又称父类，具体类又称子类。 </p>
<p><strong>继承</strong>有<u>单重继承和多重继承</u>。单重继承指的是子类只有一个父亲，在一个类层次结构中，若只有单重继承，则该类层次结构是树型层次结构。多重继承指的是子类继承了多个父类的性质，在一个类层次结构中，若有多重继承，则该类层次结构是网状层次结构。 </p>
<p><strong>动态模型：</strong>是与时间和变化有关的系统性质。该模型描述了系统的控制结构，它表示了瞬时的、行为化的系统控制性质，它关心的是系统的控制，操作的执行顺序，它从对象的事件和状态的角度出发，表现了对象的相互行为。 该模型描述的系统属性是触发事件、事件序列、状态、事件与状态的组织。<font color="#333399">使用<u>状态图</u>作为描述工具</font>。 </p>
<p>现实世界中，各对象之间相互触发，一个触发行为就是一个<u>事件</u>。对事件的响应取决于接受该触发的对象的状态，响应包括状态的改变或形成一个新的触发。事件可以看成是信息从一个对象到另一个对象的单向传递。各事件将信息从一个对象传到另一个对象中去，因此要确定各事件的发送对象和接收对象。事件跟踪图用来表示事件、事件的接收对象和发送对象。 <u>状态</u>是对象属性值的抽象，状态指明了对象对输入事件的响应。 <u>状态图</u>反映了状态与事件的关系，状态图确定了由事件序列引起的状态序列。 <u>活动</u>是一种有时间间隔的操作，它是依附于状态的操作。 <u>动作</u>是一种瞬时操作，它是与事件联系在一起的操作。 </p>
<p><strong>功能模型</strong>描述了系统的所有计算。功能模型指出发生了什么，动态模型确定什么时候发生，而对象模型确定发生的客体。<font color="#333399">功能模型由多张数据流图组成</font>。 <u>数据流图</u>中包含有处理、数据流、动作对象和数据存储对象。 功能模型用来说明值是如何计算的，表明值之间的依赖关系及其相关的功能，数据流图有助于表示功能依赖关系，其中的处理对应于状态图的活动和动作，其中的数据流对应于对象图中的对象或属性。 操作与对象模型中属性和关联的查询有关，与动态模型的事件有关，与功能模型的处理有关。 </p>
<p><strong>瀑布模型</strong>把设计进一步划分成概要设计和详细设计两个阶段，类似地，也可以把面向对象设计再细分为系统设计和对象设计。系统设计确定实现系统的策略和目标系统的高层结构。对象设计确定解空间中的类、关联、接口形式及实现操作的算法。 </p>
<p><strong>面向对象设计的准则：</strong><font color="#333399">模型化；抽象；信息隐蔽；低耦合；高内聚（操作内聚、类内聚、一般――具体内聚） <br />
在面向对象方法中，信息隐蔽通过对象的封装性来实现。类结构分离了与实现，从而支持了信息隐蔽。</font></p>
<p><br />
======================================================================================<br />
<font size="3"><strong>十一、软件质量</strong></font></p>
<p><strong>软件质量定义</strong>： <br />
1与所确定的功能和性能需求的一致性。<br />
2与所成文的开发标准的一致性。 <br />
3与所有专业开发的软件所期望的隐含特性的一致性。<br />
&nbsp;<br />
<strong>软件质量保证</strong>就是向用户及社会提供满意的高质量的产品，确保软件产品从诞生到消亡为止的所有阶段的质量的活动，即确定、达到和维护需要的软件质量而进行的所有有计划、有系统的管理活动。 软件质量保证应从产品计划和设计开始，直到投入使用和售后服务的软件生存期的每一阶段中的每一步骤。 </p>
<p>为了提高软件的质量，<strong>软件质量保证的任务</strong>大致可归结为以下几点： <br />
1正确定义用户要求 <br />
2技术方法的应用 <br />
3提高软件开发的工程能力 <br />
4软件的复用 <br />
5发挥每个开发者的能力 <br />
6组织外部力量协作 <br />
7排除无效劳动 <br />
8提高计划和管理质量。<br />
&nbsp;<br />
软件质量必须在设计和实现过程中加以保证，为了确保每个开发过程的质量，防止把软件差错传递到下一个过程，必须进行质量检验。因此须在软件开发工程的各个阶段实施检验，检验的实施有两种形式：实际运行检验（即白盒测试和黑盒测试）和鉴定。可在各开发阶段中结合起来使用。 </p>
<p>针对面向软件产品的运行、修正、转移，<strong>软件质量</strong>概念包括11个特性：（面向软件产品操作）正确性、可靠性、效率、完整性、可性。（面向软件产品修改）可维护性、可测试性、适应性。（面向软件产品适应）可移植性、可重用性、可互操作性 <font color="#333399">ISO三层次中的第一层为质量特性，第二层为质量子特性、第三层为度量。</font> 通常，把&ldquo;质量&rdquo;理解为&ldquo;用户满意程序&rdquo;。 <br />
1设计的规格说明书要符合用户的要求。 <br />
2程序要按照设计规格说明所规定的情况正确执行。 <br />
我们把上述条件1称为&ldquo;设计质量&rdquo;，把条件2称为&ldquo;程序质量&rdquo;。</p>
<p><strong>软件复杂性</strong>主要表现在程序的复杂性。程序的复杂性主要指模块内程序的复杂性。它直接关联到软件开发费用的多少、开发周期长短和软件内部潜伏错误的多少。 <br />
软件可靠性是指在给定的时间内，在规定的环境条件下系统完成所指定的功能的概率。<br />
<br />
&nbsp;<br />
<strong>软件的规格说明</strong>分为外部规格说明和内部规格说明。外部规格说明是从用户角度来看的规格，包括硬件/软件系统设计（在分析阶段进行）、功能设计（在需求分析阶段与概要设计阶段进行）。而内部规格说明是为了实现外部规格的更详细的规格，即软件模块结构与模块处理过程的设计（在概要设计与详细设计阶段进行）。因此，内部规格说明是从开发者角度来看的规格说明。将上述两概念联系起来，因此，设计质量是由外部规格说明决定的，程序质量是由内部规格说明决定的。 </p>
<p>设计<strong>质量评审</strong>的对象是在需求分析阶段产生的<font color="#333399">软件需求规格说明、数据需求规格说明，在软件概要设计阶段产生的软件概要设计说明书等。 </font>程序质量评审通常它是从开发者的角度进行评审，直接与开发技术有关。它是着眼于软件本身的结构、与运行环境的接口、变更带来的影响而进行的评审活动。<br />
&nbsp;<br />
<strong>提高软件质量和可靠性的技术大致可分为两</strong>类，一类是避开错误技术，即在开发的过程中不让差错潜入软件的技术；另一类是容错技术，即对某些无法避开的差错，使其影响减到最小的技术。避开错误技术是进行质量管理，实现产品应有质量所必不可少的技术。<br />
&nbsp;<br />
<strong>实现容错技术的主要手段是冗余</strong>。冗余是指实现系统规定功能是多余的那部分资源，包括硬件、软件、信息和时间。（结构冗余、信息冗余、时间冗余、冗余附加技术） </p>
<p>====================================================================================== <br />
<font size="3"><strong>十二、软件工程管理</strong></font></p>
<p><strong>软件工程管理的具体内容</strong>包括对开发人员、组织机构、用户、文档资料等方面的管理。 <strong>软件开发人员</strong>一般分为：项目负责人、系统分析员、高级程序员、初级程序员、资料员和其他辅助人员。 <strong>软件开发的组织机构</strong>没有统一的模式：主程序员组织机构；专家组织机构；民主组织机构。 <strong>控制</strong>包括进度控制、人员控制、经费控制和质量控制。 </p>
<p>在软件项目管理过程中一个关键的活动是<strong>制定项目计划</strong>，它是软件开发工作的第一步。软件项目计划是由系统分析员与用户共同经过&ldquo;可行性研究与计划&rdquo;阶段后制定的。所以软件项目计划是可行性研究阶段的结果产品。但由于可行性研究是在高层次进行系统分析，未能考虑软件系统开发的细节情况，因此软件项目计划一般在需求分析阶段完成后才定稿的。软件项目计划包括两个任务：研究与估算。即通过研究确定该软件项目的主要功能、性能和系统界面。 </p>
<p><strong>软件工程规范</strong>可选用现成的各种规范，也可自己制定。目前软件工程规范可分为三级：国家标准与国际标准；行业标准与工业部门标准；企业级标准与开发小组级标准。 </p>
<p><strong>风险分析</strong>实际上就是贯穿在软件工程中的一系列风险管理步骤，其中包括风险识别、风险估计、风险管理策略、风险解决和风险监督。 </p>
<p><strong>软件配置管理，</strong>简称SCM，它用于整个软件工程过程。其主要目标是：标识变更；控制变更；确保变更正确地实现；报告有关变更。SCM是一组管理整个软件生存期各阶段中变更的活动。软件配置项（SCI）是软件工程中产生的信息项。 </p>
<p>软件工程过程中某一阶段的<strong>变更</strong>，均要引起软件配置的变更，这种变更必须严格加以控制和管理，保持修改信息，并把精确、清晰的信息传递到软件工程过程的下一步骤。 <strong>变更控制</strong>包括建立控制点和建立报告与审查制度。其中&ldquo;检出&rdquo;和&ldquo;登入&rdquo;处理实现了两个重要的变更控制要素，即存取控制和同步控制。存取控制管理各个用户存取和修改一个特定软件配置对象的权限。同步控制可用来确保由不同用户所执行的并发变更。 </p>
<p><strong>软件工程标准</strong>的类型也是多方面的。它可能包括过程标准（如方法、技术、度量等）、产品标准（如需求、设计、部件、描述、计划报告等）、专业标准（如职别、道德、准则、认证、特许、课程等），以及记法标准（如术语、表示法、语言等）。 根据软件工程标准制定的机构与适用的范围，它分为国际标准、国家标准、行业标准、企业规范及项目（课题）规范五个等级。 </p>
<p><strong>软件开发环境</strong>是指相关的一组软件工具集合，它支持一定的软件开发方法或按照一定的软件开发模型组织而成。 <strong>软件开发环境的目标</strong>是提高软件开发的生产率和软件产品的质量。因而理想的软件开发环境应是能支持整个软件生存期阶段的开发活动，并能支持各种处理模型的软件方法学，同时实现这些开发方法的自动化。 </p>
<p><strong>分类：</strong>按解决的问题分类：程序设计环境；系统合成环境；项目管理环境。 按软件开发环境的演变趋向分类：以语言为中心的环境；工具箱环境；基于方法的环境。 按集成化程度分类：第一代；第二代；第三代。 </p>
<p><strong>软件工具</strong>是指为支持计算机软件的开发、维护、模拟、移植或管理而研制的程序系统。开发软件工具的主要目的是为了提高软件生产率和改善软件的质量。 软件工具通常由工具、工具接口和工具用户接口三部分构成。工具通过工具接口与其他工具、操作系统或网络操作系统，以及通信接口、环境信息库接口等进行交互作用。当工具需要与用户进行交互作用时则通过工具的用户接口。 <strong>软件工具的发展有以下特点：</strong> <br />
1软件工具由单个工具向多个工具集成化方向发展。 <br />
2重视用户界面的设计 <br />
3不断地采用新理论和新技术。 <br />
4软件工具的商品化推动了软件产业的发展，而软件产业的发展，又增加了对软件工具的需求，促进了软件工具的商品化进程。 </p>
<p><strong>CASE</strong>是一组工具和方法的集合，可以辅助软件开发生命周期各阶段进行软件开发。CASE把软件开发技术、软件工具和软件开发方法集成到一个统一而一致的框架中，并且吸收了CAD、软件工程、操作系统、数据库、网络和许多其他计算机领域的原理和技术。 <strong>CASE系统所涉及到的技术有两类</strong>：一类是支持软件开发过程本身的技术，如支持规约、设计、实现、测试等；另一类是支持软件开发过程管理的技术，如支持建模、过程管理等。 </p>
<p><strong>CASE集成：</strong> <br />
1平台集成：工具运行在相同的硬件/操作系统平台上。 <br />
2数据集成：工具使用共享数据模型来操作。 <br />
3表示集成：工具提供相同的用户界面。 <br />
4控制集成：工具激活后能控制其他工具的操作。 <br />
5过程集成：工具在一个过程模型和&ldquo;过程机&ldquo;的指导下使用。 <br />
<u>数据集成</u>指不同软件工程能相互交换数据。因而，一个工具的结果能作为另一个工具的输入。有许多不同级别的数据集成：1共享文件；2共享数据结构；3共享仓库。 <u>表示集成</u>或用户界面集成意指一个系统中的工具使用共同的风格，以及采用共同的用户交互标准集。工具有一个相似的外观。目前，表示集成有如下三种不同级别：窗口系统集成；命令集成；交互集成。 <u>控制集成</u>支持工作台或环境中一个工具对系统中其他工具的访问。 <u>过程集成</u>意指CASE系统嵌入了关于过程活动、阶段、约束和支持这些活动所需的工具的知识。 一个<strong>CASE工作台</strong>是一组工具集，支持像设计、实现或测试等特定的软件开发阶段。工作台工具能通过共享文件、共享仓库或共享数据结构来集成。</p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/76979#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 May 2007 14:47:00 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/76979</link>
        <guid>http://javacoming.javaeye.com/blog/76979</guid>
      </item>
      <item>
        <title>软件工程</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/76976" style="color:red;">http://javacoming.javaeye.com/blog/76976</a>&nbsp;
          发表时间: 2007年05月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font color="#333399">软件开发的内容是：需求、设计、编程和测试！</font></p>
<p>需求：不仅仅是用户需求，应该是开发中遇到的所有的需求。比如，你首先要知道做这个项目是为了解决什么问题；测试案例中应该输入什么数据......为了清楚地知道这些需求，你经常要和客户、项目经理等交流。</p>
<p>设计：编码前，肯定有个计划告诉你要做什么，结构是怎样等等。你一定要按照这个来做，否则可能会一团糟。</p>
<p>编程：如果在项目截止日，你的程序不能跑起来或达不到客户的要求，你就拿不到钱。</p>
<p>测试：目的是让你知道，什么时候算是完成了。如果你聪明，你就应该先写测试，这样可以及时知道你是否真地完成了。否则，你经常会不知道，到底有哪些功能是真正完成了，离预期目标还差多远。&nbsp;</p>
<p>软件开发中，客户和开发人员都有自己的基本权利和义务。<br />
客户：<br />
　　定义每个用户需求的商业优先级；<br />
　　制订总体计划，包括用多少投资、经过多长时间、达到什么目的；<br />
　　在项目开发过程中的每个工作周，都能让投资获得最大的收益；<br />
　　通过重复运行你所指定的功能测试，准确地掌握项目进展情况；<br />
　　能随时改变需求、功能或优先级，同时避免昂贵的再投资；能够根据各种变化及时调整项目计划；<br />
　　能够随时取消项目；项目取消时，以前的开发工作不是一堆垃圾，已开发完的功能是合乎要求的，正在进行或未完成的的工作则应该是不难接手的。</p>
<p>开发人员：<br />
　　知道要做什么，以及要优先做什么；<br />
　　工作有效率；<br />
　　有问题或困难时，能得到客户、同事、上级的回答或帮助；<br />
　　对工作做评估，并根据周围情况的变化及时重新评估；<br />
　　积极承担工作，而不是消极接受分配；<br />
　　一周40小时工作制，不加班。&nbsp;</p>
<p><font color="#333399">软件开发过程可以包括以下6个阶段：</font></p>
<p><font color="#333399">计划</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对所要解决的问题进行总体定义，包括了解用户的要求及现实环境，从技术、经济和社会因素等3个方面研究并论证本软件项目的可行性，编写可行性研究报告，探讨解决问题的方案，并对可供使用的资源（如计算机硬件、系统软件、人力等）成本，可取得的效益和开发进度作出估计。制订完成开发任务的实施计划。</p>
<p><font color="#333399">分析</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件需求分析就是回答做什么的问题。它是一个对用户的需求进行去粗取精、去伪存真、正确理解，然后把它用软件工程开发语言（形式功能规约，即需求规格说明书）表达出来的过程。本阶段的基本任务是和用户一起确定要解决的问题，建立软件的逻辑模型，编写需求规格说明书文档并最终得到用户的认可。需求分析的主要方法有结构化分析方法、数据流程图和数据字典等方法。本阶段的工作是根据需求说明书的要求，设计建立相应的软件系统的体系结构，并将整个系统分解成若干个子系统或模块，定义子系统或模块间的接口关系，对各子系统进行具体设计定义，编写软件概要设计和详细设计说明书，数据库或数据结构设计说明书，组装测试计划。</p>
<p><font color="#333399">设计</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件设计可以分为概要设计和详细设计两个阶段。实际上软件设计的主要任务就是将软件分解成模块是指能实现某个功能的数据和程序说明、可执行程序的程序单元。可以是一个函数、过程、子程序、一段带有程序说明的独立的程序和数据，也可以是可组合、可分解和可更换的功能单元。模块，然后进行模块设计。概要设计就是结构设计，其主要目标就是给出软件的模块结构，用软件结构图表示。详细设计的首要任务就是设计模块的程序流程、算法和数据结构，次要任务就是设计数据库，常用方法还是结构化程序设计方法。</p>
<p><font color="#333399">编码</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件编码是指把软件设计转换成计算机可以接受的程序，即写成以某一程序设计语言表示的&quot;源程序清单&quot;。充分了解软件开发语言、工具的特性和编程风格，有助于开发工具的选择以及保证软件产品的开发质量。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当前软件开发中除在专用场合，已经很少使用二十世纪80年代的高级语言了，取而代之的是面向对象的开发语言。而且面向对象的开发语言和开发环境大都合为一体，大大提高了开发的速度。</p>
<p><font color="#333399">测试</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 软件测试的目的是以较小的代价发现尽可能多的错误。要实现这个目标的关键在于设计一套出色的测试用例（测试数据和预期的输出结果组成了测试用例）。如何才能设计出一套出色的测试用例，关键在于理解测试方法。不同的测试方法有不同的测试用例设计方法。两种常用的测试方法是白盒法测试对象是源程序，依据的是程序内部的的逻辑结构来发现软件的编程错误、结构错误和数据错误。结构错误包括逻辑、数据流、初始化等错误。用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果。白盒法和黑盒法依据的是软件的功能或软件行为描述，发现软件的接口、功能和结构错误。其中接口错误包括内部/外部接口、资源管理、集成化以及系统错误。黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。黑盒法。</p>
<p><font color="#333399">维护</font></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 维护是旨在已完成对软件的研制（分析、设计、编码和测试）工作并交付使用以后，对软件产品所进行的一些软件工程的活动。即根据软件运行的情况，对软件进行适当修改，以适应新的要求，以及纠正运行中发现的错误。编写软件问题报告、软件修改报告。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一个中等规模的软件，如果研制阶段需要一年至二年的时间，在它投入使用以后，其运行或工作时间可能持续五年至十年。那么它的维护阶段也是运行的这五年至十年期间。在这段时间，人们几乎需要着手解决研制阶段所遇到的各种问题，同时还要解决某些维护工作本身特有的问题。做好软件维护工作，不仅能排除障碍，使软件能正常工作，而且还可以使它扩展功能，提高性能，为用户带来明显的经济效益。然而遗憾的是，对软件维护工作的重视往往远不如对软件研制工作的重视。而事实上，和软件研制工作相比，软件维护的工作量和成本都要大得多。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在实际开发过程中，软件开发并不是从第一步进行到最后一步，而是在任何阶段，在进入下一阶段前一般都有一步或几步的回溯。在测试过程中的问题可能要求修改设计，用户可能会提出一些需要来修改需求说明书等。<br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/76976#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 May 2007 14:24:32 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/76976</link>
        <guid>http://javacoming.javaeye.com/blog/76976</guid>
      </item>
      <item>
        <title>GPS、GIS的全概述</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/54622" style="color:red;">http://javacoming.javaeye.com/blog/54622</a>&nbsp;
          发表时间: 2007年02月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4">GPS全球定位系统叫做Global Position System开头字母的缩写。它是美国从上世纪70年代开始研制，历时20年，耗资近200亿美元，于1994年全面建成的利用导航卫星进行测时和测距，具有在海、陆、空进行全方位实时三维导航与定位能力的新一代卫星导航与定位系统。它是继阿波罗登月计划、航天飞机后的美国第三大航天工程。如今，GPS已经成为当今世界上最实用，也是应用最广泛的全球精密导航、指挥和调度系统。 　　二、GPS发展历程　　GPS实施计划共分三个阶段：　　第一阶段为方案论证和初步设计阶段。从1973年到1979年，共发射了4颗试验卫星。研制了地面接收机及建立地面跟踪网。　　第二阶段为全面研制和试验阶段。从1979年到1984年，又陆续发射了7颗试验卫星，研制了各种用途接收机。实验表明，GPS定位精度远远超过设计标准。　　第三阶段为实用组网阶段。1989年2月4日第一颗GPS工作卫星发射成功，表明GPS系统进入工程建设阶段。1993年底实用的GPS网即（21+3）GPS星座已经建成，今后将根据计划更换失效的卫星。　　三、GPS组成　　GPS系统主要包括有三大组成部分即空间星座部分、地面控制部分和用户设备部分。　　GPS系统的空间部分由24颗GPS工作卫星所组成，这些GPS工作卫星共同组成了GPS卫星星座，其中21颗为可用于导航的卫星，3颗为活动的备用卫星，均匀分布在6个轨道面上，地面高度为20000余公里，轨道倾角为55度，扁心率约为0，周期约为12小时，卫星向地面发射两个波段的载波信号，载波信号频率分别为1.57542GHz（L1波段）和1.2276GHz（L2波段），卫星上安装了精度很高的原子钟（铯钟或氢钟其稳定度可达10-12至10-14量级。），以确保频率的稳定性，在载波上调制有表示卫星位置 的广播星历，用于测距的C/A代码和P代码，以及其它系统信息，能在全球范围内，向任意多用户提供高精度的、全天候的、连续的、实时的三维测速、三维定位和授时。每颗卫星在L波段的两个频率上(L1=1.57542GHz,L2=1.2276GHz)连续发射用C/A代码、P代码调制的扩频信号。为了接收来自卫星的信息，GPS接收机必须了解各个卫星的固有代码。使用在标准测位用叫做C/A代码，为了补足高精度测位所使用的P代码，也使用了C/A代码。所谓C/A是Clear and Acquisition或Coarce and Acquisition的简称，P是Precision或Protect的意思。　　C/A代码每1ms重复一次(位率1.023MHz,L2上不用)。P代码(主要为军用)每七天重复一次（位率10.23MHz），卫星发射功率约35W因此到达地面的信号强度可达-105&mdash;&mdash;-125dbm。　　地面控制部分是整个系统的中枢，由美国国防部JPO管理，它由分布在全球的一个主控站、三个信息注入站和五个监测站组成。对于导航定位来说，GPS卫星是一动态已知点。卫星的位置是依据卫星发射的星历&mdash;&mdash;描述卫星运动及其轨道的参数算得的。每颗GPS卫星所播发的星历，是由地面监控系统提供的。卫星上的各种设备是否正常工作，以及卫星是否一直沿着预定轨道运行，都要由地面设备进行监测和控制。地面监控系统另一重要作用是保持各颗卫星处于同一时间标准&mdash;&mdash;GPS时间系统。这就需要地面站监测各颗卫星的时间，求出时钟差。然后由地面注入站发给卫星，卫星再由导航电文发给用户设备。GPS的空间部分和地面监控部分是用户广泛应用该系统进行导航和定位的基础，均为美国所控制。　　用户设备部分主要由以无线电传感和计算机技术支撑的GPS卫星接收机和GPS数据处理软件构成。GPS卫星接收机能够捕获到按一定卫星高度截止角所选择的待测卫星的信号，并跟踪这些卫星的运行，对所接收到的GPS信号进行变换、放大和处理，以便测量出GPS信号从卫星到接收机天线的传播时间，解译出GPS卫星所发送的导航电文，实时地计算出观测站的三维位置，甚至三维速度和时间，最终实现利用GPS进行导航和定位的目的。　　四、GPS测量原理　　GPS定位是利用三点定位原理，即知道未知点距离已知点的距离，未知点必然位于以已知点为球心的，距离为半径的球上，测出未知点和三个已知点的距离，则未知点在三个球圆周的相交处（为两个点时，因有接收方向，故有一个处于接收背面的点可以舍去），从而准确的测出未知点的位置。　　GPS接收机收到来自卫星无线电波的信号，根据电波到达所需要的时间，测出距卫星的距离（s=t&times;c距离，t为电波到达的时间，c是电磁波的速度约为3000000米/秒）。测量与时间有着极大的关系，先介绍一下时间有关的术语。　　原子时：1967年10月的第13次国际度量衡总会中，规定铯原子钟作为决定国际性时间的基本标准器。简单的说，是规定铯原子的振动频率为9.192631770GHz，以此种频率为基准，来表示刻划的时刻叫做原子时。由于铯原子振动频率稳定度极高（如前述能达到10-12至10-14量级），能达到三万年相差不超过一秒的时间精度。　　星历：精确描述天体（如GPS卫星）位置的以时间为变量的函数的一组参数。目前，GPS星历有&ldquo;广播星历&rdquo;和后处理的&ldquo;精密星历&rdquo;。测量精度很大程度上取决于时间精度，这也是卫星上搭载了原子钟的原因，为了准确地得到电磁波到达的时间，需要GPS接收机也要有同样高精度的时间，为了把接收机制造成小型和价廉起见，不可能使用昂贵的原子钟。解决方法是，追加另一颗卫星的信息，来寻求正确的时间，这样一来，为了进行正确的测位，必须接收来自四颗卫星的电磁波，目前，多数导航是通过这种方法实现的。　　 五、GPS的信号　　 GPS卫星发射两种频率的载波信号，即频率为1575.42MHz的L1载波和频率为1227.60HMz的L2载波，它们的频率分别是基本频率10.23MHz的154倍和120倍，它们的波长分别为19.03cm和24.42cm。在L1和L2上又分别调制着多种信号，这些信号主要有：C/A代码：C/A代码又被称为粗捕获码，它被调制在L1载波上，是1MHz的伪随机噪声码（PRN码），其码长为1023位（周期为1ms）。由于每颗卫星的C/A代码都不一样，因此，我们经常用它们的PRN号来区分它们。C/A代码是普通用户用以测定测站到卫星间的距离的一种主要的信号。 　　P代码：P代码又被称为精码，它被调制在L1和L2载波上，是10MHz的伪随机噪声码，其周期为七天。在实施AS时，P代码与W代码进行模二相加生成保密的Y代码，此时，一般用户无法利用P代码来进行导航定位。 　　Y代码：见P代码。　　导航信息：导航信息被调制在L1载波上，其信号频率为50Hz，包含有GPS卫星的轨道参数、卫星钟改正数和其它一些系统参数。用户一般需要利用此导航信息来计算某一时刻GPS卫星在地球轨道上的位置，导航信息也被称为广播星历。 　　六、GPS定位方法　　GPS定位的方法是多种多样的，用户可以根据不同的用途采用不同的定位方法。GPS定位方法可依据不同的分类标准，作如下划分： 　　l 根据定位所采用的观测值 　　伪距定位：伪距定位所采用的观测值为GPS伪距观测值，所采用的伪距观测值既可以是C/A代码伪距，也可以是P代码伪距。伪距定位的优点是数据处理简单，对定位条件的要求低，不存在整周模糊度的问题，可以非常容易地实现立即寻址；其缺点是观测值精度低，C/A 代码伪距观测值的精度一般为30米，而P代码伪距观测值的精度一般也在3米左右，从而导致定位成果精度低，另外，若采用精度较高的P代码伪距观测值，还存在AS的问题。 　　载波相位定位：载波相位定位所采用的观测值为GPS的载波相位观测值，即L1、L2或它们的某种线性组合。载波相位定位的优点是观测值的精度高，一般优于2个毫米；其缺点是数据处理过程复杂，存在整周模糊度的问题。　　l 根据定位的模式　　绝对寻址：绝对寻址又称为单点定位，这是一种采用一台接收机进行定位的模式，它所确定的是接收机天线的绝对坐标。这种定位模式的特点是作业方式简单，可以单机作业。绝对寻址一般用于导航和精度要求不高的应用中。 　　相对定位：相对定位又称为差分定位，这种定位模式采用两台以上的接收机，同时对一组相同的卫星进行观测，以确定接收机天线间的相互位置关系。 　　l 根据获取定位结果的时间　　立即寻址：立即寻址是根据接收机观测到的资料，实时地解算出接收机天线所在的位置。 　　 非立即寻址：非立即寻址又称后处理定位，它是通过对接收机接收到的资料进行后处理以进行定位得方法。 　　 l 根据定位时接收机的运动状态 　　 动态定位：所谓动态定位，就是在进行GPS定位时，认为接收机的天线在整个观测过程中的位置是变化的。也就是说，在数据处理时，将接收机天线的位置作为一个随时间的改变而改变的量。动态定位又分为Kinematic和Dynamic两类。 　　静态定位：所谓静态定位，就是在进行GPS定位时，认为接收机的天线在整个观测过程中的位置是保持不变的。也就是说，在数据处理时，将接收机天线的位置作为一个不随时间的改变而改变的量。在测量中，静态定位一般用于高精度的测量定位，其具体观测模式多台接收机在不同的测站上进行静止同步观测，时间由几分钟、几小时甚至数十小时不等。　　 七、GPS应用　　 GPS最初为美国军方所专用，由其控制和操作。海湾战争后，开放了C/A代码，并且降低了它的精度。尽管如此，GPS全天候向全球瞬时提供高精度定位及时间信息，引起了全世界的强烈兴趣。各国科技工作者研究出种种方法，如相位法、差分测量法等等，大大提高了测量结果的精度，满足了各国广泛应用的要求，同时也推动了GPS导航定位技术的迅速发展，下面是GPS在一些典型应用：n 高空科学气球GPS跟踪定位系统n 移动车辆GPS自动定位技术n 3GPS精密计时n 利用GPS技术确定地球卫星轨道n 舰船、飞机的导航定位n 导弹的精确制导目前，全球定位系统已广泛应用于军事和民用等众多领域中。下面以它在交通运输系统中的运用为例，简要说明一下：　　1、 GPS在道路工程中的应用　　GPS在道路工程中的应用，目前主要是用于建立各种道路工程控制网及测定航测外控点等。随着高等级公路的迅速发展，对勘测技术提出了更高的要求，由于线路长，已知点少，因此，用常规测量手段不仅布网困难，而且难以满足高精度的要求。目前，国内已逐步采用GPS技术建立线路首级高精度控制网，如沪宁、沪杭高速公路的上海段就是利用GPS建立了首级控制网，然后用常规方法布设导线加密。实践证明，在几十公里范围内的点位误差只有2cm左右，达到了常规方法难以实现的精度，同时也大大提前了工期。　　2、 GPS在汽车导航和交通管理中的运用　　三维导航是GPS的首要功能，飞机、船舶、地面车辆以及步行者都可利用GPS导航接收器进行导航。汽车导航系统是在全球定位系统GPS基础上发展起来的一门新型技术。汽车导航系统由GPS导航、自律导航、微处理器、车速传感器、陀螺传感器、CD&mdash;ROM驱动器、LCD显示器组成。　　GPS导航是由GPS接收机接收GPS卫星信号（三颗以上），求出该点的经纬度坐标、速度、时间等信息。为提高汽车导航定位精度，通常采用差分GPS技术。当汽车行驶到地下隧道、高层楼群、高速公路等遮掩物而与捕获不到GPS卫星信号时，系统可自动导入自律导航系统，此时由车速传感器检测出汽车的行进速度，通过微处理单元的数据处理，从速度和时间中直接算出前进的距离，陀螺传感器直接检测出前进的方向，陀螺仪还能自动存储各种资料，即使在更换轮胎暂时停车时，系统也可以重新设定。　　由GPS卫星导航和自律导航所测到的汽车位置坐标资料、前进的方向都与实际行驶的路线轨迹存在一定误差，为修正这两者的误差，与地图上的路线统一，需采用地图匹配技术，加一个地图匹配电路，对汽车行驶的路线与电子地图上道路误差进行实时相关匹配作自动修正，此时地图匹配电路是通过微处理单元的整理程序进行快速处理，得到汽车在电子地图上的正确位置，以指示出正确行驶路线。CD-ROM用于存储道路资料等信息，LCD显示器用于显示导航的相关信息。GPS导航系统与电子地图、无线电通信网络及计算机车辆管理信息系统相结合，可以实现车辆跟踪和交通管理等许多功能，这些功能包括：l 车辆跟踪 l 提供出行路线规划和导航l 信息查询l 话务指挥l 紧急援助　　GPS除了用于导航、定位、测量外，由于GPS系统的空间卫星上载有的精确时钟可以发布时间和频率信息，因此，以空间卫星上的精确时钟为基础，在地面监测站的监控下，传送精确时间和频率是GPS的另一重要应用。全球定位系统GPS是近年来开发的最具有开创意义的高新技术之一，其全球性、全能性、全天候性的导航定位、定时、测速优势必然会在诸多领域中得到越来越广泛的应用。　　八、导航的概念　　导航是一个技术门类的总称，它是引导飞机、船舶、车辆以及个人（总称作运载体）安全、准确地沿着选定的路线，准时到达目的地的一种手段。导航的基本功能是回答：我现在在哪里？我要去哪里？如何去？ 　　九、导航系统概念　　导航应由导航系统完成，包括装在运载体上的导航设备以及装在其它地方与导航设备配合使用的导航台。从导航台的位置来看，主要有： 陆基导航系统： 即导航台位于陆地上，导航台与导航设备之间用无线电波联系。星基导航系统：导航台设在人造卫星上，扩大覆盖范围。GPS导航系统属于星基导航系统。　　十、主要导航系统简介在卫星定位系统出现之前，远程导航与定位主要用无线导航系统。1、 无线电导航系统&Oslash; 罗兰--C：工作在100KHZ，由三个地面导航台组成，导航工作区域2000KM，一般精度200-300M。&Oslash; Omega（奥米茄）：工作在十几千赫。由八个地面导航台组成，可覆盖全球。精度几英里。&Oslash; 多卜勒系统：利用多卜勒频移原理，通过测量其频移得到运动物参数（地速和偏流角），推算出飞行器位置，属自备式航位推算系统。误差随航程增加而累加。缺点：覆盖的工作区域小；电波传播受大气影响；定位精度不高。2、 卫星定位系统&Oslash; 最早的卫星定位系统是美国的子午仪系统（Transit），1958年研制，64年正式投入使用。由于该系统卫星数目较小（5-6颗），运行高度较低（平均1000KM），从地面站观测到卫星的时间隔较长（平均1.5h），因而它无法提供连续的实时三维导航，而且精度较低。&Oslash; 全球导航卫星系统GLONASS：GLONASS是GLObal NAvigation Satellite System(全球导航卫星系统)的字头缩写，是前苏联从80年代初开始建设的与美国GPS系统相类似的卫星定位系统，也由卫星星座、地面监测控制站和用户设备三部分组成。现在由俄罗斯空间局管理。GLONASS系统从理论上有24颗卫星，但由于卫星使用寿命和资金紧张等问题，实际上的可用卫星远远少于24，目前有8颗供使用的卫星。GLONASS系统的卫星星座由24颗卫星组成，均匀分布在3个近圆形的轨道平面上，每个轨道面8颗卫星，轨道高度19100公里，运行周期11小时15分，轨道倾角64.8&deg;。与美国的GPS系统不同的是GLONASS系统采用频分多址(FDMA)方式，根据载波频率来区分不同卫星（GPS是码分多址（CDMA），根据调制码来区分卫星）。每颗GLONASS卫星发播的两种载波的频率分别为L1=1,602+0.5625k(MHz)和L2=1,246+0.4375k(MHz)，其中k=1～24为每颗卫星的频率编号。所有GPS卫星的载波的频率是相同，均为L1=1575.42MHz和L2=1227.6MHz。GLONASS卫星的载波上也调制了两种伪随机噪声码：S代码和P代码。俄罗斯对GLONASS系统采用了军民合用、不加密的开放政策。GLONASS系统单点定位精度水平方向为16m，垂直方向为25m。另外，俄计划将系统发播频率改为GPS的频率，并得到美罗克威尔公司的技术支持。下表是GPS与GLONASS的比较：项目 GPS系统 GLONASS系统星座卫星数 24 24轨道面个数 6 3轨道高度 20183公里 19100公里运行周期 11小时58分 11小时15分轨道倾角 55度 65度载波频率 L1:1575.42MHz L1:1602.56-1615.50MHzL2:1227.60MHz L2:1246.44-1256.50MHz传输方式 码分多址 频分多址调制码 C/A代码和P代码 S代码和P代码时间系统 UTC UTC坐标系统 WGS-84 SGS-E90SA 有（2000年5月1日取消） 无AS 有 无GPS系统的建立给导航和定位技术带来了巨大的变化，它从根本上解决了人类在地球上的导航和定位问题，可以满足不同用户的需要。十、GPS优点GPS的问世标志着电子导航技术发展到了一个更加辉煌的时代。GPS系统与其它导航系统相比，主要特点有如下六个方面。 1、定位精度高GPS可为各类用户连续地提供高精度的三维位置、三维速度和时间信息。2、观测时间短随着GPS系统的不断完善，软件的不断更新，目前，20km以内相对静态定位，仅需15～20min；快速静态相对定位测量时，当每个流动站与基准站相距在15km以内时，流动站观测时间只需1～2min，然后可随时定位，每站观测只需几秒钟，立即寻址速度快。目前GPS接收机的一次定位和测速工作在1s甚至更小的时间内便可完成，这对高动态用户来讲尤其重要。 3、执行操作简便随着GPS接收机不断改进，自动化程度越来越高，有的已达&ldquo;傻瓜化&rdquo;的程度；接收机的体积越来越小，重量越来越轻，极大地减轻测量工作者的工作紧张程度和劳动强度。使野外工作变得轻松愉快。4、全球、全天候作业由于GPS卫星数目较多且分布合理，所以在地球上任何地点均可连续同步地观测到至少4颗卫星，从而保障了全球。全天候连续实时导航与定位的需要。目前GPS观测可在一天24h内的任何时间进行，不受阴天黑夜、起雾刮风、下雨下雪等气候的影响。5、功能多、应用广GPS系统不仅可用于测量、导航，还可用于测速、测时。测速的精度可达0.1m/s，测时的精度可达几十毫微秒。其应用领域不断扩大。十一、汽车GPS导航系统与汽车GPS防盗系统GPS防盗车安全系统是GPS与通信技术结合，对移动的车辆进行监控，通过中心控制台确定车辆的移动方位。当汽车失窃时，可以报由中心控制台来发现其逃跑路线，进而实施截获，也是GPS的一种实际运用，目前国内有多家从事GPS防盗系统开发、生产的厂家。汽车GPS导航系统则是GPS与GIS（地理信息系统）、语音技术、操作系统、数据库、多媒体技术及多种测量技术等相结合的产物。移动车辆接收来自GPS的定位信号，并在数字化的电子地图上显示出来，并通过语音提示，对驾驶者进行道路指引。　　GIS概述　　一、GIS的定义　　GIS是地理信息系统 (Geographic information System)的简写，它是一套可以整合各项相关地理资料的信息化操作系统,其架构于一完整丰富的地理数据库之上,并具有资料撷取、编修、更新、储存、查询、处理、分析及展示等不同功能。举例如都市信息系统、土地监控系统、地籍信息系统、交通信息系统及环境监控系统、流域管理系统等等,皆属于地理信息系统的一环。就GIS系统所处理的资料来说,我们可以简单的将其分类为空间数据与属性数据二种。　　空间资料(Spatial Data)是与地理位置有关的资料,一般来说是以坐标的方式来表示,如经纬度坐标、世界横麦卡托坐标皆是。　　属性资料(Attribute Data)则是与地理位置无关的资料,如街道名称、河川名称/长度、或与地籍有关的地号、地目、所有人等等均属此类。　　在空间资料中的各个对象,彼此之间有其空间关联性,再加上空间资料与属性资料之间的连结关系,也就构成一个GIS系统兼具查询、显示、分析、数据管理等之多功能、效率高之整合性系统。　　二、地图的本质　　地图是一种储存地理资料的工具，目前保留下来的最早期地图，就是为了记录土地的所有权而制作的。我们可以由地图上量取地面的一些性质或是一组地理现象之间彼此的关联性；地图是一种以图像的方式，来呈现地球上的现象；地图是一个地方的图画，而这个图画显示了物体在哪里；地图可以表现房间里的物；地图可以表现城镇中的房子、建筑 物和街道；地图可以表现县市或国家中的城镇、湖泊和山脉；地图还可以表现我们居住地方许多其它的东西。　　地图是许多决策支持分析时的重要工具，有许多作业是野外的现场所无法进行分析的，例如：坡度的计算、视域图的计算等，都有赖于图面上的分析。在进行环境影响评估的时候，我们可以由图面上的作业来分析那些地区是冲击比较大；那些是冲击比较小的。随着环境问题的日益严重，有关于自然环境的分析及研究成为众所瞩目的问题，地图的使用是自然环境分析时的利器，可以解决许多问题，所以地图的使用也日形重要，不再是地理学者的专利，可以预见的是地图的分析功能越来越重要。　　不论在旅行、航海、储存资料、研究、环境规划、野外实习等都可使用地图来作为辅助的工具。　　三、地图的分类　　每一张地图都是一种真实世界的缩影，在地图和真实世界之间也就存在着一个比例，依据这一个比例的大小，可以将地图分成大比例、中比例和小比例地图。　　大小比例尺并没有一定的定义，根据每一个国家的幅员大小、社会经济条件而有不同的定义。　　一般而言，大于1：50,000的地图，都可以称为大比例尺地图，亦即一般普通目的地图都落在这一类。相对的，主题地图大都是小比例尺的地图，如台湾地区的气候图等。　　四、地图学的数学问题　　地图是用来表现地理现象的一种模型，所以绘制地图的第一个工作是调查地面现象的实际情形，诸如这些现象分布的位置、形状、面积、距离等等，都是所要调查的空间特性资料。　　地理现象的位置是所有空间特性的基础，有了位置资料我们就可以进一步求算距离、面积、形状等，和地图绘制非常相关的一个工作就是测量，测量工作的目的在于调查和记录空间资料的位置。　　为了记录测量的结果，我们必须要有一套坐标系统，使得地表上的任一个地点都有独特的坐标值，如此我们才可以明确地记录各种地理现象的位置，如：海岸线位置、国界、测站的位置等，然后才可以进一步将这些现象绘制在地图上。　　五、投影　　绘图之前，地图学者必须依据所欲绘制地区的范围和图面的大小来决定一个比例尺，这个比例尺可以视为绘图所依据的地球仪和实际地球之间的比例。　　比例尺决定之后，绘图者必须想办法将地球仪上面的球面位置转绘成地图上的平面坐标。这是一个比较棘手的问题，因为地球的外形近似于一个球体，无法原原本本的被转换成平面，必须加以拉扯、变形之后，才可能转换到平面上的坐标。以科学性的叙述而言，这个工作是将地球仪上的几何现象投影到一个平面上，所以我们称这种转换为地图投影。　　地图学者已发明了三百种左右的投影方法。从球面上转换成平面的过程，我们没有办法将球面上的所有几何性质都完整地保留至平面上，所以每个投影方法一定都有一些扭曲或变形，亦即有它的优点和缺点，绘图者可以依据制图目的和需要来选择一个合适的方法，读图的时候也必须了解各种投影的意义和它的变形程度，才能充分掌握地图上的信息。　　六、经度与纬度的定义　　根据地球的形状和转动的方向，古代的希腊人发明了以经线和纬线来界定地球表面位置的坐标系统。　　这套系统以南极、北极和赤道作为基准。南北极则是地球的旋转和地表相交的二个端点，那么赤道又是什么呢？我们可以想象有一个很大的平面，它通过地球的中心，而且与地球的旋转轴垂直，这一个平面和地球表面切割出来的圈就是赤道。　　如果我们以二个数值来表现地面上任一地点的坐标值，那么其中一个可以由距离赤道的远近来界定，这个值也就是纬度，我们以赤道的纬度为零，赤道以北为北纬，赤道以南为南纬，距离赤道越近的地方纬度就越小，南北极的纬度最大，各为九十度。　　经线是和赤道垂直相交的一组线，从南极连接至北极。纬度是用来界定地面上任一地点的南北方向的值，经度则是用来定义东西向的值，由于地球一圈是360度，所以全世界的经度也分成360度。</font></p>
<p align="right"><font size="4">摘自：<a href="http://www.blogms.com/" target="_blank"><font color="#0000ff">敏思博客</font></a></font></p>
<p><br />
</p>
          <br/>
          <span style="color:red;">
            <a href="http://javacoming.javaeye.com/blog/54622#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 Feb 2007 23:43:47 +0800</pubDate>
        <link>http://javacoming.javaeye.com/blog/54622</link>
        <guid>http://javacoming.javaeye.com/blog/54622</guid>
      </item>
      <item>
        <title>GPS系统应用现状及前景分析</title>
        <author>javacoming</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://javacoming.javaeye.com">javacoming</a>&nbsp;
          链接：<a href="http://javacoming.javaeye.com/blog/54621" style="color:red;">http://javacoming.javaeye.com/blog/54621</a>&nbsp;
          发表时间: 2007年02月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font size="4">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全球卫星定位系统（GPS）是美国国防部70年代初在&ldquo;子午仪卫星导航定位&rdquo;技术上发展起来的，具有全球性、全能性（陆地、海洋、航空与航天）、全天候性优势的导航、定位、定时、测速系统。GPS最初用于军事目的，后来该技术也逐步向民间开放使用。在当今发达国家，GPS技术已广泛应用于交通运输和道路工程等领域，极大地提高了他们的生产效率。GPS系统的功能正如GPS业界的权威所说&ldquo;GPS的应用只受人们想象力的限制&rdquo;。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我国民用GPS技术引入已有一段时间，主要应用于智能交通管理、特种车辆的定位导航等方面。道路运输行业是GPS的一个主要应用领域，在美国GPS最成功的民用就是在交通运输行业。然而由于道路运输传统技术改造进展缓慢，以及对GPS技术的了解不充分等种种原因，该技术在行业内的应用情况并不理想，资源利用率较低，远远不能满足道路运输企业管理的需要。尤其是目前GPS技术的开发与生产厂商较多，而国家还没有统一的产品标准，致使市场上各种产品的质量和功能参差不齐，价格差别较大,且各系统之间的兼容性不高，很大程度上造成企业投资的浪费。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 浙江省道路运输行业应用GPS系统只有3年时间，粗略估计全省已经安装此系统的营运汽车不足3000辆，市场刚进入起步阶段，机遇和挑战并存。目前全省汽车保有量为约250万辆，其中营运车辆约27万辆。经过市场调查分析，基本确定可以安装GPS系统的目标车辆约10万辆，主要包括客运车辆、公交车、出租车和货运车辆。目前，浙江省的部分高速、快客、危险品运输车辆和出租车已安装了GPS系统，应用效果良好。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在约10万辆目标车辆中，长途客车安装应用GPS较早，其主要安装对象为高速、快速和旅游客运车辆，已经在行业内大面积推广，因此下一步待安装数量较小；公交车只有在电子车牌配合应用下才能发挥GPS系统的作用，推广应用还有待时机成熟；因此出租车和货车成为最主要的目标市场。今后，市场成熟后还可向私家车领域扩展。据了解，美国通用汽车公司已拟定2005年后将GPS作为出厂轿车的标配。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GPS系统信号传输有公共通信网和专用通信网两种主要途径，专用通信网主要包括大区制常规无线电台（异频单工电台）通信系统和集群电台通信系统等，公共通信网主要包括公用移动通信网（GSM、GPRS）、CDPD无线数据网通信系统、短波电台通信方式和卫星通信方式等。各种通信方式各有优势，应用中具体采用何种方式，可根据应用的范围及对通信的实时性、准确性等要求综合考虑。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 目前实际应用中GPS信号传输主要通过公用移动通信网，即GSM和GPS两种途径。GPRS作为最近发展起来的一项新技术无论在实时性、准确性、经济性等方面体现出了较大优势。特别是出租车对调度功能要求较高，利用GPRS技术可以实现最快速、最准确、最优化的调度，从而大大提高车辆载客（货）率，进而转化为明显的经济效益。据了解，上海大众出租汽车公司已经安装了采用GPRS技术的GPS系统，首期、二期分别装了150辆和500辆，利用其先进的调度功能使载客率提高了38％。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GPS系统提供商的利润主要由两部分组成：车载设备和平台月租费。车载设备根据产品型号和功能的不同市场价格为3000～5000元/台左右，营运商利润为10％左右；平台月租费的高低取决于所采用的通讯方式