软件工程学习报告

---恢复内容开始---

   通这学期的软件工程的课程的学习,第一章让我清楚地认知到了软件就是程序加软件工程,软件工程的基本含义。一个项目的好坏不仅仅决定于程序员的代码水平,还有很多的其他方面的因素。同时我了解到针对不同的大型项目有不同的模型。

      关于个人技术和流程,首先是要学会写单元测试软件的很多错误来源于程序员对模板的功能的误解,疏忽或不了解模块的变化。如何能让自己负责的模块功能定义尽量明确,模块内部的改变不会影响其他模块,而且模块的质量能够得到稳定的量化的保证。这时单元测试就尤为重要的。

  我在本团队的项目中负责数据库的访问,刚开始本打算用JDBC访问数据库,刚开始查阅资料和浏览他人博客,DBC全称为:Java Data Base Connectivity (java数据库连接),可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口,是一种SQL级的API。它是由java语言编写完成,所以具有很好的跨平台特性,使用JDBC编写的数据库应用程序可以在任何支持java的平台上运行,而不必在不同的平台上编写不同的应用程序。

jdbc的主要功能:

(1)建立与数据库或者其他数据源的链接

(2)向数据库发送SQL命令

(3)处理数据库的返回结果

相关代码参考:

 1 import java.sql.DriverManager;
 2 import java.sql.ResultSet;
 3 import java.sql.SQLException;
 4 import java.sql.Statement;
 5 import java.sql.Connection;
 6 import java.sql.DriverManager;
 7 import java.sql.SQLException;
 8 
 9 
10 public class javaTest {
11    
12     public static void main(String[] args) throws ClassNotFoundException, SQLException  {
13         String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
14         String USER="root";
15         String PASSWORD="tiger";
16         //1.加载驱动程序
17         Class.forName("com.mysql.jdbc.Driver");
18         //2.获得数据库链接
19         Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
20         //3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
21         Statement st=conn.createStatement();
22         ResultSet rs=st.executeQuery("select * from user");
23         //4.处理数据库的返回结果(使用ResultSet类)
24         while(rs.next()){
25             System.out.println(rs.getString("user_name")+" "
26                           +rs.getString("user_password"));
27         }
28         
29         //关闭资源
30         rs.close();
31         st.close();
32         conn.close();
33     }
34 }
获取数据库连接代码参考:
 1 import java.sql.Connection;
 2 import java.sql.DriverManager;
 3 import java.sql.SQLException;
 4 
 5 public class DBUtil {
 6 
 7     private static final String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
 8     private static final String USER="root";
 9     private static final String PASSWORD="tiger";
10     
11     private static Connection conn=null;
12     
13     static {
14         try {
15             //1.加载驱动程序
16             Class.forName("com.mysql.jdbc.Driver");
17             //2.获得数据库的连接
18             conn=DriverManager.getConnection(URL, USER, PASSWORD);
19         } catch (ClassNotFoundException e) {
20             e.printStackTrace();
21         } catch (SQLException e) {
22             e.printStackTrace();
23         }
24     }
25     //将获得的数据库与java的链接返回(返回的类型为Connection)
26     public static Connection getConnection(){
27         return conn;
28     }
29 }

增加表记录:
 1 import java.sql.DriverManager;
 2 import java.sql.PreparedStatement;
 3 import java.sql.ResultSet;
 4 import java.sql.SQLException;
 5 import java.sql.Statement;
 6 import java.sql.Connection;
 7 import java.sql.DriverManager;
 8 import java.sql.SQLException;
 9 
10 
11 public class javaTest {
12    
13     public static void main(String[] args) throws ClassNotFoundException, SQLException  {
14         String URL="jdbc:mysql://127.0.0.1:3306/imooc?useUnicode=true&characterEncoding=utf-8";
15         String USER="root";
16         String PASSWORD="tiger";
17         //1.加载驱动程序
18         Class.forName("com.mysql.jdbc.Driver");
19         //2.获得数据库链接
20         Connection conn=DriverManager.getConnection(URL, USER, PASSWORD);
21         //3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
22         String s=""+"insert into user(id,user_name,user_password) values("+"2,?,123)";
23         PreparedStatement pst=conn.prepareStatement(s);
24         
25         pst.setString(1, "xiaoshuai1");
26         //pst.setString(2, "123");
27             
28         pst.execute();        
29         //关闭资源        
30         pst.close();
31         conn.close();
32     }
33 }

其它操作 略
conf.xml 文件相关代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
 <configuration>  
 <environments default="cybatis">
        <environment id="cybatis">
            <transactionManager type="JDBC" />
             <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/test" />
                 <property name="username" value="root" />
                 <property name="password" value="123root" />
             </dataSource>
        </environment>
     </environments>
     
      <mappers>
      <!-- 自动扫描mapping包下面的接口和xml文件 -->
       <package name="me/gacl/mapping"/>
       </mappers>
       
 </configuration>
uerMapper.xml 相关代码:
<?xml version="1.0" encoding="UTF-8" ?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 
    
 <mapper namespace="me.gacl.mapping.testMapper">
     <!-- 自定义返回结果集 -->
    <resultMap id="userMap" type="bean.User">
        <id property="id" column="u_id" javaType="java.lang.Integer"></id>
        <result property="name" column="u_name"
            javaType="java.lang.String"></result>
        <result property="age" column="u_age"
            javaType="java.lang.Integer"></result>
    </resultMap>
 
    <select id="getUser" parameterType="int" resultMap="userMap">
        select * from test where u_id=#{id}
    </select>
    
 </mapper>
测试类test1:
package tool;
import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


import bean.User;
import me.gacl.mapping.testMapper;

public class Test1 {

    public static void main(String[] args) throws IOException {
        //mybatis的配置文件
       
        //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
        //Reader reader = Resources.getResourceAsReader(resource);
        //构建sqlSession的工厂
        //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        //创建能执行映射文件中sql的sqlSession
        
        /*
         * 映射sql的标识字符串,
         * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
         * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
         */
       
        //执行查询返回一个唯一user对象的sql
        SqlSession session = DBTool.getSeesion();
        testMapper mapper=session.getMapper(testMapper.class);
        
        try{
             User user =mapper.getUser(12);
             System.out.println(user);
        }catch(Exception e){
            e.printStackTrace();
            session.rollback();
        }//try-catch
       
    }
}


单元测试有单元测试的标准,单元测试应该是最基本的功能/参数上验证程序的正确性。  单元测试必须是最熟悉代码的人来写,也就是程序员本人。单元测试过后,机器状态保持不变。等等.....。

而关于效能分析的两种方法,抽样和代码注入。一般做法就是找到效能瓶颈所在,然后对特定的模块采用代码注入的方法进行详细分析。

此后,还通过结对编程来锻炼双人合作,学习到了两人合作的不同阶段和技巧。

此后便进入到了团队和流程的学习,软件团队的模式,有蜂窝模式(chaos team),主治医师模式(chief progammaer team,suigical team)还有明星模式(super star model) 社区模式 业余剧团模式 秘密团队模式  特工模式  交响乐团模式  爵士乐模式  功能团队模式  官僚模式 

开发流程有 写了字再改模式(code and fix),还有很经典的 瀑布模型(waterfall model)及其它的变形。

开发的统一流程有 :业务建模,需求,分析和设计, 实现 ,测试, 部署 ,配置和变更管理 ,项目管理 ,初始阶段,  细化阶段 ,构造阶段, 交付阶段。

       此外还有老板驱动流程,渐进交付流程,MVP,MBP.

---恢复内容结束---

原文地址:https://www.cnblogs.com/liuwenting/p/8124795.html