程序员内功修炼大法【反射、内省】(上)

举报
XiaoLin_Java 发表于 2021/12/05 23:12:33 2021/12/05
【摘要】 一、软件开发概述 2.1、软件开发的生命周期​ 生命周期: 从立项到软件停用的过程问题的定义及规划: 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性需求分析: 在确定软件开发可行的情况下,对软件需要实现的各功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。软件设计: 此阶段主要根据需求分析的结果,把整个软件系统...

一、软件开发概述

2.1、软件开发的生命周期

​ 生命周期: 从立项到软件停用的过程

  1. 问题的定义及规划: 此阶段是软件开发方与需求方共同讨论,主要确定软件的开发目标及其可行性
  2. 需求分析: 在确定软件开发可行的情况下,对软件需要实现的各功能进行详细分析。需求分析阶段是一个很重要的阶段,这一阶段做得好,将为整个软件开发项目的成功打下良好的基础。
  3. 软件设计: 此阶段主要根据需求分析的结果,把整个软件系统划分为大大小小的多个模块,设计出每一个模块的具体结构。如系统框架设计,数据库设计等。软件设计一般分为总体设计和详细设计。
  4. 程序编码: 此阶段是将软件设计的结果转换成计算机可运行的程序代码。在程序编码中必须要制定统一,符合标准的编写规范。以保证程序的可读性,易维护性,提高程序的运行效率。
  5. 软件测试: 在软件设计完成后要经过严密的测试,以发现软件在整个设计过程中存在的问题并加以纠正。整个测试过程分单元测试(白盒)、集成测试(黑盒,功能测试、强度性能测试)以及系统测试三个阶段进行。测试的方法主要有白盒测试和黑盒测试两种。在测试过程中需要建立详细的测试计划并严格按照测试计划进行测试,以减少测试的随意性。
  6. 运行维护: 安装部署软件系统,修复软件中存在的bug和升级系统。在软件开发完成并投入使后,由于多方面的原因,软件不能继续适应用户的要求。要延续软件的使用寿命,就必须对软件进行维护。软件的维护包括纠错性维护和改进性维护两个方面

2.2、软件设计原则

​ 为了提高软件的开发效率,降低软件开发成本,一个优良的软件系统应该具有以下特点:

  1. 可重用性:遵循 DRY(Don’t Repeat Yourself Principle) 原则,减少软件中的重复代码。
  2. 可拓展性:当软件需要升级增加新的功能,能够在现有的系统架构上方便地创建新的模块,而不需要改变软件现有的结构,也不会影响已经存在的模块。
  3. 可维护性:当用户需求发生变化时,只需要修改局部的模块中的少量代码即可.
  4. 高内聚性:内聚,强调一个系模块内的功能联系,每个模块只完成特定的功能,不同模块之间不会有功能的重叠,高内聚性可以提高软件的可重用性和可维护性。
  5. 低耦合性:耦合,强调的是多个模块之间的关系,模块之间相互独立,修改某一个模块,不会影响到其他的模块。低耦合性提高了软件的可维护性。

2.3、编码规范

​ 基本命名规范:使用有意义的英文单词,多个单词用驼峰表示法

包名

​ 全小写 , 域名倒写.模块名.组件名 ,例如:com.util

接口名

​ 首字母大写,形容词,副词。习惯性的以 I 开头。此时的I表示 interface,见名知意.(不强制,要结合其他规范综合考虑),例如:IUserServiceIEmployeeService

接口实现类

​ 习惯性使用 Impl 结尾.(不强制,要结合其他规范综合考虑),例如:UserServiceImplEmployeeServiceImpl

类名

​ 首字母大写,名词。遵循驼峰表示法。例如:User,Employ

方法名

​ 首字母小写。力求语义清晰,使用多个单词。遵循驼峰表示法。例如:getUserInfoByName()

变量名

​ 首字母小写。遵循驼峰表示法。例如:userInfo

常量名

​ 全大写,力求语义清晰,使用多个单词。使用下划线分割。例如:MAX_STOCK_COUNT.

