软件工程实践

宇文学博
2023-12-01

 

 

软件工程实践报告

07-5

 

吴猛

2010/1/12

 

 

此次实践共分为四个实践部分,涵盖软件开发工程的主要模块、过程,并掌握开发过程中相关软件的使用。

 


 

实践  利用Visio绘制DFD

根据所选系统,利用Visio绘制系统相关的DFD图。

实验学时:8学时

实验要求:

         1.可以采用结构化方法对所选系统进行需求分析;

         2.采用Visio绘制系传统的DFD图;

         3.提交绘制的图形和实验报告。

 

一、背景:

家庭的管理已经成为人们关注的焦点,家庭的收入和支出是一个零碎而又切身利益相关的问题。这款基于B/S模式的系统将有效地解决这一繁琐问题,帮助用户管理财务信息,并提供其他一些附加功能。

家庭财务管理系统是在家庭对自家管理信息系统急迫需求的情况下着手开发的。它可以帮助一个家庭记录收入和支出的情况,并可以通过报表来获得家庭人员在一段时期内的支出和收入信息,生成的报表可以任意的定义类型,比如某段时间的固定日常开支记录等。另外,系统可根据生成的统计数据分析用户的财务状况,提供可行的解决方案。

 

二、绘制DFD

21绘制顶层DFD

家庭财务管理系统的主要模块是进行日常收支的登记,并将家庭在某段时间内的收支信息反馈给家庭成员,让家庭成员及时地了解自己在近期的财务状况。对此我们可绘制出顶层的DFD图:

 

1.1 0DFD

 

22绘制第一层DFD

根据家庭财务管理系统的要求,我们将该系统分为4个模块,分别为:登录模块、收支登记模块和处理报表模块。这里为了便于登陆模块的使用,我们又添加了另一个模块:注册模块,用于填充新的用户。

1.2 第一层DFD

 

 

23绘制第二层DFD

        注册子系统是用户初次使用时首先遇到的部分,添加新用户、新用户信息等。

        登陆子系统中如果发现系统中不存在该用户,则转入到注册子系统,登陆成功后,用户便可进入到主界面,进而完成自己相关的操作。

        收支登记子系统是用户经常接触的操作,完成账户信息的更新。包括统计信息(对收支记录进行统计汇总)、自动记账和个人设置。其中个人设置和自动记账是自动记账模块的集中体现,用户在设置个人信息时,将日常固定收支计入其中,如每日伙食费、水电费、工资、房租等等,如此系统会根据此设置信息自动进行账户信息的更新,以便节约用户频繁的收支登记,方便了用户的使用。

        处理报表子系统可根据用户的要求信息生成各类报表,如关于最近一段时间的开支信息、大额的支出记录、超支记录等,用户根据报表可很好的了解自己财务上的信息。系统也可根据数据的统计信息作出有效地预期,如一年的收入走势、日常开支走势、其它支出走势等,以便提供可能的预测信息,供用户参考。

      

 

 

 

 

1.3 第二层DFD---注册子系统

 

1.4 第二层DFD---登陆子系统

 

 

1.5 第二层DFD---收支处理子系统

 

 

1.6 第二层DFD----生成报表子系统

 

 

 

 

数据字典

相应的数据条目如下:

F1:账户信息表

文件名

账户基本信息表

组成

{账号+户名+身份证号+性质+账户开通日期}

组织

按账号从小到大排列

备注

 

 

F2:账户信息表

文件名

账户信息表

组成

{日期+账号+收(支)款额+摘要+余额}

组织

按日期从小到大排列

备注

收(支)款额用正(负)数表示

 

F3:个人设置信息表

文件名

个人设置信息表

组成

{账号+账户名+{收支款项+金额+摘要}}

组织

按账号从小到大排列

备注

 

 

F4:收支记录表

文件名

收支记录表

组成

{账号+{日期+存(取)款额+摘要}}

组织

按账号、日期从小到大排列

备注

存(取)款额用正(负)数表示

 

F5:报表统计信息

文件名

报表统计信息

组成

{日期+账号+账户名+统计类型}

组织

按日期从小到大排列

备注

 

 

 

 

 

 

 

 

 

 

 

 

 

 

实践 UML工具的使用

