前言:
在学习软件工程务实课程的过程中,我深刻地体会到了软件工程中理论与实践的结合是非常重要的。通过本课程的学习,我对软件工程的实践应用和开发流程有了更深层次的了解和掌握,这对我今后的软件开发工作有着较为重要的指导意义。在这篇学习总结中,我将回顾本课程的学习内容,并对这些内容进行汇总和总结。同时,我也将描述在学习本课程中获得的最重要的见解和技能。
学习内容:
软件工程务实是一门重要的课程,其涵盖了软件工程的各个方面,其中主要的学习内容包括:
1. 软件工程的基本概念和原理:学习软件工程的基本结构、流程、规范,以及质量控制等理论。
2. 需求分析与规格说明书:学习如何对用户需求进行分析和概述,如何制定详细的规格说明书,以及如何保证需求规格的正确性。
3. 架构设计和实现:学习如何进行软件系统设计,包括系统架构、软件模型、设计模式等,以及如何进行系统实现和集成测试。
4. 软件测试与维护:学习如何进行软件测试、如何运用测试工具、测试流程、测试管理等,以及如何进行软件的维护和升级工作。
5. 软件质量保障和合作开发: 学习如何确保软件质量,如何进行多人合作开发,并掌握相应的协作工具和流程。
在这些学习内容的基础上,我们还进行了设计开发项目,学习了如何进行团队合作和项目管理,更深入地体验和掌握了软件工程的实践应用。
新闻系统案例展示
可行性研究是指对某项计划性活动的可行性进行全面的调查、分析和评价,以确定其在技术、经济、市场和法律环境等方面是否具备可行性和可接受性的阶段。
一个完整的可行性研究应该包括以下内容:
1. 技术可行性分析:通过对技术、资源和条件等方面的深入分析,评估计划在技术实现方面是否存在难点和风险。
2. 经济可行性分析:对资源的投入和产出进行评估,分析项目的成本、效益和收益,决定项目的经济可行性、投资回报率和资产价值等。
3. 市场可行性分析:对目标市场的规模、特征、需求等进行全面的调查和评估,确定项目在市场中的位置和竞争力,判断项目的市场可行性。
4. 法律可行性分析:对项目涉及的法律法规、政策和标准等方面进行分析和评估,确保项目的合法性和符合规范要求。
5. 社会可行性分析:评估项目对社会、环境和人类福祉等方面的影响,确保项目的社会可行性和符合社会利益。
在进行可行性研究时,还需要进行项目风险评估和管理,制定相应的计划和措施,确保项目的顺利实施。
综上所述,可行性研究是项目管理和实施中非常重要的一环,只有通过全面的分析和评估,才能够确定一个项目的可行性和成功实施的前景。
设计与架构
软件开发工程的设计与架构是软件开发的重要环节,它们关注的是软件系统的整体架构,包括软件模块之间的组织、交互和关系,以及软件实现的整体流程和设计规范等。
软件设计可以分为三个层次:概念设计、详细设计和实现设计。概念设计是针对软件系统整体的一种初步设计,在这个层次上,开发人员需要确定各个模块之间的关系、数据流和功能,通常采用UML(统一建模语言)等建模工具进行设计。详细设计则是对概念设计的补充和细化,针对每个模块进行具体设计,明确各个模块的数据结构、算法和交互等细节。实现设计则是在详细设计的基础上,具体实现代码的设计和编写。
软件架构是软件系统的结构和组织方式,它关注的是整个软件系统的全局性质。常用的软件架构模式有三层架构、MVC架构、微服务架构、事件驱动架构等。在进行软件架构设计时,需要考虑系统的可扩展性、可维护性、安全性和性能等方面的问题,同时还要确保软件系统的易用性和用户体验。
部分项目代码
<template>
<div class="container">
<!-- <h2>登录</h2> -->
<form class="login-form">
<div class="form-group">
<label for="username">账户:</label>
<input type="text" id="username" v-model="loginForm.username" />
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" id="password" v-model="loginForm.password" />
</div>
<button @tap.prevent="login()">登录</button>
<button v-if="editing2" @tap.prevent="tiaozhuanindex(sid,snickname)">新闻管理页</button>
<button v-if="editing2" @tap.prevent="tiaozhuanindex2(sid,snickname)">用户管理页</button>
</form>
<button class="register-btn" @tap.prevent="registers()">{{ editing ? '取消注册' : '注册' }}</button>
<form class="register-form" v-if="editing">
<div class="form-group">
<label for="username2">账户:</label>
<input type="text" id="username2" v-model="registerForm.username" required />
</div>
<div class="form-group">
<label for="password2">密码:</label>
<input type="password" id="password2" v-model="registerForm.password" required />
</div>
<div class="form-group">
<label for="nickname">名称:</label>
<input type="text" id="nickname" v-model="registerForm.nickname" required />
</div>
<button @tap.prevent="register()">确认注册</button>
</form>
</div>
</template>
<script>
import {
druser,
setuser
} from "../../common/api.js";
export default {
data() {
return {
sid:0,
snickname:'',
editing: false,
editing2: false,
loginForm: {
username: '',
password: ''
},
registerForm: {
username: '',
password: '',
nickname: ''
}
}
},
methods: {
login() {
if (this.loginForm.password == '' || this.loginForm.username == '') {
alert("请输入用户或密码");
} else {
druser(this.loginForm).then((res) => {
if (res.statusCode == 401) {
alert('账户或密码错误!');
}
if (res.data.id != null) {
this.editing2 = true;
alert('登录成功');
this.sid = res.data.id;
this.snickname = res.data.nickname;
// 登录成功后跳转到 /pages/index/person.vue 页面
this.$router.push('/pages/index/person');
}
});
}
}
,
register() {
setuser(this.registerForm).then((res) => {
if (res.statusCode == 400) {
alert('用户名已存在!');
};
if (res.data.id != null) {
alert("完成注册");
}
console.log(res);
});
},
registers() {
if(this.editing != true){
this.editing = true;
}else{
this.editing = false;
}
},
tiaozhuanindex(id,nickname) { //跳转新闻管理
uni.navigateTo({
url: '/pages/index/index?id=' + id +'&nickname='+nickname
});
},
tiaozhuanindex2(id,nickname){ //跳转用户管理
uni.navigateTo({
url: '/pages/index/user?id=' + id +'&nickname='+nickname
});
}
}
}
</script>
<style>
<style scoped>
.container {
padding: 0 ;
margin: 0 ;
}
label{
font-family: 'Courier New', Courier, monospace;
font-size: 30px;
}
.login-form,
0
.register-form {
display: flex;
flex-direction: column;
align-items: center;
margin: 30px 0;
}
.form-group {
display: flex;
align-items: center;
margin-bottom: 20px;
}
.form-group label {
margin-right: 10px;
font-size: 16px;
}
.form-group input {
height: 30px;
width: 300px;
padding: 6px 12px;
border-radius: 4px;
border: 1px solid #ccc;
font-size: 16px;
outline: none;
}
button {
background-color:skyblue;
padding: 6px 12px;
border-radius: 4px;
border: none;
font-size: 16px;
color: black;
cursor: pointer;
transition: all 0.2s;
margin: 10rpx;
}
button.login-btn {
background-color: #007aff;
margin-right: 10px;
}
button.register-btn {
/* background-color: #555555; */
}
button:hover {
background-color: #8d8dd3;
}
</style>
<template>
<div>
<ul>
<li v-for="(article, index) in pagedArticles" :key="index">
<h2>{{ article.title }}</h2>
<h4>{{ article.classify }}</h4>
<p>{{ article.content }}</p>
<button @click="editArticle(article)">编辑</button>
<button @click="deleteArticle(article.id)">删除</button>
</li>
</ul>
<div v-show="numberOfPages > 1" class="pagination">
<span
v-for="page in numberOfPages"
:key="page"
:class="{ active: currentPage === page }"
@click="goToPage(page)"
>{{ page }}</span>
</div>
</div>
</template>
<script>
import { allxinwen, deletexinwen } from "../../common/api.js";
const PAGE_SIZE = 2;
export default {
data() {
return {
articles: [],
currentPage: 1,
};
},
methods: {
editArticle(article) {
uni.navigateTo({
url: '/pages/player/xwbj?id=' + article.id,
});
},
deleteArticle(id) {
if (confirm("是否确认删除文章?")) {
deletexinwen(id)
.then(() => {
this.loadArticles();
})
.catch((error) => {
console.log(error);
});
}
},
loadArticles() {
allxinwen()
.then((response) => {
this.articles = response.data;
})
.catch((error) => {
console.log(error);
});
},
paginateArticles(articles, pageSize, pageNumber) {
const start = (pageNumber - 1) * pageSize;
const end = start + pageSize;
return articles.slice(start, end);
},
goToPage(page) {
this.currentPage = page;
},
},
computed: {
numberOfPages() {
return Math.ceil(this.articles.length / PAGE_SIZE);
},
pagedArticles() {
return this.paginateArticles(this.articles, PAGE_SIZE, this.currentPage);
},
},
mounted() {
this.loadArticles();
},
};
</script>
<style>
.pagination {
display: flex;
justify-content: center;
margin-top: 20px;
}
.pagination span {
display: block;
padding: 5px 10px;
border: 1px solid #ddd;
margin: 0 5px;
border-radius: 5px;
cursor: pointer;
}
.pagination span.active {
border-color: #409eff;
color: #409eff;
}
</style>
<template>
<view>
<h1>山寨新闻欢迎您:{{usernickname}}</h1>
<h3>当前登录的用户ID:{{ userid }}</h3>
<button type="button" @click="getalluser()">查看全部用户</button>
<ul>
<li v-for="item in users" :key="item.id">
<p>ID: {{ item.id }}</p>
<p>Username: {{ item.username }}</p>
<p>Password: {{ item.password }}</p>
<p>Nickname: {{ item.nickname }}</p>
<button type="button" @click="postuser2(item)">编辑</button>
<form v-if="editing">
<label>编辑用户</label>
<input type="text" v-model="editingusername" />
<input type="text" v-model="editingpassword" />
<input type="text" v-model="editingnackname" />
<button type="button" @click="postuser3()">确认修改</button>
<button type="button" @click="deleteuser2(item.id)">删除用户!!!!!</button>
</form>
</li>
</ul>
</view>
</template>
<script>
import {
alluser,
postuser,
deleteUser
} from "../../common/api.js";
export default {
data() {
return {
userid: 0,
usernickname: '',
editing: false,
users: {},
editingid: '',
editingnackname: '',
editingusername: '',
editingpassword: ''
}
},
onLoad(options) {
this.userid = options.id;
this.usernickname = options.nickname;
},
methods: {
//查询全部用户
getalluser() {
alluser().then((res) => {
this.users = res.data;
// console.log(res.data);
// alert("完成!")
});
},
//修改用户
postuser2(item) {
this.editing = true;
this.editingid = item.id;
this.editingnackname = item.nickname;
this.editingusername = item.username;
this.editingpassword = item.password;
},
postuser3() {
const data = {
id: this.editingid,
nickname: this.editingnackname,
username: this.editingusername,
password: this.editingpassword
};
postuser(data).then((res) => {
// console.log(res.data);
alert("修改完成!")
});
},
deleteuser2(id) {
deleteUser(id).then((res) => {
// console.log(res.data);
alert("删除完成!")
});
}
}
}
</script>
<style>
</style>
学习总结:
-
实践是王道:软件工程是一门实践的学科,理论只是指导实践的工具。要想真正掌握软件工程,必须经常实践,不断提高自己的实践经验和能力。
-
注意工程实践:软件工程的最终目的是交付可靠的软件产品,在实际项目中要注意可行性分析、需求分析、设计、编码、测试等各个环节,遵循工程实践标准和规范,确保工程的高质量和效率。
-
多看多学:在软件工程领域内,新的技术和方法层出不穷。要想跟上时代的步伐,必须保持持续的学习和探索,多看书、看博客、看论文、看社交网络等等,积极按照自己的兴趣和需求学习和掌握新技术。
-
构建自我体系:软件工程是一门高度关联和综合性的学科,它包括很多基础学科和技术领域。要想真正掌握软件工程,建议根据自己的个人兴趣和需求,构建一个较为全面的自我学习体系,组成自己的知识网络。
-
持续提高:软件工程是一个不断发展、更新和变革的领域,要想在这个领域持续有新的创意和领先的思路,必须持续更新自己的技术和思想,不断提高自己的能力水平。