2020春季学期哈工大软件构造学习心得一
前言:
今年是特殊的一年,由于新冠病毒的爆发,导致我们无法正常开学,所以网上开课如期进行,其中软件构造是这学期我们要面临的巨大挑战。
准备工作:
上学期末得知本门课程需要学习Java语言进行编程,所以在寒假刚开始,就选择了MOOC上北京大学的Java程序设计这门课程。MOOC链接
这门课程的分类很细,而且有基础的选择题,大概用了10天左右的时间就完成了视频的观看。本以为已经可以达到编写一般Java程序的程度,但在真正实验过程中,才发现学习的不是很扎实,这都是因为没有“熟能生巧”的缘故,纸上谈兵是不可能打好每一场仗的。
了解
软件构造(Software Construction),还没了解时,认为这门课程只是在考验我们的编程,用来完成一些完整的软件,感觉上就是一个个小问题的叠加,没有什么难度。但是上完第一堂网课后就彻底颠覆了对这门课的看法。
首先我们要先了解什么是软件。软件一般分为系统软件和应用软件两种,而软件是直接面向用户的,所以要想做到让用户满意,就需要软件开发人员构建高质量的软件。
一个高质量的软件设计过程是十分复杂的,有很多需要构造者满足的条件,比如可理解性、可维护性、可复用性、健壮性、时空性能等;如果在一个项目的生命周期的前、中、后期都强调质量,那么一个高质量的计划、高效的实践以及系统测试是必不可少的。
主要内容
- 软件构造过程中的多维度视图
这幅图详细写出了各个维度之间的关系
编译时&运行时
代码角度&模块角度
时刻&时段
三个维度,相互组成,软件所关注的内容也不相同,对于软件的编写也会产生不同的影响
维度组合 | 内容 |
---|---|
编程时、代码角度、时刻 |
考虑源代码如何由基本程序块组织以及依赖关系 1.词汇层面 2.语法层面(AST) 3.语义层面(Class Diagram) |
编程时、代码角度、时段 |
Code churn 代码变化 体现在代码行的增、删、改和文件版本的变换 |
编程时、模块角度、时刻 |
1.源代码被物理地组织成文件,这些文件进一步被目录组织起来 2.文件被封装到包中,并且在逻辑上被封装到组件和子系统中 3.可重用模块以库的形式存在 所以开发者一般会调用库中的模块来编写程序 |
编程时、模块角度、时段 |
用版本来记录各项软件实体随时间的变化 软件随需求进化,在维护、更新时,版本记录可以很好的帮助 |
运行时、代码角度、时刻 | 代码快照:描述程序运行时内存里变量层面的状态,分析内存占用情况等 |
运行时、代码角度、时段 | 利用UML以动态的形式描述类 |
运行时、模块角度、时刻 | 模块分析 |
运行时、模块角度、时段 | log日志 |
各个维度之间的关系如下图所示:
- 软件构造的质量目标
上一部分搞清楚了“要构造的结果是什么”, 这一部分要理解清楚“构造的结果如何才算好”
软件系统的质量特性
- 外部和内部质量因素
外部质量因素影响用户,内部质量因素影响软件本身和开发者。外部质量取决于内部质量 - 重要的外部质量因素
- 质量因素之间的权衡
外部质量因素
- 正确性
若输入正确,输出也正确(至高无上的质量指标) - 健壮性
针对异常情况的处理,遇到异常不能“崩溃”,是对正确性的补充 - 拓展性
软件能够根据需求调整变化的能力 - 复用性
一次开发,多次使用 - 兼容性
不同的软件系统之间相互可容易的集成 - 高效性
软件系统对硬件资源的需求程度(保证正确性的前提下) - 移植性
软件可方便的在不同的技术环境之间移植 - 易用性
软件用户更便于使用我们开发的软件 - 功能性
系统尽可能提供更加全面的功能 - 及时性
在用户需求之前完成软件开发很重要 - 其他
可验证性,完整性,可修复性,经济性等等
内部质量因素
- 代码量
- 高聚合,低耦合
- 易读易理解
- 复杂度
- 规模
- 其他
质量因素之间的折中考虑
“正确性”绝不能与其他质量因素折中
- 完备性与易用性
- 经济性与功能性
- 高效性可移植性
- 高效性与复用性
- 经济性与复用性
- 及时性与扩展性
软件建设五大质量目标
- 易于理解:优雅优美的代码/易懂
- 随时可以更改:可维护性和适应性
- 开发成本低:为重用而设计:可重用性
- 安全无漏洞:健壮性
- 高效运行:性能
2020春季学期哈工大软件构造学习心得一相关推荐
- 2020春季学期哈工大软件构造学习心得二
前言 上一章主要讲了软件构造的结果形态以及如何是一个"好"的软件 这一章主要学习软件开发遵循着一个什么样的过程 - 软件生命周期与配置管理 From 0 to 1,from 1 t ...
- 2020春季学期哈工大软件构造学习心得三
Abstract Data Type (ADT) and ObjectOriented Programming (OOP) 前言 前两章回答了:什么是"高质量的软件". 如何从不同 ...
- 2020春季学期哈工大软件构造学习心得五
面向对象的编程 面向对象的标准 "准备更改"和"为重用而设计"的泛型(泛型):应该可以用表示任意类型的形式泛型参数编写类. 继承:应该可以将一个类定义为继承自另 ...
- 2020春季学期哈工大软件构造学习心得四
程序设计语言中的函数和方法 参数类型是否匹配,在静态类型检查阶段完成 返回值类型是否匹配,也在静态类型检查阶段完成 规约:交流编程 Spec给"供需双方"都确定了责任,在调用的时候 ...
- HIT-2022年春季学期《软件构造》Lab 1实验心得
目录 2022年春季学期计算学部<软件构造> 课程Lab 1实验心得 1.实验目标概述 2.实验环境配置 3.实验过程 3.1 Magic Squares 3.2 Turtl ...
- 哈工大软件构造学习笔记1 Views and Quality Objectives of Software Construction
先要搞清楚软件构造的对象是什么,如何刻画,在关注如何构造. 1,Five key quality objectives of software construction 软件构造的五个关键质量目标 容 ...
- HIT软件构造-学习心得
伪代码编程 伪代码是指某种用来描述算法.子程序.类或完整程序的工作逻辑的.非形式的.类似于英语的记法. 1. 用类似英语的语句来精确描述特定的操作 2. 避免使用目标编程语言中的语法元素 这点是关键, ...
- 2022哈工大软件构造lab1小结(知识点)
哈工大软件构造lab1小结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 问题一 使用的库 异常处理机制 字符串内容检查 写入文件 问题二 problem 3:画一 ...
- 哈工大软件构造期末知识点总结
哈工大软件构造试题构成: 1.30-45分的选择题,10-20题 2.55-70分的简答与设计题,5-6题 考试知识点(不全面): 1.git工具的知识点 2.Java设计模式(一共有23个,主要考察 ...
最新文章
- ​Unity 游戏开发技巧集锦之制作一个望远镜与查看器摄像机
- 御泥坊搜索引擎优化网络诊断_掌握以下这些网络营销搜索引擎优化技巧,你的排名想不靠前都难!...
- 现代谱估计:多窗口谱相关性
- wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
- NUMTRYE - Number Theory (Easy)
- ssl2648-线段树练习5【线段树】
- YY:马化腾的大漏招
- 微服务技术栈:常见注册中心组件,对比分析
- 应急响应前移:从事后到事前
- 【光学】基于matlab GUI带切趾的光线布拉格光栅滤波特性仿真【含Matlab源码 1505期】
- [GIS原理] 10.1 空间统计描述(描述性分析、探索性数据分析)、空间自相关分析 - QQ图、权重矩阵、Moran'sl、G统计量
- 一切皆是文件:UNIX,Linux 操作系統的設計哲學
- mybatis 大小写 字符串_Mybatis查询时,区分大小写操作
- 近几年CVPR图像压缩总结
- 看见“信任”,可信计算平台的由来解读(TPM、TCM、TPCM、等保2.0解读)。
- 关于module ‘datetime‘ has no attribute ‘now‘报错解决方案
- =,==,===的区别
- mysql rollback to,MySQL存储过程SAVEPOINT ROLLBACK to
- 《内网安全攻防:渗透测试实战指南》读书笔记(二):内网信息收集
- Python 之网络编程之socket(3)hashlib模块