Test workflow

As we work according to Agile methodology QA team conducts the testing activities throughout all the development process.

Here’s the list if activities we are engaged in:

Planning and “grooming” sessions

The standard sprints take 10 days. We begin our work with Planning sessions, where we provide our estimations about how long this or that task would be in the testing phase for. When making the estimations we refer to: our experience from the previous sprints, tasks complexity, to the relations of the task under estimation to another tasks from the sprint backlog. This way we help our project management and BA to understand how to plan the sprint in the most efficient way.

Development

As the development team starts working on the tasks assigned to them, QA team proceeds with preparing test scenarios in the test automation framework. As soon as the development process goes further, the more possibilities we have to start adding the implementation for the previously prepared scenarios. This is the process that may last until the very end of the sprint, as the tasks are carried out by development team one by one. As soon as the code for some task is written and passed the review, the tasks gets into the hands of QA team for exploratory testing, for polishing the test automation code and for running the regression suite in order to make sure the product is still as functional as it was before the code changes. As soon as we are done with the previously mentioned activities, the code is ready to be merged to our develop branch along with the test code.

在这里插入图片描述

Mid-sprint reviews

When the sprint is already ongoing, there are cases our project team tends to have the special sessions in the middle of the sprint. This is needed for synchronisation of the work within the team members, to understand where we stand at and to communicate any issues or concerns which evolved after some work has already been done. It’s clear that sometimes the estimations made during the planning may differ from the reality, therefore in order to oversee the best way of completing the sprint the following sessions may be used for.

Retrospective sessions

During this kind of sessions QA team always aims to raise issues related to the overall development process as well as internal QA processes. We pay attention to all the inconveniences that we faced during the sprint and are thinking of the ways to get them resolved. When the solution for the problem is found, one of our team members takes responsibility for implementation of that solution.

New feature demos

Our work consists of re-testing of the previously reported defects as well as of new features development. When the part of a new feature is developed to the extent for it to be presented, we check if it responds to the requirements and take it to the demo. We use demo sessions to exchange our achievements with the second part of our project team, which is located in another HSBC office.

Daily stand-ups

Of course the crucial part of the team work in Agile environment are daily(morning) stand-up sessions. QA team actively takes part and provides the information on what they are working on, what has been done up to the moment and what would need to be completed in the nearest future. Very often we also raise any concerns related testing process and exchange information needed for further work on the sprint tasks with the development team.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DeepLog的workflow模型代码可以使用Python和深度学习框架TensorFlow或PyTorch来实现。以下是一个简单的代码示例来生成DeepLog workflow模型: 首先是数据预处理: ```python import numpy as np # 将日志数据转换为数字序列 def log_to_sequence(logs, word_dict): seq = [] for log in logs: words = log.split() seq.append([word_dict[word] for word in words]) return np.array(seq) # 将日志序列分割为固定长度的时间窗口 def sliding_window(seq, window_size, step): res = [] for i in range(0, len(seq) - window_size + 1, step): res.append(seq[i:i+window_size]) return np.array(res) ``` 然后是特征提取: ```python import tensorflow as tf # 构建CNN模型 def build_cnn_model(input_shape): model = tf.keras.models.Sequential([ tf.keras.layers.Conv1D(32, 3, activation='relu', input_shape=input_shape), tf.keras.layers.MaxPooling1D(2), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(8, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(4, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(1) ]) model.compile(loss='mse', optimizer='adam', metrics=['mae']) return model # 构建RNN模型 def build_rnn_model(input_shape): model = tf.keras.models.Sequential([ tf.keras.layers.LSTM(32, input_shape=input_shape), tf.keras.layers.Dense(32, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(16, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(8, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(4, activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(1) ]) model.compile(loss='mse', optimizer='adam', metrics=['mae']) return model ``` 接下来是异常检测: ```python # 构建自编码器模型 def build_autoencoder(input_shape): input_layer = tf.keras.layers.Input(shape=input_shape) encoded = tf.keras.layers.Dense(32, activation='relu')(input_layer) encoded = tf.keras.layers.Dropout(0.5)(encoded) encoded = tf.keras.layers.Dense(16, activation='relu')(encoded) encoded = tf.keras.layers.Dropout(0.5)(encoded) encoded = tf.keras.layers.Dense(8, activation='relu')(encoded) encoded = tf.keras.layers.Dropout(0.5)(encoded) encoded = tf.keras.layers.Dense(4, activation='relu')(encoded) encoded = tf.keras.layers.Dropout(0.5)(encoded) decoded = tf.keras.layers.Dense(8, activation='relu')(encoded) decoded = tf.keras.layers.Dropout(0.5)(decoded) decoded = tf.keras.layers.Dense(16, activation='relu')(decoded) decoded = tf.keras.layers.Dropout(0.5)(decoded) decoded = tf.keras.layers.Dense(32, activation='relu')(decoded) decoded = tf.keras.layers.Dropout(0.5)(decoded) decoded = tf.keras.layers.Dense(input_shape[0])(decoded) autoencoder = tf.keras.models.Model(input_layer, decoded) autoencoder.compile(optimizer='adam', loss='mse') encoder = tf.keras.models.Model(input_layer, encoded) return autoencoder, encoder # 检测异常行为 def detect_anomalies(model, data, threshold): recon_errors = np.mean(np.square(data - model.predict(data)), axis=1) return recon_errors > threshold ``` 最后是模型评估: ```python # 划分训练集和测试集 train_data, test_data = split_data(data, 0.8) # 将训练集输入数据转换为数字序列 train_seq = log_to_sequence(train_data, word_dict) # 将训练集日志序列分割为时间窗口 train_windows = sliding_window(train_seq, window_size, step) # 训练CNN模型 cnn_model = build_cnn_model((window_size,)) # 训练RNN模型 rnn_model = build_rnn_model((window_size, len(word_dict))) # 训练自编码器模型 autoencoder, encoder = build_autoencoder((window_size,)) autoencoder.fit(train_windows, train_windows, epochs=epochs, batch_size=batch_size) # 在测试数据集上检测异常行为 test_seq = log_to_sequence(test_data, word_dict) test_windows = sliding_window(test_seq, window_size, step) recon_errors = np.mean(np.square(test_windows - autoencoder.predict(test_windows)), axis=1) anomalies = detect_anomalies(autoencoder, test_windows, threshold) ``` 这是一个简单的DeepLog workflow模型的代码示例,您可以根据实际情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值