自 习 控 团 队 项 目 设 计 报 告 竞 赛 名 称 : 华 中 农 业 大 学 互 联 网 应 用 技 能 竞 赛 项 目 名 称 : 基 于 Android 的 校 园 自 习 教 室 app 开 发 报 告 名 称 : 自 习 控 团 队 项 目 设 计 报 告 指 导 老 师 : 黄 慧 专 业 班 级 : 信 管 1201,1202,1401 小 组 成 员 : 肖 玮 :2012308200712 卢 兴 威 :2012306202306 张 良 翼 :2014315200530
一 团 队 组 织 结 构 介 绍 与 分 工 1. 团 队 名 称 : 自 习 控 2. 团 队 成 员 : 组 长 : 肖 玮 ( 信 管 1201) 组 员 : 卢 兴 威 ( 信 管 1202) 张 良 翼 ( 信 管 1401) 3. 团 队 分 工 : 肖 玮 : 进 行 软 件 主 体 设 计, 服 务 器 的 搭 建 及 关 键 代 码 设 计 卢 兴 威 : 进 行 app 界 面 设 计, 文 档 报 告 的 编 写 等 张 良 翼 : 进 行 数 据 库 数 据 的 编 写 与 设 计,UI 美 化 等 二 技 术 路 线 项 目 说 明 : 简 单 的 Android 应 用 程 序 通 过 webservice 连 接 sqlserver 数 据 库, 具 有 进 行 简 单 登 陆 查 询 功 能 其 中 Andriod 应 用 程 序 为 前 台,iis 上 发 布 的 访 问 数 据 库 的 webservice 为 后 台 Android 端 :Eclipse+ADT 开 发, 采 用 Java 编 程 服 务 器 端 :Microsoft Visual Studio 2010 开 发 Webservice, 采 用 C# 构 造 类 数 据 库 :SQL Server Management Studio 发 布 :iis7.0 三 实 现 方 案 流 程 和 原 理 3.1 各 平 台 环 境 的 搭 建 3.1.1 SQL Server 开 始 在 MySQL 与 sqlserver 之 间 犹 豫 数 据 库 的 选 择, 因 MySQL 中 Doc 式 建 表 较 为 繁 琐, 决 定 采 用 Sql Server Sqlserver 配 置 较 为 简 单, 以 本 机 服 务 器 作 为 数 据 库 引 擎, 我 的 本 机 名 为 jambingocci 3.1.2 VS 由 于 先 前 信 息 系 统 开 发 与 设 计 实 习 周 采 用 VS 进 行 设 计, 因 此 很 大 程 度 上 有 所 熟 悉 Webservice 只 需 新 建 ASP.NET Web 服 务 应 用 程 序 项 目 即 可 3.1.3 IIS 由 于 先 前 网 站 设 计 与 开 发 实 习 周 采 用 IIS 进 行 过 发 布, 因 此 很 多 设 置 与 环 境 已 经 搭 建 3.1.4 Eclipse + ADT 由 于 步 骤 复 杂 繁 多, 需 要 安 装 的 程 序 众 多, 且 资 源 下 载 难 度 等 问 题, 此 为 环 境 搭 建 中 的 重 点 与 难 点 基 本 步 骤 主 要 如 下 : 1 JDK 安 装 与 环 境 变 量 Path 的 设 置 2 Eclipse 安 装 3 Android SDK 安 装 4 ADT 安 装 由 于 谷 歌 一 些 服 务 器 国 内 无 法 下 载,Android SDK 的 更 新 与 ADT 的 下 载 出 现 困 难 因 此 最 终 我 们 还 是 有 幸 搜 索 到 了 一 个 集 成 好 ADT 的 Eclipese 下 载, 并 且 在 修 改 了 Option 中 的 端 口 号 与 解 析 地 址 之 后,SDK 才 能 够 正 常 下 载, 虽 然 下 载 速 度 非 常 缓 慢 在 经 过 近 一 个 周 的 环 境 搭
建 之 后, 终 于 能 够 成 功 在 模 拟 器 中 运 行 HelloWorld 程 序 3.2 建 造 数 据 库 3.2.1 数 据 库 名 称 :TeachingBuilding 表 设 计 表 名 称 :Date01_01 Date01_02... 等 ( 统 一 为 Date+ 当 日 时 间 格 式 ) 表 说 明 : 列 名 中 文 名 称 数 据 类 型 必 填 说 明 Classroom 教 室 名 varchar(50) V 主 键 C12 12 节 课 varchar(50) C34 34 节 课 varchar(50) C56 56 节 课 varchar(50) C78 78 节 课 varchar(50) C910 910 节 课 varchar(50) C1112 1112 节 课 varchar(50) 部 分 数 据 如 下 : classroom c12 c34 c56 c78 c910 c1112 二 教 304 空 有 课 空 有 课 有 课 有 课 二 教 305 空 空 有 课 空 有 课 有 课 三 教 A101 有 课 有 课 有 课 有 课 有 课 空 三 教 A102 有 课 空 有 课 有 课 空 空 3.2.2 数 据 库 名 称 :UserCheck 表 设 计 表 名 称 :UserInfo 表 说 明 : 列 名 中 文 名 称 数 据 类 型 必 填 说 明 username 用 户 名 varchar(50) V password 密 码 varchar(50) V ID 编 号 Int V 主 键 部 分 数 据 如 下 : username password ID admin 123 1 jambingocci 1234 2 3.3 建 造 服 务 器 经 过 查 阅 大 量 资 料, 尤 其 是 参 考 android 开 发 与 应 用 ( 人 民 邮 电 出 版 社 张 荣 编 ) 后, 决 定 使 用 webservice 作 为 服 务 器 工 程, 而 没 有 采 用 tomcat 3.3.1WebService 建 造 步 骤 : 1. 新 建 ASP.NET Web 服 务 应 用 程 序 项 目 2. 构 建 与 sqlserver 数 据 库 的 连 接
3. 编 写 *.asmx 文 件, 创 建 方 法 3.3.2 Webservice 项 目 名 称 :ClassroomManageWebServices Service1.asmx 分 别 调 用 了 教 室 查 询 的 7 个 方 法 : public class Service1 : System.Web.Services.WebService DBOperation dboperation = new DBOperation(); [WebMethod] public string HelloWorld() String time = DateTime.Now.ToString("MM_dd"); return time; [WebMethod(Description = " 获 取 所 有 教 室 的 信 息 ")] public string[] selectallinfor() if (dboperation.selectallinfor().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.selectallinfor().toarray(); [WebMethod(Description = "1-2 节 课 信 息 ")] public string[] searchclassroom12() if (dboperation.selectallinfor().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom12().toarray(); [WebMethod(Description = "3-4 节 课 信 息 ")] public string[] searchclassroom34() if (dboperation.searchclassroom34().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom34().toarray(); [WebMethod(Description = "5-6 节 课 信 息 ")] public string[] searchclassroom56() if (dboperation.searchclassroom56().toarray() == null)
return dboperation.dbnull().toarray(); else return dboperation.searchclassroom56().toarray(); [WebMethod(Description = "7-8 节 课 信 息 ")] public string[] searchclassroom78() if (dboperation.searchclassroom78().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom78().toarray(); [WebMethod(Description = "9-10 节 课 信 息 ")] public string[] searchclassroom910() if (dboperation.searchclassroom910().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom910().toarray(); [WebMethod(Description = "11-12 节 课 信 息 ")] public string[] searchclassroom1112() if (dboperation.searchclassroom1112().toarray() == null) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom1112().toarray(); DBOperation.cs:( 以 selectallinfor() 方 法 为 例, 使 用 SQL 语 言 进 行 查 询, 并 将 结 果 放 入 一 个 List<string> 数 组 集 合 中 ): public DBOperation() String time = DateTime.Now.ToString("MM_dd"); List<string> listnull = new List<string>() " 数 据 库 发 生 错 误 = =" ; // 数 据 库 返 回 null 值 提 醒 函 数 public List<string> dbnull() List<string> lstnull = new List<string>() "sorry", "database", "empty" ; return lstnull; public List<string> selectallinfor()
"; List<string> list = new List<string>(); try string sql = "select classroom,c12,c34,c56,c78,c910,c1112 from Date"+time+" SqlCommand cmd = new SqlCommand(sql,sqlCon); SqlDataReader reader = cmd.executereader(); while (reader.read()) // 将 结 果 集 信 息 添 加 到 返 回 向 量 中 list.add(reader[0].tostring()); list.add(reader[1].tostring()); list.add(reader[2].tostring()); list.add(reader[3].tostring()); list.add(reader[4].tostring()); list.add(reader[5].tostring()); list.add(reader[6].tostring()); reader.close(); cmd.dispose(); catch(exception) return listnull; return list; 3.3.3 Webservice 项 目 名 称 :login 本 Webservice 没 有 像 上 面 那 个 一 样 新 建 了 一 个 类 进 行 方 法 调 用, 而 是 采 用 了 LINQ to SQL 类, 大 大 减 少 了 代 码 量, 只 需 要 将 数 据 表 直 接 拖 入 LINQ 即 可 然 后 再.asmx 文 件 直 接 进 行 方 法 调 用 WS_Base.asmx: public class WS_Base : System.Web.Services.WebService public String AuthenticateLogin(string username, string password)/// 形 参 为 用 户 名 和 登 录 密 码 using (WS_DataBaseDataDataContext context = new WS_DataBaseDataDataContext()) var user = from userrow in context.userinfo where userrow.username == username && userrow.password == password
select userrow; return user.count() > 0? "true" : "false"; 3.3.4 Webservice 发 布 采 用 文 件 系 统 的 发 布 方 法, 目 标 位 置 与 iis 网 站 文 件 位 置 相 同 3.4 IIS 发 布 与 网 页 配 置 3.5 Android 应 用 程 序 开 发 与 设 计 总 设 计 思 想 : 登 陆 界 面 - 验 证 登 陆 - 按 钮 查 询 界 面 - 连 接 教 室 数 据 库 查 询 - 查 询 结 果 3.6 软 件 调 试 详 见 软 件 测 试 部 分 四 设 计 与 功 能 4.1 数 据 库 设 计 与 功 能
4.2 服 务 器 设 计 与 功 能 4.2.1 教 室 数 据 库 查 询 服 务 (service1 web) 其 中 方 法 设 计 如 下 : HelloWorld searchclassroom1112 11-12 节 课 信 息 searchclassroom12 1-2 节 课 信 息 searchclassroom34 3-4 节 课 信 息
searchclassroom56 5-6 节 课 信 息 searchclassroom78 7-8 节 课 信 息 searchclassroom910 9-10 节 课 信 息 selectallinfor 获 取 所 有 教 室 的 信 息 Xml 解 析 :
4.2.2 登 陆 数 据 库 验 证 服 务 其 中 方 法 设 计 如 下 : AuthenticateLogin HelloWorld
登 陆 判 断 :( 我 设 置 的 返 回 值 为 String 格 式 的 true 和 false, 方 便 soap 解 析 ) LINQ 新 建 项 :
4.2.3Webservice 连 接 sql server 数 据 库 : 4.3.4Webservice 发 布
4.3 IIS 设 计 4.4 Android app 设 计 与 功 能 登 陆 界 面 的 输 入 控 制 与 登 录 验 证 :
一 下 5 图 分 别 为 : 输 入 条 件 有 问 题 密 码 数 据 库 验 证 错 误 当 前 网 络 无 法 连 接 WEBSERVICE 验 证 后 登 陆 成 功 连 接 时 进 度
主 界 面 (frontpage):
五 系 统 测 试 方 案 5.1 黑 盒 法 测 试 : 案 例 1: 软 件 崩 溃 :
崩 溃 情 况 说 明 : 在 点 击 1-2,3-4 节 课 时 崩 溃, 而 其 他 button 无 报 错 报 错 原 因 : 空 指 针 异 常 (nullpointerexception) 错 误 推 测 ( 猜 错 法 ): 根 据 先 前 程 序 设 计 过 程 中 经 验, 遇 到 过 这 个 异 常, 猜 测 是 数 据 库 连 接 有 问 题, 于 是 检 查 服 务 器 情 况 检 查 webservice 服 务 器 : 5-6 节 课 服 务 器 返 回 xml 如 下 : Version:1.0 StartHTML:000000217 EndHTML:000003179 StartFragment:000000319 EndFragment:000003145 StartSelection:000000319 EndSelection:000003145 SourceURL:http://localhost:45290/Service1.asmx/searchClassroom56 <?xml version="1.0" encoding="utf-8"?> <ArrayOfString xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"><string> 二 教 101 </string><string> 三 教 A101 </string></arrayofstring> 显 示 连 接 数 据 库 成 功 ; 1-2 节 课 服 务 器 返 回 入 下 : Version:1.0 StartHTML:000000217 EndHTML:000002304 StartFragment:000000319 EndFragment:000002270 StartSelection:000000319 EndSelection:000002270 SourceURL:http://localhost:45290/Service1.asmx/searchClassroom12 <?xml version="1.0" encoding="utf-8"?> <ArrayOfString xmlns="http://tempuri.org/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"/> 意 为 数 据 库 或 读 取 失 败 进 一 步 猜 测 为 数 据 库 字 段 或 规 范 问 题 检 查 aqlserver 数 据 库 : 发 现 : 数 据 库 中 c12 c34 均 不 含 有 空 字 段, 使 得 webservice 向 程 序 返 回 null,soap 无 法 解 析 导 致 程 序 崩 溃 此 例 测 试 了 在 程 序 设 计 过 程 中 没 有 对 null 返 回 做 判 断 而 导 致 app 闪 退 修 改 如 下 : DBOperation.cs
创 建 dbnull 方 法 : public List<string> dbnull() List<string> lstnull = new List<string>() "sorry", "database", "empty" ; return lstnull; Service1.asmx if 语 句 进 行 判 断 : public string[] searchclassroom12() if (dboperation.searchclassroom12().toarray().equals(null)) return dboperation.dbnull().toarray(); else return dboperation.searchclassroom12().toarray(); 并 且 在 此 例 测 试 异 常 的 基 础 上, 引 申 将 每 一 个 数 据 库 调 用 函 数 添 加 异 常 catch: catch (Exception) List<string> listnull = new List<string>() " 数 据 库 发 生 错 误 = =" ; return listnull; 以 提 醒 用 户, 避 免 app 崩 溃, 提 高 程 序 健 壮 性 与 友 好 性 案 例 2: 数 据 不 能 正 常 显 示 边 界 值 分 析 : 我 们 将 记 录 数 增 加 至 100 条 以 上 时, 发 现 在 查 询 所 有 信 息 下 出 现 了 无 法 正 常 显 示 数 据 的 情 况 此 时 界 面 如 下 说 明 能 够 正 常 连 接 Webservice 与 数 据 库, 并 且 我 们 再 log 日 志 中 发 现 获 取 了 值 但 是 没 能 显 示 的 原 因 我 们 仍 然 没 有 找 到 错 误 推 测 : 1. 可 能 是 TextView 无 法 接 收 超 过 一 定 数 量 的 数 据 2. 可 能 采 用 的 adapter 适 配 器 方 式 无 法 接 收 超 过 一 定 数 量 的 数 据 由 于 时 间 原 因, 我 们 很 遗 憾 没 能 修 正 这 个 bug
5.2 测 试 概 要 项 目 测 试 从 2015 年 1 月 3 日 开 始 到 2015 年 1 月 6 日 结 束, 共 持 续 3 天, 测 试 功 能 点 13 个, 执 行 20 个 测 试 用 例, 平 均 每 个 功 能 点 执 行 测 试 用 例 1.5 个, 测 试 共 发 现 27 个 bug, 其 中 严 重 级 别 的 bug6 个, 无 效 bug3 个, 平 均 每 个 测 试 功 能 点 2 个 bug 5.2.1 测 试 执 行 此 次 测 试 严 格 按 照 项 目 计 划 和 测 试 计 划 执 行, 按 时 完 成 了 测 试 计 划 规 定 的 测 试 对 象 的 测 试 针 对 测 试 计 划 规 定 的 测 试 策 略, 在 测 试 执 行 中 都 有 体 现, 在 测 试 执 行 过 程 中, 依 据 测 试 计 划 和 测 试 用 例, 对 系 统 进 行 了 完 整 的 测 试
5.2.2 测 试 用 例 功 能 性 自 习 控 app 基 本 实 现 了 登 陆 与 教 室 查 询 的 基 本 功 能, 达 到 前 台 与 后 台 的 有 序 正 常 运 作 易 用 性 操 作 按 钮 提 示 信 息 正 确 性, 一 致 性, 可 理 解 性 限 制 条 件 提 示 信 息 正 确 性, 一 致 性, 可 理 解 性 必 填 项 标 识 输 入 方 式 可 理 解 性 中 文 界 面 下 数 据 语 言 与 界 面 语 言 的 一 致 性 5.3 测 试 环 境 5.3.1 软 硬 件 环 境 硬 件 环 境 应 用 服 务 器 数 据 库 服 务 器 客 户 端 硬 件 配 置 CPU:Intel(R) Celeron(R) CPU : Intel(R) CPU:Intel(R) Celeron(R) CPU 2.40GHz stepping Celeron(R) CPU CPU 2.40GHz stepping 01 01 Memory: 1048256k HD:ST380817AS 80G 2.40GHz stepping 01 Memory: 1048256k HD:ST380817AS 80G Memory: 1048256k HD : ST380817AS 80G SATA SATA SATA 软 件 配 置 OS:CentOS 4.2 OS:CentOS 4.2 Window 2000 JDK 1.5.0_06 MySQL 5.0.17 Linux Professional ( SP2 ) Apache 2.2.0 IE6.0.2900.2180.xpsp_sp2 Tomcat 5.5.15 网 络 环 境 10M LAN 10M LAN 10M LAN 5.4 测 试 结 果 测 试 发 现 的 bug 主 要 集 中 在 normal 和 minor 阶 段, 属 于 一 般 性 的 缺 陷, 但 是 测 试 的 时 候, 出 现 了 6 个 严 重 级 别 的 bug, 出 现 严 重 级 别 的 bug 主 要 表 现 在 以 下 几 个 方 面 系 统 主 要 功 能 没 有 实 现 添 加 数 据 代 码 重 复 后, 出 现 的 找 不 到 页 面 的 错 误 多 语 言 处 理, 未 考 虑 非 语 种 代 码 的 情 况
数 据 库 设 计 未 考 虑 系 统 管 理 员 角 色, 导 致 用 系 统 管 理 员 进 行 操 作 的 时 候 出 现 找 不 到 页 面 错 误 权 限 控 制 异 常 严 重 级 别 的 bug 主 要 表 现 为 权 限 权 限 bug: 具 有 相 应 按 钮 操 作 的 权 限, 页 面 无 相 应 按 钮, 无 法 执 行 该 功 能 无 相 应 按 钮 操 作 权 限, 页 面 有 相 应 按 钮, 点 击 按 钮 能 出 现 权 限 异 常 错 误 有 相 应 按 钮 操 作 权 限, 有 相 应 按 钮, 执 行 该 功 能 出 现 权 限 异 常 错 误