二、软件测试

​ 软件测试经常分为两类:黑盒测试和白盒测试。

2.1、黑盒测试

​ 黑盒测试也称功能测试,是通过测试来检测每个功能是否能正常使用,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序的接口上进行测试,检查程序功能是否 按照需求规格说明书 的规定正常使用。

简单来说就是:不需要写代码,给输入值,看程序是否能够输出期望的值。

​ 他主要发现以下几个错误:

  1. 功能是否不正确或遗漏
  2. 界面是否有错误
  3. 输入和输出错误
  4. 数据库访问错误
  5. 性能是否有问题
  6. 初始化和终止错误等

2.2、白盒测试

​ 由开发人员来测试. 又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常执行。测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。

简单来说就是:需要写代码的。关注程序具体的执行流程。

2.3、JUnit测试

​ JUnit 是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。JUnit 测试是程序员测试,即白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。

2.3.1、JUnit依赖安装

​ 由于 JUnit 4 回归测试框架是三方提供的,不是 JDK 自带的,所有要使用需导入人家的 jar 包以及安装对应的插件,这里以maven为例,导入maven坐标:

    <!-- https://mvnrepository.com/artifact/junit/junit -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

2.3.2、JUnit常用注解

​ JUnit配上一些常用注解可以解决代码重复的问题

2.3.2.1、@Before

​ 修饰的方法会在测试方法之前被自动执行

2.3.2.2、@After

​ 修饰的方法会在测试方法执行之后自动被执行,如果有异常的话,@After后面的代码也会执行

三、配置文件

​ 按理说只要能保存一些配置信息,供程序动态读取数据就OK,但是为了提高效率,在 IT 行业中,习惯使用两种具有特殊特点的文件来作为配置文件

  1. properties 文件
  2. XML文件

3.1、properties文件

​ 该文件称属性文件 / 资源文件 / 配置文件, 以 properties 作为文件后缀名,存取特点是KV键值对的格式:key=value,多对数据使用换行分开

注意事项:

  1. 在配置文件中,所有的数据都是字符串,不需要使用引号。
  2. 在配置文件中不需要使用空格

3.1.1、解析properties文件

​ 如果要读取 properties 中的数据,我们使用 IO 操作,一行一行的读取,再通过=来切分字符串也可以完成.但是还是比较麻烦的,如果有注释更麻烦,此时我们可以意识到这么复杂的步骤,SUN公司肯定帮我们写好了工具方法,这就是是 Properties

在这里插入图片描述

Properties 是 Map 的实现类.可以继承过来map的常见的操作方法(get,put....),map中的方法,我们一般都不用.因为 properties 文件比较特殊,我们一般使用 Properties 类的新增的方法。

3.1.2、常见的API

  1. public void load(InputStream inStream); 通过输入流加载配置文件中的内容。
  2. public String getProperty(String key);// 通过属性名获取属性值
package com.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * @author Xiao_Lin
 * @date 2020/12/28 11:55
 */
public class ProTest {

  public static void main(String[] args) throws IOException {
    //读取配置文件中的数据
    Properties properties = new Properties();
    //为了获取ClassLoder对象,跟Thread无关
    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    //通过类加载器去读取配置文件发,返回一个输入流
    InputStream stream = loader.getResourceAsStream("user.properties");
    //加载配置文件
    properties.load(stream);
    System.out.println(properties.getProperty("user"));
    System.out.println(properties.getProperty("password"));
  }
}

3.2、XML文件

​ XML(Extensible Markup Language),是一种可扩展的标记语言.(使用◇>括起来)XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于1998年发布的。

​ XML1.0规范.它的设计宗旨是传输数据,而不是显示数据(HTML).它的标签没有被预定义需要自行定义标签.它是W3C的推荐标准。

3.2.1、为什么要学习XML

  1. XML是一种通用的数据交换格式。
  2. 许多系统的配置文件都是使用XML。
  3. JavaEE框架基本都有在使用XML

3.2.2、XML的语法

  1. XML文档需要在文档第一行声明,声明表示
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。