学习Rational RoseStarUML等工具,针对所选系统进行模型分析和设计,完成用例图、类图、序列图、状态图、活动图等图形的绘制。

实验学时:16学时

实验要求:

1.下载、安装Rational RoseStarUML等工具软件,学习软件使用;

         2.绘制用例图、类图、序列图、状态图、活动图等图形针对所选系统进行模型分析和设计。

 

一、软件介绍及相关

本实例采用Rational Rose工具软件进行面向对象系统模型的分析和设计。这是一个功能强大的软件开发集成环境,包含系统建模、源代码生成、系统测试、软件文档生成等功能。其包含四个视图:用例视图、逻辑视图、构建视图和部署视图。

用例视图:包含系统中的所有参与者、用例和用例图,主要使用者是客户、分析人员和项目管理员。分析软件的功能和测试软件都会用到用例模型。

逻辑视图:提供系统详细描述,包括类、类图、时序图、状态图等,面向人员是设计人员和构架师。其是对用例功能实现的实现。

构建视图:包含模型代码库、执行文件、运行库和其他组件的信息,主要面向负责控制代码和变异部署应用程序的人。

部署视图:显示网络上的进程以及其相互间的实际连接。

二、各类系统模型设计图

1、用例图

   用例图是UML的静态建模机制之一,用以描述系统应该做什么,即外在功能,是一种面向对象需求建模方法。本系统称为家庭个人财务管理系统,功能较为简单,是为财务管理的一个扩充。

系统参与者为:用户(主要参与者)、内部系统(维护信息)和银行系统(外来参与者)。

系统用例:

1.1注册

1.2登陆

1.3选择账户

1.4收支登记

1.5大额支出

1.6个人设置

1.7自动记账

1.8生成通知、报表

1.9汇率变更

1.10注销

2.1 “家庭个人财务管理系统用例图

 

 

2、类图

    在面向对象建模技术中,类和对象模型揭示了系统的静态结构,是UML的静态建模机制之一。

类与类之间包含的关系有:关联、聚集、泛化、依赖以及组合。

2.1用户和账户是关联关系,且一个用户可以拥有多个账户。

2.2现金账户和卡账户是对账户的一种泛化结果。

2.3用户设置信息是“用户”对象的一部分,构成聚集关系

2.4支出登记和收入登记分别和收支登记是组合关系。

2.5账户信息表的实现依赖于接口(get Database)。

2.2 类图

3、序列图

   序列图又称时序图,是按时间顺序描述系统元素之间的交互。元素中包括一些实体类、边界类和控制类,每一个用例都对应一个事件流,都可构成一个时序图。这里节选了其中几个用例用以描述元素间的交互。

3.1用例一 登陆

2.3 “登陆”时序图

3.2用例二 收支登记(支出登记)和自动记账

2.4 “收支登记和自动记账”时序图

3.3用例三 生成报表

2.5 “生成报表”时序图

4、状态图

状态图用来描述一个特定对象的所有可能状态以及引起其他状态转移的事件。一般来说,状态图表示单个对象在其生命周期中的行为。

这里描述了报表建立的状态图,包含四个状态:建立新表单、验证信息、操作无效和报表建立。事件的发生导致状态的转移,比如,如果验证信息出现错误,状态“验证信息”会自身转移,再次接受用户的信息输入,直至验证正确或是因为超时或是超过次数而转移到“操作无效”,进而退出,结束其生命周期。

2.6 状态图实例

5、活动图

   活动图可以用来描述操作(类的方法)行为,或是描述用例和对象内部的工作工程。通常是多个用例或是对象的复杂行为。

  下面表述的是上例报表生成状态图的扩展。

2.7 活动图实例

6、构件图和部署图

   两者是基于物理架构层次的建模,详细描述系统的软件和硬件,包括软件的代码模块的物理结构和硬件不同结点间的连接关系等等。是将前面得到的逻辑架构映射到物理结构。

   构件图:显示软件构件之间的依赖关系。也就是各种实际文件(包括源代码文件、可执行文件等)的联系。

   部署图:描述了系统硬件的物理拓扑结构以及在此文件上执行的文件。

2.8 构件图

    

2.9 部署图

实践三 软件源代码管理

实验学时:4学时

实验要求:学习基于系统工具进行源代码版本管理

实验要求:

1.下载、安装SVNTrac等工具软件,学习软件使用;

