zdcaolei

软件工程学习笔记一

我很小的时候就有梦想,想要当一个极为优秀的程序设计师,因为觉得程序设计师非常的酷、非常帅,能操纵虚拟的世界,运行如此完美的逻辑,并造福他人,是一种高尚有趣的职业。现在这种向往,并没有因为外界的许多因素而改变。

最近开始学习软件工程,其实较早的时候就自学过,有许多知识都忘了,现在再正式来学,感觉还是做一些笔记比较好,软件工程学是对软件设计反思的结晶,要设计好的软件,一定要吃透。现在拿出来分享,主要是记录和笔记形式,并不一定非常的全面,请见谅,仅抛出一些砖头。

 

软件的生命周期:

 

1、问题的定义:问题定义阶段要回答的关键问题是:“要解决的问题是什么?”尽管确切的定义问题的必要性是非常明显的,但是在实践中它却是常常被忽略的。通过对客户的访问调查,系统分析员扼要的写出关于问题的性质、工程目标和工程规模的书面报告,经过讨论和必要的修改之后这份报告应该得到客户的确认。

 

2、可行性研究:这个阶段要回答的关键问题是:“对于上一个阶段所确定的问题有行得通的解决办法吗?”可行性研究应该比较简短,这个阶段的任务不是具体解决问题,而是研究问题的范围,探索这个问题是否值得去解,是否有可行的解决办法。

可行性研究的结果是客户做出是否继续进行这项工程的决定的重要依据。

 

3、需求分析:这个阶段的任务仍然不是具体的解决问题,而是准确的确定“为了解决这个问题,目标系统必须做什么?”主要是确定目标系统必须具备哪些功能。

  在需求分析阶段确定的系统逻辑模型是以后设计和实现目标系统的基础,因此必须准确完整地体现用户的需求。这个阶段的一项重要任务,是用正式文档准确的记录对目标系统的需求,这份文档通常称为规格说明书。

 

4、总体设计:这个阶段必须回答的关键问题是:“概括的说,应该怎样实现目标系统?”总体设计又称概要设计。

首先,应该设计出实现目标系统的几种可能的方案,通常至少应该设计出低成本、中成本和高成本3种方案。软件工程师应该用适合的表达工具描述各种方案,分析每种方案的优缺点,并在充分权衡各方面利弊的基础上,推荐一个最佳方案,如果用户接受所推荐的方案,则应该进一步完成接下来的任务。

软件设计的一条基本原理就是,程序应该模块化,也就是说,一个程序应该由若干个规模适中的模块按照合理的层次结构组织而成。因此,总体设计的另一项主要任务就是设计程序的体系结构,也就是确定程序由哪些模块组成以及模块间的关系。

 

5、详细设计:详细设计的任务就是把解法具体化,也就是回答了下面的关键问题:“应该怎样具体地实现这个系统呢?”这个阶段还不是编写程序,而是设计出程序的详细规格说明,这种规格说明的作用很莱斯与其他工程领域中工程师的工程蓝图,它们应当包含具体的细节,程序员可以根据它们写出实际的程序代码。

 

6、编码和单元测试:这个阶段的关键任务是写出容易理解、容易维护的程序模块。并且仔细测试编写的每一个模块。

 

7、综合测试:这个阶段的关键任务是通过各种类型的测试(及相应的调试)使软件达到预定的要求。

最基本的测试是集成测试和验收测试。集成测试是根据设计的软件结构,把经过单元测试的检验的模块按某种选定的策略装配起来,在装配过程中对程序进行必要的测试。所谓验收测试则是按照规格说明书的规定(通常在需求分析阶段确定),由用户(或在用户积极参与下)对目标系统进行验收。

必要时,还可以再通过现场测试或平行运行等方法对目标系统进一步测试检验。

应当用正式的文档资料把测试计划、详细测试方案以及实际测试结果保存下来,作为软件配置的一个组成部分。

 

8、软件维护:维护阶段的关键任务是,通过各种必要的维护活动使系统持久地满足用户的需求。

通常有4类维护活动:1、改正性维护,也就是诊断和改正在使用过程中发现的软件错误2、完善性维护,即根据用户的要求改进或扩充软件使它更完善3、预防性维护,即修改软件,为将来的维护活动预先做准备4、适应性维护,即修改软件以适应环境的变化。

实际上每一项维护活动都应该经过提出维护要求(或报告问题),分析维护要求,提出维护方案,审批维护方案,确定维护计划,修改软件设计,修改程序,测试程序,复查验收等一系列步骤,因此实质上是经历了一次压缩和简化了的软件定义和开发的全过程。

每一项维护活动都应该准确的记录下来,作为正式的文档资料加以保存。

在实际从事软件开发工作时,软件规模、种类、开发环境及开发时使用的技术方法等因素,都影响阶段的划分。事实上,承担的软件项目不同,应该完成的任务也有差异,没有一个适用于所有软件项目的任务集合。

 

画数据流图的一般步骤:

1、确定数据源点和终点

2、确定系统的输入输出数据流

3、保证输入流、输出流一致前提下,由顶向下进行逐层分解(一般不超过9层)

4、将必要的存储与加工(处理)相匹配

5、画出错误及例外条件处理情况

6、避免线条的交叉(必要时使用重复的外部项(源点、终点)或数据存储符号)

 

数据流图的基本目的是利用它来作为交流信息的工具。绝大多数的用户都可以理解和评价它。数据流图的另一个主要用途是作为分析和设计的工具。

数据流图上画出的许多自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现。

 

数据字典:是关于数据的信息的集合。对数据流图中包含的所有元素的定义的集合。

数据字典的内容一般分类为4类:1、数据流2、数据流分量3、数据存储4、处理

 

数据字典最重要的用途是作为分析阶段的工具,消除分析员与用户之间可能产生的误解。

 

需求分析:对目标系统提出完整、准确、清晰、具体的要求。

在需求分析阶段结束之前,系统分析员应该写出软件需求规格说明书,以书面形式准确的描述软件需求。

这里指出需求分析容易犯的错误:

个人观点,在功能需求分析阶段,一般易于漏掉安全需求的分析,所以建议将需求分析分为:一般功能、安全功能,一般功能又分为:常规功能、扩展功能(可能新增的一些功能)。

 

 

例如我们考虑对于银行存取款机的功能需求分析:

一般功能:身份验证、语音提示功能、发布公告(广告)、修改密码、转账功能、存款功能、取款功能、纸币验证(存款必须)、查询余额和账户信息、打印凭票

扩展功能:缴纳水电费、电话费充值等

安全功能:密码输入错误限制(例如三次吞卡)、用户操作日志、摄像头监视(取款机内部摄像头)、吞卡功能、锁死账户功能、系统运行及故障报告。

 

这是一些简单的记录,认为以上信息相对比较重要。

分类:

技术点:

相关文章: