草庐IT

NJUPT《软件工程(双语)》

Du1in9 2023-11-05 原文

1/3 考前复习

复习课笔记

https://wwb.lanzouh.com/iMVah06936ej

2/3 课堂练习

https://wwb.lanzouh.com/iWBdl05qw75g

https://wwb.lanzouh.com/ieaYZ05yjpti

https://wwb.lanzouh.com/i47ze05cy8je

3/3 实验报告

实验三:Software Unit Testing
  • 实验目的和要求

对 Java 单元测试有初步的了解,学会使用 Junit 编写自己的测试用例,掌握对被测试类进行测试的实现方法;了解轻量级的自动化工具 Selenium,学会使用 Selenium 进行网站自动化测试(选做)。

  • 实验环境

Eclipse、jdk1.8、chrome browser

  • 实验步骤

利用 Junit 编写测试用例,并对被测试类进行相关功能测试。
a) 验证 Book 类的 equals 方法;

Book.java:


package cn.edu.njupt;
public class Book {
    private String title;
    private double price;
    public Book(String title, double price) {
        this.title = title;
        this.price = price;
    }
    public boolean equals(Object object) {
        if(object instanceof Book){
            Book book=(Book)object;
            return getTitle().equals(book.getTitle())
                    && getPrice()==book.getPrice();
        }
        return false;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
}
BookTest.java:


package cn.edu.njupt;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class BookTest {
    private Book book1;
    private Book book2;
    @BeforeEach
    void setUp() {
        book1=new Book("ES",12.99);
        book2=new Book("The Grate",11.99);
    }
    @AfterEach
    void tearDown() {
        book1=null;
        book2=null;
    }
    @Test
    void testEquals() {
        assertFalse((book2.equals(book1)));
        assertTrue((book1.equals(book1)));
    }
}

B)设计 Triangle 类的测试用例,并进行测试。


Triangle.java:


package cn.edu.njupt;
public class Triangle {
    protected long lborderA=0;
    protected long lborderB=0;
    protected long lborderC=0;
    public Triangle(long lborderA, long lborderB, long lborderC) {
        this.lborderA = lborderA;
        this.lborderB = lborderB;
        this.lborderC = lborderC;
    }
    public static boolean isTriangle(Triangle triangle){
        boolean isTriangle=false;
        if((triangle.lborderA>0 && triangle.lborderA<=Long.MAX_VALUE/2)
                &&(triangle.lborderB>0 && triangle.lborderB<=Long.MAX_VALUE/2)
                &&(triangle.lborderC>0 && triangle.lborderC<=Long.MAX_VALUE/2))
            if((triangle.lborderA < (triangle.lborderB+triangle.lborderC))
                    &&(triangle.lborderB < (triangle.lborderA+triangle.lborderC))
                    &&(triangle.lborderC < (triangle.lborderB+triangle.lborderA)))
                    isTriangle=true;
        return isTriangle;
    }

    public static String getType(Triangle triangle){
        String strType="不是三角形";
        if(isTriangle(triangle)){
            if(triangle.lborderA==triangle.lborderB
                && triangle.lborderB==triangle.lborderC){
                strType="等边三角形";
            }
            else if((triangle.lborderA !=triangle.lborderB)
                &&(triangle.lborderB !=triangle.lborderC)
                &&(triangle.lborderA !=triangle.lborderC))
                strType="不等边三角形";
            else{
                strType="等腰三角形";
            }
        }
        return strType;
    }
}
TriangleTest.java:


package cn.edu.njupt;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class TriangleTest {
    private Triangle triangle1;
    private Triangle triangle2;
    private Triangle triangle3;
    private Triangle triangle4;
    private Triangle triangle5;
    private Triangle triangle6;
    @BeforeEach
    void setUp() {
        triangle1=new Triangle(3,3,3);
        triangle2=new Triangle(3,4,5);
        triangle3=new Triangle(3,3,5);
        triangle4=new Triangle(-1,3,5);
        triangle5=new Triangle(3,10,5);
        triangle6=new Triangle(3,3,5);
    }
    @AfterEach
    void tearDown() {
        triangle1=null;
        triangle2=null;
        triangle3=null;
        triangle4=null;
        triangle5=null;
        triangle6=null;
    }
    @Test
    void isTriangle() {
        assertTrue(Triangle.isTriangle(triangle6));
        assertFalse(Triangle.isTriangle(triangle4));
        assertFalse(Triangle.isTriangle(triangle5));
    }
    @Test
    void getType() {
        assertEquals("等边三角形",Triangle .getType(triangle1));
        assertEquals("不等边三角形",Triangle.getType(triangle2));
        assertEquals("等腰三角形",Triangle.getType(triangle3));
        assertEquals("不是三角形",Triangle.getType(triangle4));
    }
}

4、利用 Selenium 进行 Web 应用程序的自动化测试。(选做)
A)导入Selenium的jar包



B)下载对应Chrome浏览器版本的驱动



(要修改Demo.java中对应的路径)
C)编写demo类:
package king.test;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Demo1 {
    private WebDriver driver;

    @Before
    public void setUp(){
        //设置谷歌浏览器的驱动
        System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
        //启动谷歌浏览器
        driver=new ChromeDriver();
        //设置默认超时时间
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    }
    @After
    public void tearDown() throws Exception{
        //关闭浏览器
        driver.quit();
    }
    @Test
    public void test222() throws Exception{
        //打开测试页面
        driver.get("file:///E:/test.html");
        //通过id找到第一个输入框
        WebElement un =driver.findElement(By.id("un"));
        //第一个输入框输入aaa
        un.sendKeys("aaa");
        //通过id找到第二个输入框
        WebElement pw =driver.findElement(By.className("lala"));
        //第一个输入框输入bbb
        pw.sendKeys("bbb");
        //通过id找到第三个输入框
        WebElement co =driver.findElement(By.name("code"));
        //第一个输入框输入ccc
        co.sendKeys("ccc");
        Thread.sleep(2000);
        //找到页面中的所有的input标签
        List<WebElement> inputs=driver.findElements(By.tagName("input"));
        //获取第四个input标签
        WebElement btn = inputs.get(3);
        //点击按钮
        btn.click();
        Thread.sleep(3000);
    }
}

编写演示页面:test.html(要修改Demo.java中对应的路径)


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="Generator" content="EditPlus®">
    <meta name="Author" content="">
    <meta name="Keywords" content="">
    <meta name="Description" content="">
    <title>Document</title>
</head>
<body>
    <input id="un" class="css1" name="username">
    <input id="pw" class="css2 lala" name="password">
    <input id="co" class="css3" name="code"><br>
    <input type="button" id="btn" class="css4" name="submit" value="按钮">
    <script>
        document.getElementById('btn').onclick=function(){
            alert("haha");
        }
    </script>
</body>
</html>
实验四:Software Configuration management
  • 实验目的和要求

学会配置Visual SVN Server服务器与用户、用户组和权限,学会用客户端链接服务器端,掌握SVN 常用功能操作完成 svn 的添加、提交、更新、分支建立、合并等操作。

  • 实验环境

1、服务器端:Windows XP
XP 系统安装:https://www.jianshu.com/p/419eff3d6235
Visual SVN Server 选择老版本 2.7.5,下载链接:https://www.visualsvn.com/files/VisualSVN-Server-2.7.5.msi
2、客户端:Windows 10
TortoiseSVN 选择 WIN 32版本1.10.6 ,下载链接:https://tortoisesvn.net/downloads.html

  • 实验步骤

1、安装服务器端 Visual SVN Server



2、配置 SVN 服务器的用户、用户组和权限



3、客户端链接服务器端

4、SVN 常用功能操作
完成 svn 的添加、提交、更新、分支、合并等操作。


image.png

有关NJUPT《软件工程(双语)》的更多相关文章

  1. 软件测试基础 - 2

    Ⅰ软件测试基础一、软件测试基础理论1、软件测试的必要性所有的产品或者服务上线都需要测试2、测试的发展过程3、什么是软件测试找bug,发现缺陷4、测试的定义使用人工或自动的手段来运行或者测试某个系统的过程。目的在于检测它是否满足规定的需求。弄清预期结果和实际结果的差别。5、测试的目的以最小的人力、物力和时间找出软件中潜在的错误和缺陷6、测试的原则28原则:20%的主要功能要重点测(eg:支付宝的支付功能,其他功能都是次要的)80%的错误存在于20%的代码中7、测试标准8、测试的基本要求功能测试性能测试安全性测试兼容性测试易用性测试外观界面测试可靠性测试二、质量模型衡量一个优秀软件的维度①功能性功

  2. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  3. 【血泪建议】软件测试岗位现状,可惜之前没人告诉我,肠子都晦青了.... - 2

    谈到现状,国内的软件测试行情目前呈现了两极分化的极端情况。一个是早期的手工测试人员吐槽工作不好做,即使有工作也是外包,而且薪资太低;一方面是很多互联网企业感叹自动化测试人才难找,有技术的自动化测试工程师,高薪难聘。这两者其实并不矛盾。手工测试工作难找也确实是目前真实的行情早期从事功能测试的手工测试人员,在测试方面大多采用手动、人工执行的方式查找软件缺陷和BUG,用行业术语来描述就是“点点点”。这种测试方式耗费大量人力和资源,工作效率却十分低下。在早期软件复杂和迭代程度不高的情况下,有资本的企业会“供养”一批这样的手工测试人员。但对测试员本身来讲,毫无技术难度的工作,和几乎没有保障的薪资水平,直

  4. 0基础学习软件测试有哪些建议 - 2

    其实现在基础的资料和视频到处都是,就是看你有没有认真的去找学习资源了,去哪里学习都是要看你个人靠谱不靠谱,再好的教程和老师,你自己学习不进去也是白搭在正式选择之前,大可以在各种学习网站里面找找学习资源先自己学习一下为什么选择学软件测试?同学们理由众多!大概分这几类:①不受开发语言、行业产品变化限制;②入门更简单,对零基础、女生都友好;③软件项目都需要测试人员,职业生涯稳;④学习周期短,但薪资并不低。要想“肩扛”一条线?需掌握三大技能:技能1:掌握测试流程,熟悉系统框架能提前与开发人员一起制定测试计划,通过测试左移,推动代码评审,代码审计,单元测试,自动化冒烟测试,来保证研发阶段的质量。技能2:

  5. 华为认证的网络工程师证好考吗,含金量高吗 ? - 2

    华为认证分等级的,相当于初中高三个等级,当然高级是比较难考的,也是含金量最高的。我就慢慢给你介绍一下。1.了解华为认证华为认证网络工程师是由华为公司认证与采购部推出的独立认证体系,与之前的华为认证不同,简称HCIA。同时华为认证是华为技术有限公司凭借多年信息通信技术人才培养经验,以及对行业发展的理解,以层次化的职业技术认证为指引,推出的覆盖IP、IT、CT以及ICT融合技术领域的认证体系,是ICT全技术领域认证体系。​2.怎么考取华为认证网络工程师?要考取华为认证网络工程师必须选择最近的Prometric授权考试中心APTC报名并参加GB0-190的考试,考试通过后,以获得由华为统一签发的“华

  6. “网安三人行”盘点:软件供应链安全的那些事儿 - 2

    2022年伊始,默安科技联合数世咨询举办以“软件供应链安全的时与势”为主题的访谈活动,由数世咨询创始人李少鹏主持,邀请贝壳安全研发负责人李文鹏、北京邮电大学副教授张文博、默安科技副总裁沈锡镛三位行业大咖做客网安小酒馆,从产业、企业、学术的不同维度,共同探讨软件供应链安全建设的新思路,为业界呈现了一场开年网安盛宴。随着全球软件供应链安全事件频发,软件供应链安全逐渐成为业界关注焦点,也成为影响国家重要信息系统安全与关键信息基础设施安全的重要因素,以及网络安全保障体系和能力建设的重要环节。嘉宾们围绕软件供应链安全发展的主要驱动力、关基行业中的实施现状和落地难点、产学研成果转化、软件供应链安全的重要性

  7. 打通源码,高效定位代码问题|云效工程师指北 - 2

    大家好,我叫胡飞虎,花名虎仔,目前负责云效旗下产品Codeup代码托管的设计与开发。代码作为企业最核心的数据资产,除了被构建、部署之外还有更大的价值。为了帮助企业和团队挖掘更多源代码价值以赋能日常代码研发、运维等工作,云效代码团队在大数据和智能化方向进行了一系列的探索和实践(例如代码搜索与推荐),本文主要介绍我们如何通过直接打通源代码来提高研发与运维效率。随着微服务架构的流行,一个业务流程需要多个微服务共同完成。一旦出现问题,运维人员在面对数量多、调用链路复杂的情况下,很难快速锁定导致问题发生的罪魁祸首:代码。为了提高排查效率,目前常见的解决方案是:链路跟踪+日志分析工具相结合。即通过链路跟踪

  8. 软件工程毕业设计课题(81)微信小程序毕业设计PHP校园跑腿小程序系统设计与实现 - 2

        项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。        因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不

  9. ruby - Homebrew 软件损坏 - "cannot load such file -- vendor/bundle/bundler/setup (LoadError)" - 2

    每次我尝试运行brew命令时,都会出现以下错误:/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in`require':cannotloadsuchfile--vendor/bundle/bundler/setup(LoadError)from/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.3.7/lib/ruby/2.3.0/r

  10. ruby - 从我的胰岛素泵 Controller 逆向工程统计数据文件 - 2

    这可能是也可能不是灰色地带主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。我是1型糖尿病患者,目前正在接受泵治疗。我是OmniPod用户,这是一个一次性胶囊,可以粘在我的身上并分配胰岛素3天。它由个人糖尿病管理器[PDM](见下文)控制,该管理器控制进餐期间分配的胰岛素量、血糖读数,并且包含一个用于计算碳水化合物的食物指数。(来源:myomnipod.com)新的PDM有一个用于下载数据的USB端口。该软件对Windows用户免费(名为CoPilot的软件包),但不支持Mac。将PDM插入我的Mac后,它像任何其他USB设备一样安装,并为我提供了一个可读卷,

随机推荐