2.对所选系统的源代码进行版本管理。

 

一、源代码管理工具之一 SVN

SVN是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库 (repository) 中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。

11软件安装

软件安装需要服务器端软件和客户端软件,

12软件日常使用

包括一般操作等

121建立用户、组以及档案库(记录数据改变)

 

122用户上传文件

123导入建立的test2档案库中

124上传服务器成功

125下载文件

      新建一个文件夹,从服务器上导入档案库中我们需要的所有文件。

导入成功之后的文件夹(2

126本地更改文件后提交文件时我们可以选择多种操作

 

 

 

127本地查看版本信息

 

 

128查看版本更新详情,并选择下载新版本

 

129使用Blame查看当前版本与任意版本的差别

 

 

 

1210利用Revision Graph查看与此文件相关的版本信息

 

 

1211通过Browser查看档案库

 

 

二、源代码管理工具之一 Trac

Trac是一种开放源码网页界面专案管理、缺陷追踪软件。

主要功能包括:项目管理 (Roadmap, Milestones)、追踪系统 (缺陷追踪、任务 等)、最近活动的时间轴、Wiki、可定制的报告、版本控制系统的web接口等。

通过Subversion集成,开发者可在Trac中以Web方式浏览代码库中各个版本的代码和代码的修改历史,并可方便地比较各个版本间的差别。

管理员身份登陆后,我们可以对项目的相关信息更改,如ComponentsMilestonesTicket TypesVersion

 

21 Wiki

Wiki是一个协同写作平台或者称之为开放编辑系统,即它允许所有人修改它的网页。支持常用的Wiki语法。同时增加了许多bug管理的专用标记,可以方便地创建到ticket、代码行甚至修改历史的链接。

 

23 Ticket

Trac中,项目中出现的问题称为ticket。像bug、功能改进等都可以写成一个ticket

可设置ticket的优先级别。

可以设置ticket的里程碑,表明这个ticket应在何时完成,并能够通过条形图方式显示里程碑的完成度。

 

View Ticket:

根据一定条件列出相应的Ticket,如列出所有ActiveTicket、根据Milestone列出所有ActiveTicket、我的Ticket等等。

 

可以自定义条件生成bug报告,并可以通过SQL语句自定义报告的格式。

 

 

24 Timeline

 Timeline即时间线,用来查看由谁在什么时候进行的更改

 

25 RoadMap

用来查看工作进度,(根据包含的Ticket的完成情况)。

26 Browse Source

  即浏览源代码

 

实践四  使用软件测试工具

学习WebstressNUnit等各类软件测试工具,及Test Manager测试管理工具,针对所选系统实现情况,编写测试计划、设计测试用例,掌握软件自动测试方法。

实验学时:4学时

实验要求:

1.下载、安装WebstressNUnitTest Manager等工具软件,学习软件使用;

         2.运用NUnit工具软件进行白盒测试用例设计及自动测试;

         3.运用Webstress工具软件进行性能自动测试;

         4.了解Test Manager测试管理工具的使用方法。

 

一、网站相关测试-----------Webstress

Webstress是一个网站压力自动测试的工具。用它可以很好的对建设的网站性能进行测试,内容包括点击命中率、错误率、服务器带宽、服务器响应时间以及网络带宽等。这里采用了一个本地服务器上的网站。

网站名:中国防雷技术网站 (local

URL192.168.248.128

通过模拟用户访问,可以对这个网站进行较为全面的测试。

11软件使用

主界面:

4.1 Webstress界面

 

12单击测试后,软件会自动测试,并生成相关报告

13测试得到的总体结果(未联网,故Google访问失败)

 

 

 

 Results per URL

URL No.

Name

Clicks

Errors

Errors [%]

Time Spent [ms]

Avg. Click Time [ms]

1

google

23

23

100.00

0

 

2

中国防雷技术网站

28

0

0.00

3,212

115

 

 

 

14得到的每个用户点击的详情

 

Results per User

User No.

Clicks

Hits

Errors

Avg. Click Time [ms]

Bytes

kbit/s

Cookies

1

6

5

0

2,253

0

0.00

 

2

7

6

0

123

124,140

1,342.26

 

3

6

5

0

2,313

0

0.00

 

4

7

6

0

113

124,140

1,458.88

 

5

6

5

0

2,367

0

0.00

 

6

7

6

0

106

124,140

1,564.90

 

7

6

5

0

2,406

0

0.00

 

8

7

6

0

120

124,140

1,385.04

 

9

5

5

1

2,453

0

0.00

 

10

6

5

0

111

103,450

1,497.48

 

 

 

 

15点击次数和请求失误次数

 

 

 

16点击时间、点击率以及命中率

 

 

17网页分类资源响应时间

 

 

 

18用户等待网页时间

 

 

 

19请求的发送、接受数和网络负载关系

 

 

110系统内存、网络负载以及CPU负载

 

 

111服务器端的网络带宽和用户端的平均网络带宽

 

 

 

 

112服务器地址解析以及本地套接字响应时间等

 

 

 

二、白盒测试 -------NUnit

21了解软件

     主界面:

 

22编写测试用例

本次测试采用的是C#语言,在VS2008NUnit集成在一起,完成测试工作。首先,新建一个测试工程,用来编写我们的测试用例。另外,我们要在vs2008上修改工程的属性,更改Debug的选项,便于我们的使用,如下所示:

 

编写测试用例:

221便于我们测试,新建一个类Calculator

namespace NUnitTest

{

    public class Calculator

    {

        public int Add(int a, int b){}   

        public int Minus(int a, int b){}

        public int Multiply(int a, int b){}

        public int Divide(int a, int b){}

        static void Main(string[] args)

        {

            Calculator cal = new Calculator();

            int result = cal.Add(2, 3);

            Console.WriteLine(result);

        }

    }

}

222建立我们的测试类,要加上库文件引用和命名空间等

using NUnit.Framework;

using NUnitTest;

             然后编写我们的测试类CalculatorTest1

其中[TestFixture]来说明该类有测试目标,[Test]表示要测试的方法,[Category]用来分类测试。

[TestFixture]

public class CalculatorTest1

{

    [Test]

    public void TestAdd()

    {

        Calculator cal = new Calculator();

        int expected = 5;

        int actual = cal.Add(2, 3);

        Assert.AreEqual(expected, actual);

    }

  

   //其它测试等等

  

    [Test,Category("边界测试")]

    public void TestOther()

    {

        int expected = 0;

        int n = 4;

        int[,] arrayInt = new int[n + 1,n + 1];

        for (int i = 4; i > 0;i-- )

        {

            for (int j = 4; j > 0;j-- )

            {

                arrayInt[i,j] = 0;

            }

        }

        Assert.AreEqual(expected, arrayInt[0,0]);

    }

    [Test,Category("字符串")]

    public void TestOther2()

    {

        int expected = 20;

        string myString = "my first Test here.";

        Assert.AreEqual(expected, myString.Length);

    }

}

           为了便于测试的编写,我们修改上述测试代码,使用下列语句,使得每次方法测试时,都恢复测试环境,使用[SetUp]重建测试环境,[TearDown]来销毁环境

    [SetUp]

    public void SetUp()

    {

        cal = new Calculator();

        a = 10;

        b = 0;

    }

    [TearDown]

    public void TearDown()

    {

        cal = null;

                   }

        这样,我们就可以使用上面的测试环境来进行测试了,如

    [Test]

    public void TestAdd()

    {

        expected = 10;

        actual = cal.Add(a, b);

        Assert.AreEqual(expected, actual);

}

       另外,我们也可以[ignore(“忽略”)]来忽略当前的方法测试,使用[Category(“Category A”)],我们可以很好的选择我们要测试的方法,如我们要测试“边界测试”和“Category B”两个分类,则测试结果如下:

 

三、测试管理 -------Test Manager

Rational Test Manager是针对测试活动管理、执行和报告的中央控制台。它是为可扩展性而构建的,支持的范围从纯人工测试方法到各种自动化范型(包括单元测试、功能回归测试和性能测试)。

其解决了测试和测试资产管理的复杂性,将自动化引入到测试实验室,解决了测试和测试资产管理的复杂性。Rational Test Manager让测试团队可以控制测试工作,通过自动化和简化关键任务来集中他们的精力。该工具允许团队执行、跟踪和测试应用程序所需的所有功能,以助于确保不对非关键性业务需求进行测试。

 

 类似资料: